[
  {
    "path": ".bazelci/presubmit.yml",
    "content": "---\nplatforms:\n  ubuntu1804:\n    build_flags:\n    - \"--build_tag_filters=-nolinux\"\n    build_targets:\n    - \"//...\"\n    test_flags:\n    - \"--features=race\"\n    - \"--test_tag_filters=-nolinux\"\n    test_targets:\n    - \"//...\"\n  macos:\n    build_flags:\n    - \"--build_tag_filters=-nomacos\"\n    build_targets:\n    - \"//...\"\n    test_flags:\n    - \"--features=race\"\n    - \"--test_tag_filters=-nomacos\"\n    test_targets:\n    - \"//...\"\n"
  },
  {
    "path": ".bazelrc",
    "content": "build --cxxopt=-std=c++17 --host_cxxopt=-std=c++17\nbuild --test_output=errors\n"
  },
  {
    "path": ".bazelversion",
    "content": "9.0.1\n"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "// For format details, see https://aka.ms/devcontainer.json.\n{\n  \"name\": \"Go\",\n  \"build\": {\n    \"dockerfile\": \"../.github/Dockerfile\"\n  },\n  \"features\": {\n    \"ghcr.io/devcontainers/features/common-utils:2\": {},\n    \"ghcr.io/devcontainers/features/node:1\": {},\n    \"ghcr.io/devcontainers/features/go:1\": {}\n  },\n  \"customizations\": {\n    \"vscode\": {\n      \"editor.formatOnSave\": true,\n      \"go.toolsManagement.checkForUpdates\": \"local\",\n      \"go.useLanguageServer\": true,\n      \"go.gopath\": \"/go\",\n      \"go.goroot\": \"/usr/local/go\",\n      \"bazel.buildifierExecutable\": \"/go/bin/buildifier\",\n      \"bazel.buildifierFixOnFormat\": true,\n      \"bazel.enableCodeLens\": true,\n      \"extensions\": [\"golang.Go\", \"bazelbuild.vscode-bazel\"]\n    }\n  }\n}\n"
  },
  {
    "path": ".git-blame-ignore-revs",
    "content": "# .git-blame-ignore-revs\n# Formatted all protobuf files\nbc0110188a8ef8e232050c3d9b347198dc83536a\n"
  },
  {
    "path": ".github/Dockerfile",
    "content": "FROM golang:1.26.1\n\nRUN apt-get update && \\\n    DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \\\n        wget \\\n        unzip \\\n        openjdk-25-jre \\\n        bzip2 \\\n        patch && \\\n    apt-get clean -y && \\\n    rm -rf /var/lib/apt/lists/*\n\n# Install swagger-codegen\nENV SWAGGER_CODEGEN_VERSION=2.4.8\nRUN wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \\\n    -O /usr/local/bin/swagger-codegen-cli.jar && \\\n    echo '#!/bin/bash\\njava -jar /usr/local/bin/swagger-codegen-cli.jar \"$@\"' > /usr/local/bin/swagger-codegen && \\\n\tchmod +x /usr/local/bin/swagger-codegen\n\n# Install Bazelisk as bazel to manage Bazel\nRUN go install github.com/bazelbuild/bazelisk@latest && \\\n    mv $(which bazelisk) /usr/local/bin/bazel\n\n# Install buildifier for bazel formatting\nRUN go install github.com/bazelbuild/buildtools/buildifier@latest\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.md",
    "content": "---\nname: 🐛 Bug Report\nabout: Submit a bug report to help us improve\n---\n\n## 🐛 Bug Report\n\n(A clear and concise description of what the bug is.)\n\n## To Reproduce\n\n(Write your steps here:)\n\n1. Step 1...\n1. Step 2...\n1. Step 3...\n\n## Expected behavior\n\n(Write what you thought would happen.)\n\n## Actual Behavior\n\n(Write what happened. Add screenshots, if applicable.)\n\n## Your Environment\n\n(Environment name, version and operating system.)\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.md",
    "content": "---\nname: 📚 Documentation\nabout: Report an issue related to documentation\n---\n\n## 📚 Documentation\n\n(A clear and concise description of what the issue is.)\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature.md",
    "content": "---\nname: 🚀 Feature\nabout: Submit a proposal/request for a new feature\n---\n\n## 🚀 Feature\n\n(A clear and concise description of what the feature is.)\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "# The gRPC-Gateway project is maintained by volunteers in their spare time. Please follow these troubleshooting steps before submitting an issue.\n\n- [ ] Check if your issue has already been reported (https://github.com/grpc-ecosystem/grpc-gateway/issues).\n- [ ] Update your protoc to the [latest version](https://github.com/google/protobuf/releases).\n- [ ] Update your copy of the `grpc-gateway` library to the latest version from github:\n  ```sh\n  go get github.com/grpc-ecosystem/grpc-gateway/v2@latest\n  ```\n- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-openapiv2` binary from your `PATH`, and reinstall the latest versions:\n\n  ```sh\n  go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway\n  go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2\n  ```\n\n## I still have a problem!\n\nPlease consider reaching out for help on a chat forum, such as\n[Gophers Slack](https://invite.slack.golangbridge.org/) (channel #grpc-gateway).\nIt's much easier to help with common debugging steps in a chat, and some of\nthe maintainers are reading the channel regularly. If you\nsubmit an issue which is clearly an environment setup problem, or it's obvious\nyou haven't tried seeking help somewhere else first, we may close your issue.\n\n## I still have a problem!\n\nPlease follow these steps to submit a bug report:\n\n### Bug reports:\n\nFill in the following sections with explanations of what's gone wrong.\n\n### Steps you follow to reproduce the error:\n\n```html\n<!-- Example steps\n1.  I grab my catapult\n2.  I load it with lettuce\n3.  Press the fire button\n4.  It falls over\n-->\n```\n\nYour steps here.\n\n### What did you expect to happen instead:\n\n```html\n<!-- Example answer\n1.  It would have rained lettuce from the sky bringing forth a cuddly army of bunnies we could\n    play with\n-->\n```\n\nYour answer here.\n\n### What's your theory on why it isn't working:\n\n```html\n<!-- Example answer\nEvil wizards are hoarding the bunnies and don't want to share. The wizards are casting\nlettuce protection spells so the catapult won't work.\n-->\n```\n\nYour theory here.\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "<!--\nThank you for sending the PR! We appreciate you spending the time to work on these changes.\n\nHelp us understand your motivation by explaining why you decided to make this change.\n\nYou can learn more about contributing to gRPC-Gateway here: https://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md\n\nHappy contributing!\n\n-->\n\n#### References to other Issues or PRs\n\n<!-- If this pull request fixes an issue, write \"Fixes #NNNN\" in that exact\nformat, e.g. \"Fixes #1234\" (see\nhttps://tinyurl.com/auto-closing for more information). Also, please\nwrite a comment on that issue linking back to this pull request once it is\nopen. -->\n\n#### Have you read the [Contributing Guidelines](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md)?\n\n#### Brief description of what is fixed or changed\n\n#### Other comments\n"
  },
  {
    "path": ".github/README_GITHUB.md",
    "content": "### What's up with the Dockerfile?\n\nThe `Dockerfile` in this folder is used as the build environment when regenerating the files (see CONTRIBUTING.md).\nThe canonical repository for this Dockerfile is `ghcr.io/grpc-ecosystem/grpc-gateway/build-env`.\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where the package manifests are located.\n# Please see the documentation for all configuration options:\n# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n\nversion: 2\nupdates:\n  - package-ecosystem: \"bundler\" # See documentation for possible values\n    directory: \"/docs\" # Location of package manifests\n    schedule:\n      interval: \"daily\"\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule: \n      interval: daily\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a stale issue is closed\ndaysUntilClose: 7\n# Issues with these labels will never be considered stale\nexemptLabels:\n  - help wanted\n  - enhancement\n  - security\n# Label to use when marking an issue as stale\nstaleLabel: wontfix\n# Comment to post when marking an issue as stale. Set to `false` to disable\nmarkComment: >\n  This issue has been automatically marked as stale because it has not had\n  recent activity. It will be closed if no further activity occurs. Thank you\n  for your contributions.\n# Comment to post when closing a stale issue. Set to `false` to disable\ncloseComment: false\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "on:\n  - pull_request\npermissions:\n  contents: read\nname: CI\njobs:\n  build:\n    strategy:\n      matrix:\n        go-version: [oldstable, stable]\n        os: [ubuntu-latest, macos-latest, windows-latest]\n    runs-on: ${{ matrix.os }}\n    steps:\n      - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6\n        with:\n          go-version: ${{ matrix.go-version }}\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - run: go build ./...\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6\n        with:\n          go-version: 1.26\n          check-latest: true\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - run: go test ./...\n  node_test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6\n        with:\n          node-version: 24\n      - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6\n        with:\n          go-version: 1.26\n          check-latest: true\n      - run: >\n          cd examples/internal/browser &&\n          npm install gulp-cli &&\n          npm install &&\n          ./node_modules/.bin/gulp\n  generate:\n    container:\n      image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n        # Required with newer versions of Git\n        # https://github.com/actions/checkout/issues/766\n      - run: git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n      - run: make install\n      - run: make clean\n      - run: make generate\n      - run: go mod tidy\n      - run: git diff --exit-code\n  bazel:\n    container:\n      image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5\n        with:\n          path: /home/vscode/.cache/_grpc_gateway_bazel\n          key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }}\n          restore-keys: v1-bazel-cache-\n        # Required with newer versions of Git\n        # https://github.com/actions/checkout/issues/766\n      - run: git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n      - name: Configure bazel\n        run:\n          | # put .bazelrc in $HOME so that it's read before project's .bazelrc\n          cat > /home/vscode/.bazelrc << EOF\n          startup --output_base=/home/vscode/.cache/_grpc_gateway_bazel\n          build --@io_bazel_rules_go//go/config:race\n          # Workaround https://github.com/bazelbuild/bazel/issues/3645\n          # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html\n          build --local_ram_resources=7168 # Github runners have 7G of memory\n          build --local_cpu_resources=2    # Github runners have 2 vCPU\n          EOF\n      - name: Check that Bazel BUILD files are up-to-date\n        run: bazel run //:gazelle && git diff --exit-code\n      - name: Check that repositories.bzl is up-to-date\n        run: |\n          bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories &&\n          git diff --exit-code\n      - name: Check formatting of Bazel BUILD files\n        run: bazel run //:buildifier && git diff --exit-code\n      - name: Run tests with Bazel\n        run: bazel test //...\n  gorelease:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6\n        with:\n          go-version: 1.26\n          check-latest: true\n      - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.28.0\n  proto_lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6\n        with:\n          go-version: 1.26\n          check-latest: true\n      - run: make install\n      - run: PATH=$PATH:~/go/bin buf build\n      - run: PATH=$PATH:~/go/bin buf lint\n      - run: PATH=$PATH:~/go/bin buf format -w && git diff --exit-code\n      - run: PATH=$PATH:~/go/bin buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=main'\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6\n        with:\n          go-version: 1.26\n          check-latest: true\n      - uses: dominikh/staticcheck-action@9716614d4101e79b4340dd97b10e54d68234e431 # v1.4.1\n        with:\n          install-go: false\n  fuzz:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Build Fuzzers\n        id: build\n        uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master\n        with:\n          oss-fuzz-project-name: \"grpc-gateway\"\n          dry-run: false\n          language: go\n      - name: Run Fuzzers\n        uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master\n        with:\n          oss-fuzz-project-name: \"grpc-gateway\"\n          fuzz-seconds: 600\n          dry-run: false\n          language: go\n      - name: Upload Crash\n        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7\n        if: failure() && steps.build.outcome == 'success'\n        with:\n          name: artifacts\n          path: ./out/artifacts\n"
  },
  {
    "path": ".github/workflows/devcontainer.yml",
    "content": "on:\n  push:\n    paths:\n      - .devcontainer/devcontainer.json\n      - .github/workflows/devcontainer.yml\n      - .github/Dockerfile\npermissions:\n  contents: read\n  packages: write\nname: devcontainer\njobs:\n  rebuild:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      - name: Rebuild dev container image\n        uses: devcontainers/ci@8bf61b26e9c3a98f69cb6ce2f88d24ff59b785c6 # v0.3\n        with:\n          imageName: ghcr.io/grpc-ecosystem/grpc-gateway/build-env\n          cacheFrom: ghcr.io/grpc-ecosystem/grpc-gateway/build-env\n          push: filter\n          refFilterForPush: refs/heads/main\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "on:\n  push:\n    tags:\n      - v2.[0-9]+.[0-9]+\n  # For testing the workflow before pushing a tag\n  # This will run goreleaser with --snapshot and test the\n  # SLSA generator.\n  workflow_dispatch:\npermissions:\n  contents: read\nname: release\njobs:\n  goreleaser:\n    outputs:\n      hashes: ${{ steps.hash.outputs.hashes }}\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n        with:\n          fetch-depth: 0\n      - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6\n        with:\n          check-latest: true\n      - name: Generate goreleaser args\n        id: args\n        run: |\n          set -euo pipefail\n          args='release --clean'\n          if [[ \"$GITHUB_REF\" != refs/tags/* ]]; then\n            args+=' --snapshot'\n          fi\n          echo \"args=$args\" >> $GITHUB_OUTPUT\n      - uses: goreleaser/goreleaser-action@ec59f474b9834571250b370d4735c50f8e2d1e29 # v7\n        id: run-goreleaser\n        with:\n          args: ${{ steps.args.outputs.args }}\n          distribution: goreleaser # or 'goreleaser-pro'\n          version: \"~> v2\" # or 'latest', 'nightly', semver\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      - name: Generate subject\n        id: hash\n        env:\n          ARTIFACTS: \"${{ steps.run-goreleaser.outputs.artifacts }}\"\n        run: |\n          set -euo pipefail\n\n          checksum_file=$(echo \"$ARTIFACTS\" | jq -r '.[] | select (.type==\"Checksum\") | .path')\n          echo \"hashes=$(cat $checksum_file | base64 -w0)\" >> $GITHUB_OUTPUT\n  provenance:\n    needs: [goreleaser]\n    permissions:\n      actions: read # To read the workflow path.\n      id-token: write # To sign the provenance.\n      contents: write # To add assets to a release.\n    uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0\n    with:\n      compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163\n      base64-subjects: \"${{ needs.goreleaser.outputs.hashes }}\"\n      upload-assets: ${{ github.event_name == 'push' }} # upload to a new release when pushing via tag\n"
  },
  {
    "path": ".github/workflows/renovate.yml",
    "content": "on:\n  push:\n    branches:\n      - renovate/*\npermissions:\n  contents: read\nname: renovate\njobs:\n  update_repositoriesbzl:\n    container:\n      image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n        with:\n          fetch-depth: 0\n          token: ${{ secrets.GH_PUSH_TOKEN }}\n      - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5\n        with:\n          path: /home/vscode/.cache/_grpc_gateway_bazel\n          key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }}\n          restore-keys: v1-bazel-cache-\n      - name: Configure bazel\n        run:\n          | # put .bazelrc in $HOME so that it's read before project's .bazelrc\n          cat > /home/vscode/.bazelrc << EOF\n          startup --output_base /home/vscode/.cache/_grpc_gateway_bazel\n          build --@io_bazel_rules_go//go/config:race\n          # Workaround https://github.com/bazelbuild/bazel/issues/3645\n          # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html\n          build --local_ram_resources=7168 # Github runners have 7G of memory\n          build --local_cpu_resources=2    # Github runners have 2 vCPU\n          EOF\n      - run: bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories\n        # Required with newer versions of Git\n        # https://github.com/actions/checkout/issues/766\n      - run: git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n      - run: |\n          git add .\n          if output=$(git status --porcelain) && [ ! -z \"$output\" ]; then\n            git config user.name \"Renovate Bot\"\n            git config user.email \"bot@renovateapp.com\"\n            git commit --amend --no-edit\n            git push --force-with-lease origin ${{ github.ref_name }}\n          fi\n  regenerate:\n    container:\n      image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest\n    runs-on: ubuntu-latest\n    needs:\n      # Run after update_repositoriesbzl to avoid\n      # git conflicts\n      - update_repositoriesbzl\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n        with:\n          fetch-depth: 0\n          token: ${{ secrets.GH_PUSH_TOKEN }}\n        # Required with newer versions of Git\n        # https://github.com/actions/checkout/issues/766\n      - run: git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n      - run: make install\n      - run: make clean\n      - run: make generate\n      - run: go mod tidy\n      - run: |\n          git add .\n          if output=$(git status --porcelain) && [ ! -z \"$output\" ]; then\n            git config user.name \"Renovate Bot\"\n            git config user.email \"bot@renovateapp.com\"\n            git commit --amend --no-edit\n            git push --force-with-lease origin ${{ github.ref_name }}\n          fi\n"
  },
  {
    "path": ".gitignore",
    "content": "_output/\n.idea\n\n# Bazel.\nbazel-bin\nbazel-genfiles\nbazel-grpc-gateway\nbazel-out\nbazel-testlogs\n\n# Go vendor directory\nvendor\n\n# Generated travis files\n.travis.yml\n"
  },
  {
    "path": ".goreleaser.yml",
    "content": "version: 2\nbuilds:\n  - main: ./protoc-gen-grpc-gateway/main.go\n    id: protoc-gen-grpc-gateway\n    binary: protoc-gen-grpc-gateway\n    env:\n      - CGO_ENABLED=0\n    goos:\n      - linux\n      - darwin\n      - windows\n    goarch:\n      - amd64\n      - arm64\n  - main: ./protoc-gen-openapiv2/main.go\n    id: protoc-gen-openapiv2\n    binary: protoc-gen-openapiv2\n    env:\n      - CGO_ENABLED=0\n    goos:\n      - linux\n      - darwin\n      - windows\n    goarch:\n      - amd64\n      - arm64\narchives:\n  - name_template: '{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{if eq .Arch \"amd64\"}}x86_64{{else}}{{ .Arch }}{{end}}'\n    format: binary\nsource:\n  enabled: true\n  name_template: '{{ .ProjectName }}-{{ .Tag }}'\ndist: _output\n"
  },
  {
    "path": "ADOPTERS.md",
    "content": "# Adopters\n\nThis is a list of organizations that have spoken publicly about their adoption or\nproduction users that have added themselves (in alphabetical order):\n\n- [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of\n  API requests per day.\n- [Chef](https://www.chef.io/) uses the gRPC-Gateway to provide the user-facing\n  API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated\n  OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/).\n  The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate).\n- [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.\n- [Conduit](https://github.com/ConduitIO/conduit), a data streaming tool written in Go,\n  uses the gRPC-Gateway since its very beginning to provide an HTTP API in addition to its gRPC API. \n  This makes it easier to integrate with Conduit, and the generated OpenAPI data is used in the documentation.\n- [PITS Global Data Recovery Services](https://www.pitsdatarecovery.net/) uses the gRPC-Gateway to generate efficient reverse-proxy servers for internal needs. \n- [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to\n  serve millions of API requests per day [1].\n- [SpiceDB](https://github.com/authzed/spicedb) uses the gRPC-Gateway to handle\n  requests for security-critical permissions checks in environments where gRPC\n  is unavailable.\n\nIf you have adopted the gRPC-Gateway and would like to be included in this list,\nfeel free to submit a PR.\n\n[1]: [The odyssey of an HTTP request in Scaleway](https://www.youtube.com/watch?v=eLxD-zIUraE&feature=youtu.be&t=480).\n"
  },
  {
    "path": "BUILD.bazel",
    "content": "load(\"@bazel_gazelle//:def.bzl\", \"gazelle\")\nload(\"@com_github_bazelbuild_buildtools//buildifier:def.bzl\", \"buildifier\")\nload(\"@io_bazel_rules_go//proto:compiler.bzl\", \"go_proto_compiler\")\nload(\"@io_bazel_rules_go//proto/wkt:well_known_types.bzl\", \"PROTO_RUNTIME_DEPS\", \"WELL_KNOWN_TYPES_APIV2\")\n\nexports_files([\"LICENSE\"])\n\nbuildifier(\n    name = \"buildifier\",\n)\n\nbuildifier(\n    name = \"buildifier_check\",\n    mode = \"check\",\n)\n\n# gazelle:exclude _output\n# gazelle:prefix github.com/grpc-ecosystem/grpc-gateway/v2\n# gazelle:go_proto_compilers //:go_apiv2\n# gazelle:go_grpc_compilers //:go_apiv2, //:go_grpc\n# gazelle:go_naming_convention import_alias\n# gazelle:resolve proto proto google/api/annotations.proto @googleapis//google/api:annotations_proto\n# gazelle:resolve proto go google/api/annotations.proto  @org_golang_google_genproto_googleapis_api//annotations\n# gazelle:resolve proto proto google/api/http.proto @googleapis//google/api:http_proto\n# gazelle:resolve proto go google/api/http.proto  @org_golang_google_genproto_googleapis_api//annotations\n# gazelle:resolve proto proto google/api/field_behavior.proto @googleapis//google/api:field_behavior_proto\n# gazelle:resolve proto go google/api/field_behavior.proto  @org_golang_google_genproto_googleapis_api//annotations\n# gazelle:resolve proto proto google/api/httpbody.proto @googleapis//google/api:httpbody_proto\n# gazelle:resolve proto go google/api/httpbody.proto  @org_golang_google_genproto_googleapis_api//httpbody\n# gazelle:resolve proto proto google/api/visibility.proto @googleapis//google/api:visibility_proto\n# gazelle:resolve proto go google/api/visibility.proto  @org_golang_google_genproto_googleapis_api//visibility\n# gazelle:resolve proto proto google/rpc/status.proto @googleapis//google/rpc:status_proto\n# gazelle:resolve proto go google/rpc/status.proto  @org_golang_google_genproto_googleapis_rpc//status\n\ngazelle(name = \"gazelle\")\n\npackage_group(\n    name = \"generators\",\n    packages = [\n        \"//protoc-gen-grpc-gateway/...\",\n        \"//protoc-gen-openapiv2/...\",\n    ],\n)\n\ngo_proto_compiler(\n    name = \"go_apiv2\",\n    options = [\n        \"paths=source_relative\",\n    ],\n    plugin = \"@org_golang_google_protobuf//cmd/protoc-gen-go\",\n    suffix = \".pb.go\",\n    visibility = [\"//visibility:public\"],\n    deps = PROTO_RUNTIME_DEPS + WELL_KNOWN_TYPES_APIV2,\n)\n\ngo_proto_compiler(\n    name = \"go_apiv2_opaque\",\n    options = [\n        \"paths=source_relative\",\n        \"default_api_level=API_OPAQUE\",\n    ],\n    plugin = \"@org_golang_google_protobuf//cmd/protoc-gen-go\",\n    suffix = \".pb.go\",\n    visibility = [\"//visibility:public\"],\n    deps = PROTO_RUNTIME_DEPS + WELL_KNOWN_TYPES_APIV2,\n)\n\ngo_proto_compiler(\n    name = \"go_grpc\",\n    options = [\n        \"paths=source_relative\",\n        \"require_unimplemented_servers=false\",\n    ],\n    plugin = \"@org_golang_google_grpc_cmd_protoc_gen_go_grpc//:protoc-gen-go-grpc\",\n    suffix = \"_grpc.pb.go\",\n    visibility = [\"//visibility:public\"],\n    deps = PROTO_RUNTIME_DEPS + [\n        \"@org_golang_google_grpc//:go_default_library\",\n        \"@org_golang_google_grpc//codes:go_default_library\",\n        \"@org_golang_google_grpc//status:go_default_library\",\n    ],\n)\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# How to contribute\n\n## Code reviews\n\nAll submissions, including submissions by project members, require review.\n\n## I want to regenerate the files after making changes\n\n### Using Docker\n\nIt should be as simple as this (run from the root of the repository):\n\n```bash\ndocker run -v $(pwd):/grpc-gateway -w /grpc-gateway --rm ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest \\\n    /bin/bash -c 'make install && \\\n        make clean && \\\n        make generate'\ndocker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \\\n    ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest -c '\\\n        bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \\\n        bazel run :gazelle && \\\n        bazel run :buildifier'\n```\n\nYou may need to authenticate with GitHub to pull `ghcr.io/grpc-ecosystem/grpc-gateway/build-env`.\nYou 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).\n\n### Using Visual Studio Code dev containers\n\nThis repo contains a `devcontainer.json` configuration that sets up the build environment in a container using\n[VS Code dev containers](https://code.visualstudio.com/docs/remote/containers). If you're using the dev container,\nyou can run the commands directly in your terminal:\n\n```sh\n$ make install && make clean && make generate\n```\n\n```sh\n$ bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \\\n    bazel run :gazelle && \\\n    bazel run :buildifier\n```\n\nNote that the above-listed docker commands will not work in the dev container, since volume mounts from\nnested docker container is not possible.\n\nIf this has resulted in some file changes in the repo, please ensure you check those in with your merge request.\n\n## Making a release\n\nTo make a release, follow these steps:\n\n1. Decide on a release version. The `gorelease` job can\n   recommend whether the new release should be a patch or minor release.\n1. Tag the release on `main`.\n   1. The release can be created using the command line, or also through GitHub's [releases\n      UI](https://github.com/grpc-ecosystem/grpc-gateway/releases/new).\n   1. If you create a release using the web UI you can publish it as a draft and have it\n      reviewed by another maintainer.\n   1. Update the release description. Try to include some of the highlights of this release,\n      ideally with links to the PRs and crediting the contributors.\n1. Update the gorelease job in .github/ci.yaml to point to the new release version.\n1. Sit back and pat yourself on the back for a job well done :clap:.\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2015, Gengo, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright notice,\n      this list of conditions and the following disclaimer in the documentation\n      and/or other materials provided with the distribution.\n\n    * Neither the name of Gengo, Inc. nor the names of its\n      contributors may be used to endorse or promote products derived from this\n      software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "MODULE.bazel",
    "content": "module(\n    name = \"grpc_ecosystem_grpc_gateway\",\n    # TODO: Change this to the actual version on each release.\n    #       This can wait until we publish this project on the Bazel registry.\n    version = \"0.0.0\",\n)\n\n# Bazel Central Registry modules.\nbazel_dep(name = \"bazel_features\", version = \"1.43.0\")\nbazel_dep(name = \"rules_license\", version = \"1.0.0\")\nbazel_dep(name = \"rules_python\", version = \"1.9.0\")\nbazel_dep(name = \"rules_proto\", version = \"7.1.0\")\nbazel_dep(name = \"rules_go\", version = \"0.60.0\", repo_name = \"io_bazel_rules_go\")\nbazel_dep(name = \"rules_shell\", version = \"0.6.1\")\nbazel_dep(name = \"gazelle\", version = \"0.47.0\", repo_name = \"bazel_gazelle\")\nbazel_dep(name = \"bazel_skylib\", version = \"1.9.0\")\nbazel_dep(name = \"protobuf\", version = \"34.0.bcr.1\", repo_name = \"com_google_protobuf\")\nbazel_dep(name = \"googleapis\", version = \"0.0.0-20260223-edfe7983\")\n\n# This is required as a transitive dependency and not directly needed by this module.\n# We have this version pinned to solve for differences in the MODULE.bazel.lock file\n# when running CI.\nbazel_dep(name = \"rules_rust\", version = \"0.69.0\")\n\ngo_sdk = use_extension(\"@io_bazel_rules_go//go:extensions.bzl\", \"go_sdk\")\ngo_sdk.download(version = \"1.26.0\")\n\ngo_deps = use_extension(\"@bazel_gazelle//:extensions.bzl\", \"go_deps\")\ngo_deps.from_file(go_mod = \":go.mod\")\n\n# These dependencies are required by `.proto` files but are not captured in `go.mod`,\n# so they have to explicitly be made known to Gazelle.\ngo_deps.module(\n    path = \"google.golang.org/grpc/cmd/protoc-gen-go-grpc\",\n    sum = \"h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A=\",\n    version = \"v1.5.1\",\n)\ngo_deps.module(\n    path = \"github.com/golang/protobuf\",\n    sum = \"h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=\",\n    version = \"v1.5.4\",\n)\ngo_deps.module(\n    path = \"github.com/bazelbuild/buildtools/v7\",\n    sum = \"h1:BRlRwQ/4rd608QvjsM9HSzBLLM1nXyzHaDzdkBAyDKk=\",\n    version = \"v7.3.1\",\n)\ngo_deps.module(\n    path = \"golang.org/x/tools\",\n    sum = \"h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=\",\n    version = \"v0.21.1-0.20240508182429-e35e4ccd0d2d\",\n)\nuse_repo(\n    go_deps,\n    \"com_github_antihax_optional\",\n    \"com_github_bazelbuild_buildtools_v7\",\n    \"com_github_golang_protobuf\",\n    \"com_github_google_go_cmp\",\n    \"com_github_rogpeppe_fastuuid\",\n    \"in_yaml_go_yaml_v3\",\n    \"org_golang_google_genproto_googleapis_api\",\n    \"org_golang_google_genproto_googleapis_rpc\",\n    \"org_golang_google_grpc\",\n    \"org_golang_google_grpc_cmd_protoc_gen_go_grpc\",\n    \"org_golang_google_protobuf\",\n    \"org_golang_x_oauth2\",\n    \"org_golang_x_text\",\n    \"org_golang_x_tools\",\n)\n\nnon_module_deps = use_extension(\":non_module_deps.bzl\", \"non_module_deps\")\nuse_repo(\n    non_module_deps,\n    \"com_github_bazelbuild_buildtools\",\n)\n"
  },
  {
    "path": "Makefile",
    "content": "# This is a Makefile which maintains files automatically generated but to be\n# shipped together with other files.\n# You don't have to rebuild these targets by yourself unless you develop\n# gRPC-Gateway itself.\n\nEXAMPLE_CLIENT_DIR=examples/internal/clients\nECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/echo_service.swagger.json\nECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/echo/client.go \\\n\t\t  $(EXAMPLE_CLIENT_DIR)/echo/response.go \\\n\t\t  $(EXAMPLE_CLIENT_DIR)/echo/configuration.go \\\n\t\t  $(EXAMPLE_CLIENT_DIR)/echo/api_echo_service.go \\\n\t\t  $(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_simple_message.go \\\n\t\t  $(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_embedded.go\nABE_EXAMPLE_SPEC=examples/internal/proto/examplepb/a_bit_of_everything.swagger.json\nABE_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/abe/model_a_bit_of_everything_nested.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/api_a_bit_of_everything_service.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/client.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/api_camel_case_service_name.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/configuration.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/api_echo_rpc.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_a_bit_of_everything.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_a_bit_of_everything_repeated.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_body.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_numeric_enum.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_update_v2_request.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_message_path_enum_nested_path_enum.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_nested_deep_enum.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_pathenum_path_enum.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/model_protobuf_field_mask.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/abe/response.go\nUNANNOTATED_ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/unannotated_echo_service.swagger.json\nUNANNOTATED_ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/unannotatedecho/client.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/unannotatedecho/response.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/unannotatedecho/configuration.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/unannotatedecho/model_examplepb_unannotated_simple_message.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_unannotated_echo_service.go\nRESPONSE_BODY_EXAMPLE_SPEC=examples/internal/proto/examplepb/response_body_service.swagger.json\nRESPONSE_BODY_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/responsebody/client.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/response.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/configuration.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_body_out.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_body_out_response.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_strings.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_response_body_out.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_response_body_out_response.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/model_response_response_type.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/responsebody/api_response_body_service.go\nGENERATE_UNBOUND_METHODS_EXAMPLE_SPEC=examples/internal/proto/examplepb/generate_unbound_methods.swagger.json\nGENERATE_UNBOUND_METHODS_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/client.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/response.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/configuration.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/model_examplepb_generate_unbound_methods_simple_message.go \\\n\t\t $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/api_generate_unbound_methods.go\n\nEXAMPLE_CLIENT_SRCS=$(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS)\nSWAGGER_CODEGEN=swagger-codegen\n\n$(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC)\n\t$(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \\\n\t\t-l go -o examples/internal/clients/echo --additional-properties packageName=echo\n\t@rm -f $(EXAMPLE_CLIENT_DIR)/echo/README.md \\\n\t\t$(EXAMPLE_CLIENT_DIR)/echo/git_push.sh\n$(ABE_EXAMPLE_SRCS): $(ABE_EXAMPLE_SPEC)\n\t$(SWAGGER_CODEGEN) generate -i $(ABE_EXAMPLE_SPEC) \\\n\t\t-l go -o examples/internal/clients/abe --additional-properties packageName=abe\n\t@rm -f $(EXAMPLE_CLIENT_DIR)/abe/README.md \\\n\t\t$(EXAMPLE_CLIENT_DIR)/abe/git_push.sh\n$(UNANNOTATED_ECHO_EXAMPLE_SRCS): $(UNANNOTATED_ECHO_EXAMPLE_SPEC)\n\t$(SWAGGER_CODEGEN) generate -i $(UNANNOTATED_ECHO_EXAMPLE_SPEC) \\\n\t\t-l go -o examples/internal/clients/unannotatedecho --additional-properties packageName=unannotatedecho\n\t@rm -f $(EXAMPLE_CLIENT_DIR)/unannotatedecho/README.md \\\n\t\t$(EXAMPLE_CLIENT_DIR)/unannotatedecho/git_push.sh\n$(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC)\n\t$(SWAGGER_CODEGEN) generate -i $(RESPONSE_BODY_EXAMPLE_SPEC) \\\n\t\t-l go -o examples/internal/clients/responsebody --additional-properties packageName=responsebody\n\t@rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \\\n\t\t$(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh\n$(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPEC)\n\t$(SWAGGER_CODEGEN) generate -i $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPEC) \\\n\t    -l go -o examples/internal/clients/generateunboundmethods --additional-properties packageName=generateunboundmethods\n\t@rm -f $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/README.md \\\n\t\t$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh\n\ninstall:\n\tgo install github.com/bufbuild/buf/cmd/buf@v1.45.0\n\tgo install \\\n\t\t./protoc-gen-openapiv2 \\\n\t\t./protoc-gen-grpc-gateway\n\nproto:\n\t# These generation steps are run in order so that later steps can\n\t# overwrite files produced by previous steps, if necessary.\n\tbuf generate\n\t# Remove generated gateway in runtime tests, causes import cycle\n\trm ./runtime/internal/examplepb/non_standard_names.pb.gw.go\n\t# Remove generated_input.proto files, bazel genrule relies on these\n\t# *not* being generated (to avoid conflicts).\n\trm ./examples/internal/proto/examplepb/generated_input.pb.go\n\trm ./examples/internal/proto/examplepb/generated_input_grpc.pb.go\n\trm ./examples/internal/proto/examplepb/generated_input.pb.gw.go\n\t# Remove swagger files for openapiv2 definitions, they're unused\n\trm ./protoc-gen-openapiv2/options/annotations.swagger.json\n\trm ./protoc-gen-openapiv2/options/openapiv2.swagger.json\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml \\\n\t\t--path ./examples/internal/proto/examplepb/openapi_merge_a.proto \\\n\t\t--path ./examples/internal/proto/examplepb/openapi_merge_b.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/unannotated_echo_service.proto\n\tmv examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go examples/internal/proto/standalone/\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/unannotated_echo_service.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/generate_unbound_methods.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/use_go_template.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/use_go_template.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/ignore_comment.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/ignore_comment.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/remove_internal_comment.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/remove_internal_comment.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\tmv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\tmv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\tmv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\tmv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/visibility_rule_enums_as_ints_echo_service.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\tmv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_enums_as_ints_echo_service.swagger.json\n\tbuf generate \\\n\t\t--template examples/internal/proto/examplepb/enum_with_single_value.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/enum_with_single_value.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/proto3_field_semantics.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/proto3_field_semantics.proto\n\tbuf generate \\\n\t\t--template ./protoc-gen-openapiv2/options/buf.gen.yaml \\\n\t\t--path ./protoc-gen-openapiv2/options/annotations.proto \\\n\t\t--path ./protoc-gen-openapiv2/options/openapiv2.proto\n\tbuf generate \\\n\t\t--template ./examples/internal/proto/examplepb/opaque.buf.gen.yaml \\\n\t\t--path examples/internal/proto/examplepb/opaque.proto\n\ngenerate: proto $(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS)\n\ntest: proto\n\tgo test -short -race ./...\n\tgo test -race ./examples/internal/integration -args -network=unix -endpoint=test.sock\n\nclean:\n\tfind . -type f -name '*.pb.go' -delete\n\tfind . -type f -name '*.swagger.json' -delete\n\tfind . -type f -name '*.pb.gw.go' -delete\n\trm -f $(EXAMPLE_CLIENT_SRCS)\n\n.PHONY: generate test clean proto install\n"
  },
  {
    "path": "README.md",
    "content": "<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=\"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>\n<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>\n<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>\n<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>\n<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>\n<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>\n<a href=\"https://slsa.dev/images/gh-badge-level3.svg\"><img src=\"https://slsa.dev/images/gh-badge-level3.svg\"/></a>\n\n</div>\n\n## About\n\nThe gRPC-Gateway is a plugin of the Google protocol buffers compiler\n[protoc](https://github.com/protocolbuffers/protobuf).\nIt reads protobuf service definitions and generates a reverse-proxy server which\ntranslates a RESTful HTTP API into gRPC. This server is generated according to the\n[`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46)\nannotations in your service definitions.\n\nThis helps you provide your APIs in both gRPC and RESTful style at the same time.\n\n<div align=\"center\">\n<img src=\"docs/assets/images/architecture_introduction_diagram.svg\" />\n</div>\n\n## Docs\n\nYou can read our docs at:\n\n- https://grpc-ecosystem.github.io/grpc-gateway/\n\n## Testimonials\n\n> We use the gRPC-Gateway to serve millions of API requests per day,\n> and have been since 2018 and through all of that,\n> we have never had any issues with it.\n>\n> _- William Mill, [Ad Hoc](http://adhocteam.us/)_\n\n## Background\n\ngRPC is great -- it generates API clients and server stubs in many programming\nlanguages, it is fast, easy-to-use, bandwidth-efficient and its design is\ncombat-proven by Google. However, you might still want to provide a traditional\nRESTful JSON API as well. Reasons can range from maintaining\nbackward-compatibility, supporting languages or clients that are not well supported by\ngRPC, to simply maintaining the aesthetics and tooling involved with a RESTful\nJSON architecture.\n\nThis project aims to provide that HTTP+JSON interface to your gRPC service.\nA small amount of configuration in your service to attach HTTP semantics is all\nthat's needed to generate a reverse-proxy with this library.\n\n## Installation\n\n### Compile from source\n\nThe following instructions assume you are using\n[Go Modules](https://go.dev/wiki/Modules) for dependency\nmanagement. Use a\n[tool dependency](https://go.dev/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module)\nto track the versions of the following executable packages:\n\n```go\n// +build tools\n\npackage tools\n\nimport (\n    _ \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway\"\n    _ \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2\"\n    _ \"google.golang.org/grpc/cmd/protoc-gen-go-grpc\"\n    _ \"google.golang.org/protobuf/cmd/protoc-gen-go\"\n)\n```\n\nRun `go mod tidy` to resolve the versions. Install by running\n\n```sh\ngo install \\\n    github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \\\n    github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \\\n    google.golang.org/protobuf/cmd/protoc-gen-go \\\n    google.golang.org/grpc/cmd/protoc-gen-go-grpc\n```\n\nThis will place four binaries in your `$GOBIN`;\n\n- `protoc-gen-grpc-gateway`\n- `protoc-gen-openapiv2`\n- `protoc-gen-go`\n- `protoc-gen-go-grpc`\n\nMake sure that your `$GOBIN` is in your `$PATH`.\n\n### **Using the `tool` Directive in Go 1.24**\n\nStarting 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.\n\n#### **Tracking Tools in `go.mod`**\n\nInstead 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:\n\n```go\nmodule tools\n\ngo 1.24\n\ntool (\n\tgithub.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway\n\tgithub.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2\n\tgoogle.golang.org/grpc/cmd/protoc-gen-go-grpc\n\tgoogle.golang.org/protobuf/cmd/protoc-gen-go\n)\n```\n\n#### **Managing Tool Dependencies**\n\nTo add tools to your module, use the `-tool` flag with `go get`:\n\n```sh\ngo get -tool github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway\ngo get -tool github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2\ngo get -tool google.golang.org/protobuf/cmd/protoc-gen-go\ngo get -tool google.golang.org/grpc/cmd/protoc-gen-go-grpc\n```\n\nThis automatically updates `go.mod`, adding the tools under the `tool` directive along with `require` statements to ensure version tracking.\n\n### Install Tools\n\nOnce the tool dependencies are properly recorded in the `go.mod` file, simply execute the following command in the root directory of your project:\n\n```sh\ngo install tool\n```\n\nThis will place four binaries in your `$GOBIN`;\n\n- `protoc-gen-grpc-gateway`\n- `protoc-gen-openapiv2`\n- `protoc-gen-go`\n- `protoc-gen-go-grpc`\n\nMake sure that your `$GOBIN` is in your `$PATH`.\n\n### Download the binaries\n\nYou may alternatively download the binaries from the [GitHub releases page](https://github.com/grpc-ecosystem/grpc-gateway/releases/latest).\nWe 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:\n\n1. Install the verification tool from [slsa-framework/slsa-verifier#installation](https://github.com/slsa-framework/slsa-verifier#installation).\n2. Download the provenance file `attestation.intoto.jsonl` from the [GitHub releases page](https://github.com/grpc-ecosystem/grpc-gateway/releases/latest).\n3. Run the verifier:\n\n```shell\nslsa-verifier -artifact-path <the-binary> -provenance attestation.intoto.jsonl -source github.com/grpc-ecosystem/grpc-gateway -tag <the-tag>\n```\n\nAlternatively, see the section on remotely managed plugin versions below.\n\n## Usage\n\n### 1.Define your [gRPC](https://grpc.io/docs/) service using protocol buffers\n\n`your_service.proto`:\n\n```protobuf\n syntax = \"proto3\";\n package your.service.v1;\n option go_package = \"github.com/yourorg/yourprotos/gen/go/your/service/v1\";\n\n message StringMessage {\n   string value = 1;\n }\n\n service YourService {\n   rpc Echo(StringMessage) returns (StringMessage) {}\n }\n```\n\n### 2. Generate gRPC stubs\n\nThis step generates the gRPC stubs that you can use to implement the service and consume from clients:\n\nHere's an example `buf.gen.yaml` you can use to generate the stubs with [buf](https://github.com/bufbuild/buf):\n\n```yaml\nversion: v2\nplugins:\n  - local: protoc-gen-go\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-go-grpc\n    out: gen/go\n    opt:\n      - paths=source_relative\n```\n\nWith this file in place, you can generate your files using `buf generate`.\n\n> For a complete example of using `buf generate` to generate protobuf stubs, see\n> [the boilerplate repo](https://github.com/johanbrandhorst/grpc-gateway-boilerplate).\n> For more information on generating the stubs with buf, see\n> [the official documentation](https://docs.buf.build/generate-usage).\n\nIf you are using `protoc` to generate stubs, here's an example of what a command\nmight look like:\n\n```sh\nprotoc -I . \\\n    --go_out ./gen/go/ --go_opt paths=source_relative \\\n    --go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \\\n    your/service/v1/your_service.proto\n```\n\n### 3. Implement your service in gRPC as usual.\n\n### 4. Generate reverse-proxy using `protoc-gen-grpc-gateway`\n\nAt this point, you have 3 options:\n\n- no further modifications, use the default mapping to HTTP semantics (method, path, etc.)\n  - this will work on any `.proto` file, but will not allow setting HTTP paths, request parameters or similar\n- additional `.proto` modifications to use a custom mapping\n  - relies on parameters in the `.proto` file to set custom HTTP mappings\n- no `.proto` modifications, but use an external configuration file\n  - relies on an external configuration file to set custom HTTP mappings\n  - mostly useful when the source proto file isn't under your control\n\n#### 1. Using the default mapping\n\nThis requires no additional modification to the `.proto` file but does require enabling a specific option when executing the plugin.\nThe `generate_unbound_methods` should be enabled.\n\nHere's what a `buf.gen.yaml` file might look like with this option enabled:\n\n```yaml\nversion: v2\nplugins:\n  - local: protoc-gen-go\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-go-grpc\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-grpc-gateway\n    out: gen/go\n    opt:\n      - paths=source_relative\n      - generate_unbound_methods=true\n```\n\nWith `protoc` (just the grpc-gateway stubs):\n\n```sh\nprotoc -I . --grpc-gateway_out ./gen/go \\\n    --grpc-gateway_opt paths=source_relative \\\n    --grpc-gateway_opt generate_unbound_methods=true \\\n    your/service/v1/your_service.proto\n```\n\n#### 2. With custom annotations\n\nAdd a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46)\nannotation to your .proto file\n\n`your_service.proto`:\n\n```diff\n syntax = \"proto3\";\n package your.service.v1;\n option go_package = \"github.com/yourorg/yourprotos/gen/go/your/service/v1\";\n+\n+import \"google/api/annotations.proto\";\n+\n message StringMessage {\n   string value = 1;\n }\n\n service YourService {\n-  rpc Echo(StringMessage) returns (StringMessage) {}\n+  rpc Echo(StringMessage) returns (StringMessage) {\n+    option (google.api.http) = {\n+      post: \"/v1/example/echo\"\n+      body: \"*\"\n+    };\n+  }\n }\n```\n\n> You will need to provide the required third party protobuf files to the protobuf compiler.\n> If you are using [buf](https://github.com/bufbuild/buf), this dependency can\n> be added to the `deps` array in your `buf.yaml` under the name\n> `buf.build/googleapis/googleapis`:\n>\n> ```yaml\n> version: v2\n> name: buf.build/yourorg/myprotos\n> deps:\n>   - buf.build/googleapis/googleapis\n> ```\n>\n> Always run `buf dep update` after adding a dependency to your `buf.yaml`.\n\nSee [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto)\nfor examples of more annotations you can add to customize gateway behavior\nand generated OpenAPI output.\n\nHere's what a `buf.gen.yaml` file might look like:\n\n```yaml\nversion: v2\nplugins:\n  - local: protoc-gen-go\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-go-grpc\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-grpc-gateway\n    out: gen/go\n    opt:\n      - paths=source_relative\n```\n\nIf you are using `protoc` to generate stubs, you need to ensure the required\ndependencies are available to the compiler at compile time. These can be found\nby manually cloning and copying the relevant files from the\n[googleapis repository](https://github.com/googleapis/googleapis), and providing\nthem to `protoc` when running. The files you will need are:\n\n```\ngoogle/api/annotations.proto\ngoogle/api/field_behavior.proto\ngoogle/api/http.proto\ngoogle/api/httpbody.proto\n```\n\nHere's what a `protoc` execution might look like:\n\n```sh\nprotoc -I . --grpc-gateway_out ./gen/go \\\n    --grpc-gateway_opt paths=source_relative \\\n    your/service/v1/your_service.proto\n```\n\n#### 3. External configuration\n\nIf you do not want to (or cannot) modify the proto file for use with gRPC-Gateway you can\nalternatively use an external\n[gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file.\n[Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/grpc_api_configuration/)\nfor more information. This is best combined with the `standalone=true` option\nto generate a file that can live in its own package, separate from the files\ngenerated by the source protobuf file.\n\nHere's what a `buf.gen.yaml` file might look like with this option enabled:\n\n```yaml\nversion: v2\nplugins:\n  - local: protoc-gen-go\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-go-grpc\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-grpc-gateway\n    out: gen/go\n    opt:\n      - paths=source_relative\n      - grpc_api_configuration=path/to/config.yaml\n      - standalone=true\n```\n\nWith `protoc` (just the grpc-gateway stubs):\n\n```sh\nprotoc -I . --grpc-gateway_out ./gen/go \\\n    --grpc-gateway_opt paths=source_relative \\\n    --grpc-gateway_opt grpc_api_configuration=path/to/config.yaml \\\n    --grpc-gateway_opt standalone=true \\\n    your/service/v1/your_service.proto\n```\n\n### 5. Write an entrypoint for the HTTP reverse-proxy server\n\n```go\npackage main\n\nimport (\n  \"context\"\n  \"flag\"\n  \"net/http\"\n\n  \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n  \"google.golang.org/grpc\"\n  \"google.golang.org/grpc/credentials/insecure\"\n  \"google.golang.org/grpc/grpclog\"\n\n  gw \"github.com/yourorg/yourrepo/proto/gen/go/your/service/v1/your_service\"  // Update\n)\n\nvar (\n  // command-line options:\n  // gRPC server endpoint\n  grpcServerEndpoint = flag.String(\"grpc-server-endpoint\",  \"localhost:9090\", \"gRPC server endpoint\")\n)\n\nfunc run() error {\n  ctx := context.Background()\n  ctx, cancel := context.WithCancel(ctx)\n  defer cancel()\n\n  // Register gRPC server endpoint\n  // Note: Make sure the gRPC server is running properly and accessible\n  mux := runtime.NewServeMux()\n  opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}\n  err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux,  *grpcServerEndpoint, opts)\n  if err != nil {\n    return err\n  }\n\n  // Start HTTP server (and proxy calls to gRPC server endpoint)\n  return http.ListenAndServe(\":8081\", mux)\n}\n\nfunc main() {\n  flag.Parse()\n\n  if err := run(); err != nil {\n    grpclog.Fatal(err)\n  }\n}\n```\n\n### 6. (Optional) Generate OpenAPI definitions using `protoc-gen-openapiv2`\n\nHere's what a `buf.gen.yaml` file might look like:\n\n```yaml\nversion: v2\nplugins:\n  - local: protoc-gen-go\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-go-grpc\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - local: protoc-gen-grpc-gateway\n    out: gen/go\n    opt:\n      - paths=source_relative\n      - generate_unbound_methods=true\n  - local: protoc-gen-openapiv2\n    out: gen/go\n```\n\nTo use the custom protobuf annotations supported by `protoc-gen-openapiv2`, we need\nanother dependency added to our protobuf generation step. If you are using\n`buf`, you can add the `buf.build/grpc-ecosystem/grpc-gateway` dependency\nto your `deps` array:\n\n```yaml\nversion: v2\nname: buf.build/yourorg/myprotos\ndeps:\n  - buf.build/googleapis/googleapis\n  - buf.build/grpc-ecosystem/grpc-gateway\n```\n\nWith `protoc` (just the swagger file):\n\n```sh\nprotoc -I . --openapiv2_out ./gen/openapiv2 \\\n    your/service/v1/your_service.proto\n```\n\nIf you are using `protoc` to generate stubs, you will need to copy the protobuf\nfiles from the `protoc-gen-openapiv2/options` directory of this repository,\nand providing them to `protoc` when running.\n\nNote that this plugin also supports generating OpenAPI definitions for unannotated methods;\nuse the `generate_unbound_methods` option to enable this.\n\nIt is possible with the HTTP mapping for a gRPC service method to create duplicate mappings\nwith the only difference being constraints on the path parameter.\n\n`/v1/{name=projects/*}` and `/v1/{name=organizations/*}` both become `/v1/{name}`. When\nthis occurs the plugin will rename the path parameter with a \"\\_1\" (or \"\\_2\" etc) suffix\nto differentiate the different operations. So in the above example, the 2nd path would become\n`/v1/{name_1=organizations/*}`. This can also cause OpenAPI clients to URL encode the \"/\" that is\npart of the path parameter as that is what OpenAPI defines in the specification. To allow gRPC gateway to\naccept the URL encoded slash and still route the request, use the UnescapingModeAllCharacters or\nUnescapingModeLegacy (which is the default currently though may change in future versions). See\n[Customizing Your Gateway](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/customizing_your_gateway/)\nfor more information.\n\n## Usage with remote plugins\n\nAs an alternative to all of the above, you can use `buf` with\n[remote plugins](https://buf.build/docs/bsr/remote-plugins/usage)\nto manage plugin versions and generation. An example `buf.gen.yaml` using remote\nplugin generation looks like this:\n\n```yaml\nversion: v2\nplugins:\n  - remote: buf.build/protocolbuffers/go:v1.31.0\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - remote: buf.build/grpc/go:v1.3.0\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - remote: buf.build/grpc-ecosystem/gateway:v2.16.2\n    out: gen/go\n    opt:\n      - paths=source_relative\n  - remote: buf.build/grpc-ecosystem/openapiv2:v2.16.2\n    out: gen/openapiv2\n```\n\nThis requires no local installation of any plugins. Be careful to use the same\nversion of the generator as the runtime library, i.e. if using `v2.16.2`, run\n\n```shell\n$ go get github.com/grpc-ecosystem/grpc-gateway/v2@v2.16.2\n```\n\nTo get the same version of the runtime in your `go.mod`.\n\nNote 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).\n\n## Video intro\n\nThis 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.\n\n<div align=\"center\">\n<a href=\"https://www.youtube.com/watch?v=Pq1paKC-fXk\">\n<img src=\"https://img.youtube.com/vi/Pq1paKC-fXk/0.jpg\" />\n</a>\n</div>\n\n## Parameters and flags\n\nWhen using `buf` to generate stubs, flags and parameters are passed through\nthe `opt` field in your `buf.gen.yaml` file, for example:\n\n```yaml\nversion: v2\nplugins:\n  - local: protoc-gen-grpc-gateway\n    out: gen/go\n    opt:\n      - paths=source_relative\n      - grpc_api_configuration=path/to/config.yaml\n      - standalone=true\n```\n\nDuring code generation with `protoc`, flags to gRPC-Gateway tools must be passed\nthrough `protoc` using one of 2 patterns:\n\n- as part of the `--<tool_suffix>_out` `protoc` parameter: `--<tool_suffix>_out=<flags>:<path>`\n\n```sh\n--grpc-gateway_out=repeated_path_param_separator=ssv:.\n--openapiv2_out=repeated_path_param_separator=ssv:.\n```\n\n- using additional `--<tool_suffix>_opt` parameters: `--<tool_suffix>_opt=<flag>[,<flag>]*`\n\n```sh\n--grpc-gateway_opt repeated_path_param_separator=ssv\n--openapiv2_opt repeated_path_param_separator=ssv\n```\n\n## More examples\n\nMore examples are available under the `examples` directory.\n\n- `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition\n  - `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\n  - `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\n  - `proto/examplepb/unannotated_echo_service.yaml`: gRPC API Configuration for `unannotated_echo_service.proto`\n- `server/main.go`: service implementation\n- `main.go`: entrypoint of the generated reverse proxy\n\nTo use the same port for custom HTTP handlers (e.g. serving `swagger.json`),\ngRPC-Gateway, and a gRPC server, see\n[this example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go)\n(and its accompanying [blog post](https://web.archive.org/web/20201112010739/https://coreos.com/blog/grpc-protobufs-swagger.html)).\n\n[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.\n\n## Features\n\n### Supported\n\n- Generating JSON API handlers.\n- Method parameters in the request body.\n- Method parameters in the request path.\n- Method parameters in the query string.\n- Enum fields in the path parameter (including repeated enum fields).\n- Mapping streaming APIs to newline-delimited JSON streams.\n- Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`)\n- Optionally emitting API definitions for\n  [OpenAPI (Swagger) v2](https://swagger.io/docs/specification/2-0/basic-structure/).\n- Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests)\n  through inbound HTTP `Grpc-Timeout` header.\n- Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config)\n  files as an alternative to annotation.\n- Automatically translating PATCH requests into Field Mask gRPC requests. See\n  [the docs](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/patch_feature/)\n  for more information.\n- [Protobuf Editions](https://protobuf.dev/editions/overview/) support (edition 2023).\n- Go [Opaque API](https://go.dev/blog/protobuf-opaque) support.\n\n### No plan to support\n\nBut patches are welcome.\n\n- Method parameters in HTTP headers.\n- Handling trailer metadata.\n- Encoding request/response body in XML.\n- True bi-directional streaming.\n\n## Mapping gRPC to HTTP\n\n- [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).\n- HTTP request source IP is added as `X-Forwarded-For` gRPC request header.\n- HTTP request host is added as `X-Forwarded-Host` gRPC request header.\n- HTTP `Authorization` header is added as `authorization` gRPC request header.\n- Remaining Permanent HTTP header keys (as specified by the IANA\n  [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml))\n  are prefixed with `grpcgateway-` and added with their values to gRPC request\n  header.\n- HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata\n  (prefixed with `grpcgateway-`).\n- While configurable, the default {un,}marshaling uses\n  [protojson](https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson).\n- 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)\n  path template syntax. For example, `/api/v1/{name=projects/*/topics/*}` or `/prefix/{path=organizations/**}`.\n\n## Contribution\n\nSee [CONTRIBUTING.md](http://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md).\n\n## License\n\ngRPC-Gateway is licensed under the BSD 3-Clause License.\nSee [LICENSE](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE) for more details.\n"
  },
  {
    "path": "WORKSPACE",
    "content": "workspace(name = \"grpc_ecosystem_grpc_gateway\")\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\n\nhttp_archive(\n    name = \"bazel_features\",\n    sha256 = \"c26b4e69cf02fea24511a108d158188b9d8174426311aac59ce803a78d107648\",\n    strip_prefix = \"bazel_features-1.43.0\",\n    url = \"https://github.com/bazel-contrib/bazel_features/releases/download/v1.43.0/bazel_features-v1.43.0.tar.gz\",\n)\n\nload(\"@bazel_features//:deps.bzl\", \"bazel_features_deps\")\n\nbazel_features_deps()\n\nhttp_archive(\n    name = \"rules_python\",\n    sha256 = \"098ba13578e796c00c853a2161f382647f32eb9a77099e1c88bc5299333d0d6e\",\n    strip_prefix = \"rules_python-1.9.0\",\n    url = \"https://github.com/bazelbuild/rules_python/releases/download/1.9.0/rules_python-1.9.0.tar.gz\",\n)\n\nload(\"@rules_python//python:repositories.bzl\", \"py_repositories\")\n\npy_repositories()\n\nhttp_archive(\n    name = \"com_google_googletest\",\n    sha256 = \"40d4ec942217dcc84a9ebe2a68584ada7d4a33a8ee958755763278ea1c5e18ff\",\n    strip_prefix = \"googletest-1.17.0\",\n    urls = [\"https://github.com/google/googletest/archive/v1.17.0.zip\"],\n)\n\n# Define before rules_proto, otherwise we receive the version of com_google_protobuf from there\nhttp_archive(\n    name = \"com_google_protobuf\",\n    sha256 = \"a83103b7ed3afaeedee9a212c8f65825444f58144f5e075b73c83f2b4ff27b62\",\n    strip_prefix = \"protobuf-34.1\",\n    urls = [\"https://github.com/protocolbuffers/protobuf/archive/v34.1.tar.gz\"],\n)\n\nhttp_archive(\n    name = \"googleapis\",\n    sha256 = \"1ec16c560b6fb94413dedd3f5abca88b72a9047ddec3225e0e654d122f64dd71\",\n    strip_prefix = \"googleapis-cba8415718590712af80d0fd90a5f016a2607b25\",\n    urls = [\n        \"https://github.com/googleapis/googleapis/archive/cba8415718590712af80d0fd90a5f016a2607b25.zip\",\n    ],\n)\n\nload(\"@googleapis//:repository_rules.bzl\", \"switched_rules_by_language\")\n\nswitched_rules_by_language(\n    name = \"com_google_googleapis_imports\",\n)\n\nhttp_archive(\n    name = \"bazel_skylib\",\n    sha256 = \"3b5b49006181f5f8ff626ef8ddceaa95e9bb8ad294f7b5d7b11ea9f7ddaf8c59\",\n    urls = [\n        \"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.9.0/bazel-skylib-1.9.0.tar.gz\",\n        \"https://github.com/bazelbuild/bazel-skylib/releases/download/1.9.0/bazel-skylib-1.9.0.tar.gz\",\n    ],\n)\n\nload(\"@bazel_skylib//:workspace.bzl\", \"bazel_skylib_workspace\")\n\nbazel_skylib_workspace()\n\nhttp_archive(\n    name = \"rules_proto\",\n    sha256 = \"14a225870ab4e91869652cfd69ef2028277fc1dc4910d65d353b62d6e0ae21f4\",\n    strip_prefix = \"rules_proto-7.1.0\",\n    urls = [\n        \"https://github.com/bazelbuild/rules_proto/archive/refs/tags/7.1.0.tar.gz\",\n    ],\n)\n\nload(\"@rules_proto//proto:repositories.bzl\", \"rules_proto_dependencies\")\n\nrules_proto_dependencies()\n\nload(\"@rules_proto//proto:toolchains.bzl\", \"rules_proto_toolchains\")\n\nrules_proto_toolchains()\n\nhttp_archive(\n    name = \"io_bazel_rules_go\",\n    sha256 = \"86d3dc8f59d253524f933aaf2f3c05896cb0b605fc35b460c0b4b039996124c6\",\n    urls = [\n        \"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.60.0/rules_go-v0.60.0.zip\",\n        \"https://github.com/bazelbuild/rules_go/releases/download/v0.60.0/rules_go-v0.60.0.zip\",\n    ],\n)\n\nload(\"@io_bazel_rules_go//go:deps.bzl\", \"go_register_toolchains\", \"go_rules_dependencies\")\n\ngo_rules_dependencies()\n\ngo_register_toolchains(version = \"1.26.0\")\n\nhttp_archive(\n    name = \"bazel_gazelle\",\n    sha256 = \"675114d8b433d0a9f54d81171833be96ebc4113115664b791e6f204d58e93446\",\n    urls = [\n        \"https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.47.0/bazel-gazelle-v0.47.0.tar.gz\",\n        \"https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.47.0/bazel-gazelle-v0.47.0.tar.gz\",\n    ],\n)\n\nload(\"@bazel_gazelle//:deps.bzl\", \"gazelle_dependencies\")\n\n# Use gazelle to declare Go dependencies in Bazel.\n# gazelle:repository_macro repositories.bzl%go_repositories\n\nload(\"//:repositories.bzl\", \"go_repositories\")\n\ngo_repositories()\n\n# This must be invoked after our explicit dependencies\n# See https://github.com/bazelbuild/bazel-gazelle/issues/1115.\ngazelle_dependencies()\n\nload(\"@com_google_protobuf//:protobuf_deps.bzl\", \"protobuf_deps\")\n\nprotobuf_deps()\n\nhttp_archive(\n    name = \"rules_shell\",\n    sha256 = \"e17f72732618a6536559b3015dbe190ef592f7b9ba81969ff4bca766c451b3a5\",\n    strip_prefix = \"rules_shell-0.7.0\",\n    url = \"https://github.com/bazelbuild/rules_shell/releases/download/v0.7.0/rules_shell-v0.7.0.tar.gz\",\n)\n\nload(\"@rules_shell//shell:repositories.bzl\", \"rules_shell_dependencies\", \"rules_shell_toolchains\")\n\nrules_shell_dependencies()\n\nrules_shell_toolchains()\n\nhttp_archive(\n    name = \"com_github_bazelbuild_buildtools\",\n    sha256 = \"f3b800e9f6ca60bdef3709440f393348f7c18a29f30814288a7326285c80aab9\",\n    strip_prefix = \"buildtools-8.5.1\",\n    urls = [\"https://github.com/bazelbuild/buildtools/archive/v8.5.1.tar.gz\"],\n)\n\nload(\"@com_github_bazelbuild_buildtools//buildifier:deps.bzl\", \"buildifier_dependencies\")\n\nbuildifier_dependencies()\n"
  },
  {
    "path": "bin/.gitignore",
    "content": "/protoc-gen-go\n/protoc-gen-go-grpc\n/protoc-gen-grpc-gateway\n/protoc-gen-openapiv2\n"
  },
  {
    "path": "buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - remote: buf.build/protocolbuffers/go:v1.35.1\n    out: .\n    opt:\n      - paths=source_relative\n  - remote: buf.build/grpc/go:v1.5.1\n    out: .\n    opt:\n      - paths=source_relative\n      - require_unimplemented_servers=false\n  - local: protoc-gen-grpc-gateway\n    out: .\n    opt:\n      - paths=source_relative\n      - allow_repeated_fields_in_body=true\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - allow_repeated_fields_in_body=true\n"
  },
  {
    "path": "buf.yaml",
    "content": "version: v1\nname: buf.build/grpc-ecosystem/grpc-gateway\ndeps:\n  - buf.build/googleapis/googleapis\nbreaking:\n  use:\n    - FILE\nlint:\n  use:\n    - DEFAULT\n  ignore_only:\n    DIRECTORY_SAME_PACKAGE:\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/camel_case_service.proto\n      - examples/internal/proto/examplepb/echo_service.proto\n      - examples/internal/proto/examplepb/enum_with_single_value.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/generate_unbound_methods.proto\n      - examples/internal/proto/examplepb/generated_input.proto\n      - examples/internal/proto/examplepb/excess_body.proto\n      - examples/internal/proto/examplepb/non_standard_names.proto\n      - examples/internal/proto/examplepb/opaque.proto\n      - examples/internal/proto/examplepb/openapi_merge_a.proto\n      - examples/internal/proto/examplepb/openapi_merge_b.proto\n      - examples/internal/proto/examplepb/proto3_field_semantics.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/examplepb/stream.proto\n      - examples/internal/proto/examplepb/unannotated_echo_service.proto\n      - examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n      - examples/internal/proto/examplepb/use_go_template.proto\n      - examples/internal/proto/examplepb/ignore_comment.proto\n      - examples/internal/proto/examplepb/remove_internal_comment.proto\n      - examples/internal/proto/examplepb/wrappers.proto\n    ENUM_PASCAL_CASE:\n      - examples/internal/proto/sub/camel_case_message.proto\n    ENUM_VALUE_PREFIX:\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/pathenum/path_enum.proto\n      - protoc-gen-openapiv2/options/openapiv2.proto\n      - runtime/internal/examplepb/example.proto\n      - runtime/internal/examplepb/proto3.proto\n    ENUM_ZERO_VALUE_SUFFIX:\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/pathenum/path_enum.proto\n      - protoc-gen-openapiv2/options/openapiv2.proto\n      - runtime/internal/examplepb/example.proto\n      - runtime/internal/examplepb/proto3.proto\n    FIELD_LOWER_SNAKE_CASE:\n      - examples/internal/helloworld/helloworld.proto\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/non_standard_names.proto\n      - runtime/internal/examplepb/example.proto\n      - runtime/internal/examplepb/non_standard_names.proto\n    MESSAGE_PASCAL_CASE:\n      - examples/internal/proto/sub/camel_case_message.proto\n    PACKAGE_DIRECTORY_MATCH:\n      - examples/internal/helloworld/helloworld.proto\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/camel_case_service.proto\n      - examples/internal/proto/examplepb/echo_service.proto\n      - examples/internal/proto/examplepb/enum_with_single_value.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/generate_unbound_methods.proto\n      - examples/internal/proto/examplepb/generated_input.proto\n      - examples/internal/proto/examplepb/excess_body.proto\n      - examples/internal/proto/examplepb/non_standard_names.proto\n      - examples/internal/proto/examplepb/opaque.proto\n      - examples/internal/proto/examplepb/openapi_merge_a.proto\n      - examples/internal/proto/examplepb/openapi_merge_b.proto\n      - examples/internal/proto/examplepb/proto3_field_semantics.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/examplepb/stream.proto\n      - examples/internal/proto/examplepb/unannotated_echo_service.proto\n      - examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n      - examples/internal/proto/examplepb/use_go_template.proto\n      - examples/internal/proto/examplepb/ignore_comment.proto\n      - examples/internal/proto/examplepb/remove_internal_comment.proto\n      - examples/internal/proto/examplepb/wrappers.proto\n      - examples/internal/proto/oneofenum/oneof_enum.proto\n      - examples/internal/proto/pathenum/path_enum.proto\n      - examples/internal/proto/sub/camel_case_message.proto\n      - examples/internal/proto/sub/message.proto\n      - examples/internal/proto/sub2/message.proto\n      - internal/descriptor/apiconfig/apiconfig.proto\n      - internal/descriptor/openapiconfig/openapiconfig.proto\n      - protoc-gen-openapiv2/options/annotations.proto\n      - protoc-gen-openapiv2/options/openapiv2.proto\n      - runtime/internal/examplepb/example.proto\n      - runtime/internal/examplepb/non_standard_names.proto\n      - runtime/internal/examplepb/proto2.proto\n      - runtime/internal/examplepb/proto3.proto\n    PACKAGE_SAME_GO_PACKAGE:\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/camel_case_service.proto\n      - examples/internal/proto/examplepb/echo_service.proto\n      - examples/internal/proto/examplepb/enum_with_single_value.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/generate_unbound_methods.proto\n      - examples/internal/proto/examplepb/generated_input.proto\n      - examples/internal/proto/examplepb/excess_body.proto\n      - examples/internal/proto/examplepb/non_standard_names.proto\n      - examples/internal/proto/examplepb/opaque.proto\n      - examples/internal/proto/examplepb/proto3_field_semantics.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/examplepb/stream.proto\n      - examples/internal/proto/examplepb/unannotated_echo_service.proto\n      - examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n      - examples/internal/proto/examplepb/use_go_template.proto\n      - examples/internal/proto/examplepb/ignore_comment.proto\n      - examples/internal/proto/examplepb/remove_internal_comment.proto\n      - examples/internal/proto/examplepb/wrappers.proto\n      - runtime/internal/examplepb/example.proto\n      - runtime/internal/examplepb/non_standard_names.proto\n      - runtime/internal/examplepb/proto2.proto\n      - runtime/internal/examplepb/proto3.proto\n    PACKAGE_VERSION_SUFFIX:\n      - examples/internal/helloworld/helloworld.proto\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/camel_case_service.proto\n      - examples/internal/proto/examplepb/echo_service.proto\n      - examples/internal/proto/examplepb/enum_with_single_value.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/generate_unbound_methods.proto\n      - examples/internal/proto/examplepb/generated_input.proto\n      - examples/internal/proto/examplepb/excess_body.proto\n      - examples/internal/proto/examplepb/non_standard_names.proto\n      - examples/internal/proto/examplepb/opaque.proto\n      - examples/internal/proto/examplepb/openapi_merge_a.proto\n      - examples/internal/proto/examplepb/openapi_merge_b.proto\n      - examples/internal/proto/examplepb/proto3_field_semantics.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/examplepb/stream.proto\n      - examples/internal/proto/examplepb/unannotated_echo_service.proto\n      - examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n      - examples/internal/proto/examplepb/use_go_template.proto\n      - examples/internal/proto/examplepb/ignore_comment.proto\n      - examples/internal/proto/examplepb/remove_internal_comment.proto\n      - examples/internal/proto/examplepb/wrappers.proto\n      - examples/internal/proto/oneofenum/oneof_enum.proto\n      - examples/internal/proto/pathenum/path_enum.proto\n      - examples/internal/proto/sub/camel_case_message.proto\n      - examples/internal/proto/sub/message.proto\n      - examples/internal/proto/sub2/message.proto\n      - internal/descriptor/apiconfig/apiconfig.proto\n      - internal/descriptor/openapiconfig/openapiconfig.proto\n      - protoc-gen-openapiv2/options/annotations.proto\n      - protoc-gen-openapiv2/options/openapiv2.proto\n      - runtime/internal/examplepb/example.proto\n      - runtime/internal/examplepb/non_standard_names.proto\n      - runtime/internal/examplepb/proto2.proto\n      - runtime/internal/examplepb/proto3.proto\n    RPC_PASCAL_CASE:\n      - examples/internal/proto/examplepb/camel_case_service.proto\n    RPC_REQUEST_RESPONSE_UNIQUE:\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/echo_service.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/generate_unbound_methods.proto\n      - examples/internal/proto/examplepb/generated_input.proto\n      - examples/internal/proto/examplepb/excess_body.proto\n      - examples/internal/proto/examplepb/openapi_merge_a.proto\n      - examples/internal/proto/examplepb/openapi_merge_b.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/examplepb/stream.proto\n      - examples/internal/proto/examplepb/unannotated_echo_service.proto\n      - examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n      - examples/internal/proto/examplepb/wrappers.proto\n    RPC_REQUEST_STANDARD_NAME:\n      - examples/internal/helloworld/helloworld.proto\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/echo_service.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/generate_unbound_methods.proto\n      - examples/internal/proto/examplepb/generated_input.proto\n      - examples/internal/proto/examplepb/excess_body.proto\n      - examples/internal/proto/examplepb/non_standard_names.proto\n      - examples/internal/proto/examplepb/openapi_merge_a.proto\n      - examples/internal/proto/examplepb/openapi_merge_b.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/examplepb/stream.proto\n      - examples/internal/proto/examplepb/unannotated_echo_service.proto\n      - examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n      - examples/internal/proto/examplepb/wrappers.proto\n      - runtime/internal/examplepb/non_standard_names.proto\n    RPC_RESPONSE_STANDARD_NAME:\n      - examples/internal/helloworld/helloworld.proto\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/echo_service.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/generate_unbound_methods.proto\n      - examples/internal/proto/examplepb/generated_input.proto\n      - examples/internal/proto/examplepb/excess_body.proto\n      - examples/internal/proto/examplepb/non_standard_names.proto\n      - examples/internal/proto/examplepb/openapi_merge_a.proto\n      - examples/internal/proto/examplepb/openapi_merge_b.proto\n      - examples/internal/proto/examplepb/response_body_service.proto\n      - examples/internal/proto/examplepb/stream.proto\n      - examples/internal/proto/examplepb/unannotated_echo_service.proto\n      - examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n      - examples/internal/proto/examplepb/use_go_template.proto\n      - examples/internal/proto/examplepb/ignore_comment.proto\n      - examples/internal/proto/examplepb/remove_internal_comment.proto\n      - examples/internal/proto/examplepb/wrappers.proto\n      - runtime/internal/examplepb/non_standard_names.proto\n    SERVICE_PASCAL_CASE:\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/camel_case_service.proto\n    SERVICE_SUFFIX:\n      - examples/internal/helloworld/helloworld.proto\n      - examples/internal/proto/examplepb/a_bit_of_everything.proto\n      - examples/internal/proto/examplepb/camel_case_service.proto\n      - examples/internal/proto/examplepb/flow_combination.proto\n      - examples/internal/proto/examplepb/openapi_merge_a.proto\n      - examples/internal/proto/examplepb/openapi_merge_b.proto\n  allow_comment_ignores: true\n# Note: the build configuration goes last in this\n# files so we can append excludes at push time.\nbuild:\n  excludes:\n    - bazel-grpc-gateway\n"
  },
  {
    "path": "docs/.gitignore",
    "content": "*.gem\n.bundle\n.ruby-version\n.jekyll-cache\n.sass-cache\n_site\n"
  },
  {
    "path": "docs/Gemfile",
    "content": "source \"https://rubygems.org\"\ngem \"just-the-docs\"\ngroup :jekyll_plugins do\n  gem \"github-pages\"                 # GitHub Pages\n  gem \"jekyll-optional-front-matter\" # GitHub Pages\n  gem \"jekyll-default-layout\"        # GitHub Pages\n  gem \"jekyll-titles-from-headings\"  # GitHub Pages\n  gem \"jekyll-readme-index\"          # GitHub Pages\n  gem \"jekyll-relative-links\"        # GitHub Pages\n  gem 'jekyll-include-cache'         # GitHub Pages\nend\n"
  },
  {
    "path": "docs/_config.yml",
    "content": "# Site settings\n# These are used to personalize your new site. If you look in the HTML files,\n# you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on.\n# You can create any custom variable you would like, and they will be accessible\n# in the templates via {{ site.myvariable }}.\ntitle: gRPC-Gateway\ndescription: gRPC-Gateway Documentation Website\nbaseurl: \"/grpc-gateway\" # the subpath of your site, e.g. /blog\nurl: \"https://grpc-ecosystem.github.io\" # the base hostname & protocol for your site, e.g. http://example.com\n\nrepository: grpc-ecosystem/grpc-gateway\nremote_theme: pmarsceill/just-the-docs@v0.6.2\n\npermalink: pretty\nexclude: [\"run.sh\"]\n\n# Set a path/url to a logo that will be displayed instead of the title\n#logo: \"/assets/images/grpc-gateway.png\"\n\n# Enable or disable the site search\n# Supports true (default) or false\nsearch_enabled: true\nsearch:\n  # Split pages into sections that can be searched individually\n  # Supports 1 - 6, default: 2\n  heading_level: 2\n  # Maximum amount of previews per search result\n  # Default: 3\n  previews: 2\n  # Maximum amount of words to display before a matched word in the preview\n  # Default: 5\n  preview_words_before: 3\n  # Maximum amount of words to display after a matched word in the preview\n  # Default: 10\n  preview_words_after: 3\n  # Set the search token separator\n  # Default: /[\\s\\-/]+/\n  # Example: enable support for hyphenated search words\n  tokenizer_separator: /[\\s/]+/\n  # Display the relative url in search results\n  # Supports true (default) or false\n  rel_url: true\n  # Enable or disable the search button that appears in the bottom right corner of every page\n  # Supports true or false (default)\n  button: false\n\n# Enable or disable heading anchors\nheading_anchors: true\n\n# Aux links for the upper right navigation\naux_links:\n  \"gRPC-Gateway on GitHub\":\n    - \"https://github.com/grpc-ecosystem/grpc-gateway\"\n\n# Makes Aux links open in a new tab. Default is false\naux_links_new_tab: false\n\n# Sort order for navigation links\n# nav_sort: case_insensitive # default, equivalent to nil\nnav_sort: case_sensitive # Capital letters sorted before lowercase\n\n# Footer content\n# appears at the bottom of every page's main content\n\n# Back to top link\nback_to_top: true\nback_to_top_text: \"Back to top\"\n\nfooter_content: 'Copyright &copy; the gRPC-Gateway Authors. Distributed by a <a href=\"https://github.com/grpc-ecosystem/grpc-gateway/tree/main/LICENSE\">BSD 3-Clause License.</a>'\n\n# Footer last edited timestamp\nlast_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter\nlast_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\n\n# Footer \"Edit this page on GitHub\" link text\ngh_edit_link: true # show or hide edit this page link\ngh_edit_link_text: \"Edit this page on GitHub\"\ngh_edit_repository: \"https://github.com/grpc-ecosystem/grpc-gateway\" # the github URL for your repo\ngh_edit_branch: \"main\" # the branch that your docs is served from\ngh_edit_source: docs # the source that your files originate from\ngh_edit_view_mode: \"tree\" # \"tree\" or \"edit\" if you want the user to jump into the editor immediately\n\n# Color scheme currently only supports \"dark\", \"light\"/nil (default), or a custom scheme that you define\ncolor_scheme: nil\n\n# Disqus Comments\n# disqus:\n# Leave shortname blank to disable comments site-wide.\n# Enable comments for any post by adding `comments: true` to that post's YAML Front Matter.\n# shortname:\n\n# Google Analytics Tracking\n# e.g, UA-1234567-89\n# ga_tracking:\n# ga_tracking_anonymize_ip: true # Use GDPR compliant Google Analytics settings (true/nil by default)\n\nplugins:\n  - jekyll-seo-tag\n  - jekyll-include-cache\n\nkramdown:\n  syntax_highlighter_opts:\n    block:\n      line_numbers: false\n\ncompress_html:\n  clippings: all\n  comments: all\n  endings: all\n  startings: []\n  blanklines: false\n  profile: false\n  # ignore:\n  # envs: all\n"
  },
  {
    "path": "docs/_layouts/default.html",
    "content": "---\nlayout: table_wrappers\n---\n\n<!DOCTYPE html>\n\n<html lang=\"{{ site.lang | default: 'en-US' }}\">\n{% include head.html %}\n<body>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\">\n    <symbol id=\"svg-link\" viewBox=\"0 0 24 24\">\n      <title>Link</title>\n      <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\">\n        <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>\n      </svg>\n    </symbol>\n    <symbol id=\"svg-search\" viewBox=\"0 0 24 24\">\n      <title>Search</title>\n      <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\">\n        <circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\n      </svg>\n    </symbol>\n    <symbol id=\"svg-menu\" viewBox=\"0 0 24 24\">\n      <title>Menu</title>\n      <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\">\n        <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>\n      </svg>\n    </symbol>\n    <symbol id=\"svg-arrow-right\" viewBox=\"0 0 24 24\">\n      <title>Expand</title>\n      <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\">\n        <polyline points=\"9 18 15 12 9 6\"></polyline>\n      </svg>\n    </symbol>\n    <symbol id=\"svg-doc\" viewBox=\"0 0 24 24\">\n      <title>Document</title>\n      <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\">\n        <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>\n      </svg>\n    </symbol>\n  </svg>\n\n  <div class=\"side-bar\">\n    <div class=\"site-header\">\n      <a href=\"{{ '/' | absolute_url }}\" class=\"site-title lh-tight\">{% include title.html %}</a>\n      <a href=\"#\" id=\"menu-button\" class=\"site-button\">\n        <svg viewBox=\"0 0 24 24\" class=\"icon\"><use xlink:href=\"#svg-menu\"></use></svg>\n      </a>\n    </div>\n    <nav role=\"navigation\" aria-label=\"Main\" id=\"site-nav\" class=\"site-nav\">\n      {% if site.just_the_docs.collections %}\n        {% assign collections_size = site.just_the_docs.collections | size %}\n        {% for collection_entry in site.just_the_docs.collections %}\n          {% assign collection_key = collection_entry[0] %}\n          {% assign collection_value = collection_entry[1] %}\n          {% assign collection = site[collection_key] %}\n          {% if collection_value.nav_exclude != true %}\n            {% if collections_size > 1 %}\n              <div class=\"nav-category\">{{ collection_value.name }}</div>\n            {% endif %}\n            {% include nav.html pages=collection %}\n          {% endif %}\n        {% endfor %}\n      {% else %}\n        {% include nav.html pages=site.html_pages %}\n      {% endif %}\n    </nav>\n    <footer class=\"site-footer\">\n      This site uses <a href=\"https://github.com/pmarsceill/just-the-docs\">Just the Docs</a>, a documentation theme for Jekyll.\n    </footer>\n  </div>\n  <div class=\"main\" id=\"top\">\n    <div id=\"main-header\" class=\"main-header\">\n      {% if site.search_enabled != false %}\n        <div class=\"search\">\n          <div class=\"search-input-wrap\">\n            <input type=\"text\" id=\"search-input\" class=\"search-input\" tabindex=\"0\" placeholder=\"Search {{ site.title }}\" aria-label=\"Search {{ site.title }}\" autocomplete=\"off\">\n            <label for=\"search-input\" class=\"search-label\"><svg viewBox=\"0 0 24 24\" class=\"search-icon\"><use xlink:href=\"#svg-search\"></use></svg></label>\n          </div>\n          <div id=\"search-results\" class=\"search-results\"></div>\n        </div>\n      {% endif %}\n      {% if site.aux_links %}\n        <nav aria-label=\"Auxiliary\" class=\"aux-nav\">\n          <ul class=\"aux-nav-list\">\n            {% for link in site.aux_links %}\n              <li class=\"aux-nav-list-item\">\n                <a href=\"{{ link.last }}\" class=\"site-button\"\n                  {% if site.aux_links_new_tab %}\n                  target=\"_blank\" rel=\"noopener noreferrer\"\n                  {% endif %}\n                >\n                  {{ link.first }}\n                </a>\n              </li>\n            {% endfor %}\n          </ul>\n        </nav>\n      {% endif %}\n    </div>\n    <div id=\"main-content-wrap\" class=\"main-content-wrap\">\n      {% unless page.url == \"/\" %}\n        {% if page.parent %}\n          <nav aria-label=\"Breadcrumb\" class=\"breadcrumb-nav\">\n            <ol class=\"breadcrumb-nav-list\">\n              {% if page.grand_parent %}\n                <li class=\"breadcrumb-nav-list-item\"><a href=\"{{ first_level_url }}\">{{ page.grand_parent }}</a></li>\n                <li class=\"breadcrumb-nav-list-item\"><a href=\"{{ second_level_url }}\">{{ page.parent }}</a></li>\n              {% else %}\n                <li class=\"breadcrumb-nav-list-item\"><a href=\"{{ first_level_url }}\">{{ page.parent }}</a></li>\n              {% endif %}\n              <li class=\"breadcrumb-nav-list-item\"><span>{{ page.title }}</span></li>\n            </ol>\n          </nav>\n        {% endif %}\n      {% endunless %}\n      <div id=\"main-content\" class=\"main-content\" role=\"main\">\n        {% if site.heading_anchors != false %}\n          {% 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%\\\"\" %}\n        {% else %}\n          {{ content }}\n        {% endif %}\n\n        {% if page.has_children == true and page.has_toc != false %}\n          <hr>\n          <h2 class=\"text-delta\">Table of contents</h2>\n          <ul>\n            {%- assign children_list = pages_list | where: \"parent\", page.title | where: \"grand_parent\", page.parent -%}\n            {% for child in children_list %}\n              <li>\n                <a href=\"{{ child.url | absolute_url }}\">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %}\n              </li>\n            {% endfor %}\n          </ul>\n        {% endif %}\n\n        {% if site.footer_content != nil or site.last_edit_timestamp or site.gh_edit_link %}\n          <hr>\n          <footer>\n            {% if site.back_to_top %}\n              <p><a href=\"#top\" id=\"back-to-top\">{{ site.back_to_top_text }}</a></p>\n            {% endif %}\n            {% if site.footer_content != nil %}\n              <p class=\"text-small text-grey-dk-000 mb-0\">{{ site.footer_content }}</p>\n            {% endif %}\n\n            {% if site.last_edit_timestamp or site.gh_edit_link %}\n              <div class=\"d-flex mt-2\">\n                {% if site.last_edit_timestamp and site.last_edit_time_format and page.last_modified_date %}\n                  <p class=\"text-small text-grey-dk-000 mb-0 mr-2\">\n                    Page last modified: <span class=\"d-inline-block\">{{ page.last_modified_date | date: site.last_edit_time_format }}</span>.\n                  </p>\n                {% endif %}\n                {% if\n                  site.gh_edit_link and\n                  site.gh_edit_link_text and\n                  site.gh_edit_repository and\n                  site.gh_edit_branch and\n                  site.gh_edit_view_mode\n                %}\n                  <p class=\"text-small text-grey-dk-000 mb-0\">\n                    <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>\n                  </p>\n                {% endif %}\n              </div>\n            {% endif %}\n            {% if site.disqus.shortname %}\n             {% include comments.html %}\n            {% endif %}\n          </footer>\n        {% endif %}\n\n      </div>\n    </div>\n\n    {% if site.search_enabled != false %}\n      {% if site.search.button %}\n        <a href=\"#\" id=\"search-button\" class=\"search-button\">\n          <svg viewBox=\"0 0 24 24\" class=\"icon\"><use xlink:href=\"#svg-search\"></use></svg>\n        </a>\n      {% endif %}\n\n      <div class=\"search-overlay\"></div>\n    {% endif %}\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/docs/contributing/2020_season_of_docs.md",
    "content": "---\nlayout: default\ntitle: Google Season of Docs\nnav_order: 1\nparent: Contributing\n---\n\n# 2020 Season of Docs\n\n<div align=\"center\">\n<img src=\"https://developers.google.com/season-of-docs/images/logo/SeasonofDocs_Logo_SecondaryGrey_300ppi.png\" />\n</div>\n\nThe gRPC-Gateway participated in the 2020 [Google Season of Docs](https://g.co/seasonofdocs).\nThe project was completed by [@iamrajiv](https://github.com/iamrajiv). A summary of the project\nwork can be found in the\n[project report](https://github.com/iamrajiv/GSoD-2020/blob/master/GSoD_2020_Project_Report.md).\n"
  },
  {
    "path": "docs/docs/contributing/getting_started.md",
    "content": "---\nlayout: default\ntitle: Getting started\nnav_order: 0\nparent: Contributing\n---\n\n# How to contribute\n\nSee [CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md).\n"
  },
  {
    "path": "docs/docs/contributing/index.md",
    "content": "---\nlayout: default\ntitle: Contributing\nnav_order: 5\nhas_children: true\n---\n"
  },
  {
    "path": "docs/docs/development/grpc-gateway_v2_migration_guide.md",
    "content": "---\nlayout: default\ntitle: gRPC-Gateway v2 migration guide\nnav_order: 0\nparent: Development\n---\n\n# gRPC-Gateway v2 migration guide\n\nThis 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.\n\nThe following behavioural defaults have been changed:\n\n## protoc-gen-swagger has been renamed protoc-gen-openapiv2\n\nSee [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/675)\nfor more information. Apart from the new name, the only real difference to users will be a slightly different proto annotation:\n\n```protobuf\nimport \"protoc-gen-openapiv2/options/annotations.proto\";\n```\n\ninstead of\n\n```protobuf\nimport \"protoc-gen-swagger/options/annotations.proto\";\n```\n\nand\n\n```protobuf\noption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n```\n\ninstead of\n\n```protobuf\noption (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {\n```\n\nThe Bazel rule has been renamed `protoc_gen_openapiv2`.\n\n## The example field in the OpenAPI annotations is now a string\n\nThis 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.\n\nFor example, if you had an example that looked like this:\n\n```protobuf\nexample: { value: '{ \"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\" }' }\n```\n\nIt would now look like this:\n\n```protobuf\nexample: \"{\\\"uuid\\\": \\\"0cf361e1-4b44-483d-a159-54dabdf7e814\\\"}\"\n```\n\nSee [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.\n\n## We now use the camelCase JSON names by default\n\nSee [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) and\n[original pull request](https://github.com/grpc-ecosystem/grpc-gateway/pull/540) for more information.\n\nIf you want to revert to the old behaviour, configure a custom marshaler with `UseProtoNames: true`:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{\n\t\tMarshaler: &runtime.JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tUseProtoNames:   true,\n\t\t\t\tEmitUnpopulated: true,\n\t\t\t},\n\t\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\t\tDiscardUnknown: true,\n\t\t\t},\n\t\t},\n\t}),\n)\n```\n\nTo change the OpenAPI generator behaviour to match, set `json_names_for_fields=false` when generating:\n\n```sh\n--openapiv2_out=json_names_for_fields=false:./gen/openapiv2 path/to/my/proto/v1/myproto.proto\n```\n\nIf using the Bazel rule, set `json_names_for_fields=False`.\n\n## We now emit default values for all fields\n\nSee [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/233)\nfor more information.\n\nIf you want to revert to the old behaviour, configure a custom marshaler with\n`EmitUnpopulated: false`:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{\n\t\tMarshaler: &runtime.JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tEmitUnpopulated: false,\n\t\t\t},\n\t\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\t\tDiscardUnknown: true,\n\t\t\t},\n\t\t},\n\t}),\n)\n```\n\n## We now support google.api.HttpBody message types by default\n\nThe `runtime.SetHTTPBodyMarshaler` function has disappeared, and is now\nenabled by default. If you for some reason don't want `HttpBody` messages to be\nrespected, you can disable it by overwriting the default marshaler with one which\ndoes not wrap `runtime.JSONPb` in `runtime.HTTPBodyMarshaler`:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{\n\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\tEmitUnpopulated: true,\n\t\t},\n\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\tDiscardUnknown: true,\n\t\t},\n\t}),\n)\n```\n\n## runtime.DisallowUnknownFields has been removed\n\nAll marshalling settings are now inherited from the configured marshaler. If you wish\nto disallow unknown fields, configure a custom marshaler:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{\n\t\tMarshaler: &runtime.JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tEmitUnpopulated: true,\n\t\t\t},\n\t\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\t\tDiscardUnknown: false,\n\t\t\t},\n\t\t},\n\t}),\n)\n```\n\n## WithLastMatchWins and allow_colon_final_segments=true is now default behaviour\n\nIf you were previously specifying these, please remove them, as this is now\nthe default behaviour. See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) for more information.\n\nThere 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.\n\n## Error handling configuration has been overhauled\n\n`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`.\n\n## Default query parameter parsing behaviour change\n\nThe 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.\n"
  },
  {
    "path": "docs/docs/development/index.md",
    "content": "---\nlayout: default\ntitle: Development\nnav_order: 4\nhas_children: true\n---\n"
  },
  {
    "path": "docs/docs/development/installation_for_cygwin.md",
    "content": "---\nlayout: default\ntitle: Installation for Cygwin\nnav_order: 1\nparent: Development\n---\n\n# Installation for Cygwin\n\n<div>\n<img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Cygwin_logo.svg/1024px-Cygwin_logo.svg.png\" width=\"145\"/>\n</div>\n\n## Installation\n\nFirst, you need to install the [Go language](https://golang.org/dl/). Please install the latest version, not the one that is listed here.\n\n    wget -N https://storage.googleapis.com/golang/go1.8.1.windows-amd64.msi\n    msiexec /i go1.8.1.windows-amd64.msi /passive /promptrestart\n\nThen 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.\n\n    wget -N https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-win32.zip`\n    7z x protoc-3.2.0-win32.zip -o/usr/local/\n\nThen you need to set up your Go workspace. Create the workspace dir.\n\n    mkdir /home/user/go\n    mkdir /home/user/go/bin\n    mkdir /home/user/go/pkg\n    mkdir /home/user/go/src\n\nFrom 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).\n\n    setx GOPATH c:\\path\\to\\your\\cygwin\\home\\user\\go /M\n    set pathkey=\"HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment\"\n    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\")\n\nThen `go get -u -v` the following packages:\n\n    go get -u -v github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway\n    go get -u -v github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2\n    go get -u -v google.golang.org/protobuf/cmd/protoc-gen-go\n    go get -u -v google.golang.org/grpc/cmd/protoc-gen-go-grpc\n\nThis will probably fail with a similar output to this:\n\n    github.com/grpc-ecosystem/grpc-gateway (download)\n    # 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\n    Cloning into 'C:\\path\\to\\your\\cygwin\\home\\user\\go\\src\\github.com\\grpc-ecosystem\\grpc-gateway'...\n    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\n    package github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway: exit status 128\n\nTo 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.\n\n    git clone https://github.com/grpc-ecosystem/grpc-gateway $(cygpath -u $GOPATH)/src/github.com/grpc-ecosystem/grpc-gateway\n    git clone https://github.com/golang/protobuf $(cygpath -u $GOPATH)/src/github.com/golang/protobuf\n    git clone https://github.com/google/go-genproto $(cygpath -u $GOPATH)/src/google.golang.org/genproto\n\nOnce the clone operations are finished the `go get -u -v` commands shouldn't give you an error anymore.\n\n## Usage\n\nFollow the [instructions](https://github.com/grpc-ecosystem/grpc-gateway#usage) in the [README](https://github.com/grpc-ecosystem/grpc-gateway#readme).\n\nAdjust steps 3, 5 and 7 like this. `protoc` expects native Windows paths.\n\n    protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src --go_out=. --go-grpc_out=. ./path/to/your_service.proto\n    protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src ./path/to/your_service.proto\n    protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src ./path/to/your_service.proto\n\nThen `cd` into the directory where your entry-point `main.go` file is located and run:\n\n    go get -v\n\nThis 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.\n\n    git clone https://go.googlesource.com/net $(cygpath -u $GOPATH)/src/golang.org/x/net\n    git clone https://go.googlesource.com/text $(cygpath -u $GOPATH)/src/golang.org/x/text\n    git clone https://github.com/grpc/grpc-go $(cygpath -u $GOPATH)/src/google.golang.org/grpc\n\nOnce the clone operations are finished the `go get -v` commands shouldn't give you an error anymore.\n\nThen run:\n\n    go install\n\nThis will compile and install your gRPC-Gateway service into `$GOPATH/bin`.\n"
  },
  {
    "path": "docs/docs/faq.md",
    "content": "---\nlayout: default\ntitle: FAQ\nnav_order: 7\n---\n\n# FAQ\n\n## How can I write the annotations which gRPC-Gateway requires?\n\nThe 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.\n\nFor 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/)\n\nSee also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) in the grpc-io mailing list.\n\n## 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?\n\nSee the question above at first.\n\nThe 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.\n\nOn the other hand, you can still add whatever you want as a middleware which wraps\n[`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)).\n\n## 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?\n\nAs 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).\n\n## Why are the models in the OpenAPI specification prefixed with the last part of the proto package name?\n\nThe 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.\n\n## Why not strip the prefix?\n\nWhen 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).\n\n## What is the difference between the gRPC-Gateway and grpc-httpjson-transcoding?\n\nThe 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.\n\n<!-- TODO(v3): remove this note when default behavior matches Envoy/Cloud Endpoints -->\n**Behavior differences:**\n- 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)\n\n## What is the difference between the gRPC-Gateway and gRPC-web?\n\n### Usage\n\nIn 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`.\n\nIn gRPC-web, the client code is generated directly from the proto files and can be used in the frontend.\n\n### Performance\n\nThe 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.\n\nIn gRPC-web, the message is sent in the protobuf binary format already, so there is no additional parsing cost on the proxy side.\n\n### Maintenance\n\nWith 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.\n\nIn gRPC-web, regenerating the files from the proto file will automatically update the front-end client.\n"
  },
  {
    "path": "docs/docs/mapping/binary_file_uploads.md",
    "content": "---\nlayout: default\ntitle: Binary file uploads\nnav_order: 2\nparent: Mapping\n---\n\n# Binary file uploads\n\nIf you need to do a binary file upload, e.g. via;\n\n```sh\ncurl -X POST -F \"attachment=@/tmp/somefile.txt\" http://localhost:9090/v1/files\n```\n\nthen your request will contain the binary data directly and there is no way to model this using gRPC.\n\nWhat you can do instead is to add a custom route directly on the `mux` instance.\n\n## Custom route on a mux instance\n\nHere we'll setup a handler (`handleBinaryFileUpload`) for `POST` requests: \n\n```go\n// Create a mux instance\nmux := runtime.NewServeMux()\n\n// Attachment upload from http/s handled manually\nmux.HandlePath(\"POST\", \"/v1/files\", handleBinaryFileUpload)\n```\n\nAnd then in your handler you can do something like:\n\n```go\nfunc handleBinaryFileUpload(w http.ResponseWriter, r *http.Request, params map[string]string) {\n\terr := r.ParseForm()\n\tif err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"failed to parse form: %s\", err.Error()), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tf, header, err := r.FormFile(\"attachment\")\n\tif err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"failed to get file 'attachment': %s\", err.Error()), http.StatusBadRequest)\n\t\treturn\n\t}\n\tdefer f.Close()\n\n\t//\n\t// 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.\n\t// Also `header` will contain the filename, size etc of the original file.\n\t//\n}\n```\n"
  },
  {
    "path": "docs/docs/mapping/custom_marshalers.md",
    "content": "---\nlayout: default\ntitle: Custom marshalers\nnav_order: 6\nparent: Mapping\n---\n\n# Custom marshalers\n\n[`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler)\nimplementations can implement optional additional methods to customize their\nbehaviour beyond the methods required by the core interface.\n\n## Stream delimiters\n\nBy default, a streamed response delimits each response body with a single\nnewline (`\"\\n\"`). You can change this delimiter by having your marshaler\nimplement\n[`Delimited`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#Delimited).\n\nFor example, to separate each entry with a pipe (`\"|\"`) instead:\n\n```go\ntype YourMarshaler struct {\n  // ...\n}\n\n// ...\n\nfunc (*YourMarshaler) Delimiter() []byte {\n  return []byte(\"|\")\n}\n```\n\n## Stream content type\n\nBy default, a streamed response emits a `Content-Type` header that is the same\nfor a unary response, from the `ContentType()` method of the\n[`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler)\ninterface.\n\nIf you require the server to declare a distinct content type for stream\nresponses versus unary responses, the marshaler must implement\n[`StreamContentType`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#StreamContentType).\nThis provides the MIME type when specifically responding to a streaming\nresponse.\n\nFor example, by default the\n[`JSONPb`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#JSONPb)\nmarshaler results in `application/json` for its `Content-Type` response header,\nirrespective of unary versus streaming. This can be changed for streaming\nendpoints by wrapping the marshaler with a custom marshaler that implements\n[`StreamContentType`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#StreamContentType)\nto return the [NDJSON](https://github.com/ndjson/ndjson-spec) MIME type for\nstreaming response endpoints:\n\n```go\ntype CustomJSONPb struct {\n  runtime.JSONPb\n}\n\nfunc (*CustomJSONPb) Delimiter() []byte {\n  // Strictly speaking this is already the default delimiter for JSONPb, but\n  // providing it here for completeness with an NDJSON marshaler all in one\n  // place.\n  return []byte(\"\\n\")\n}\n\nfunc (*CustomJSONPb) StreamContentType(interface{}) string {\n  return \"application/x-ndjson\"\n}\n```\n"
  },
  {
    "path": "docs/docs/mapping/customizing_openapi_output.md",
    "content": "---\nlayout: default\ntitle: Customizing OpenAPI Output\nnav_order: 4\nparent: Mapping\n---\n\n{% raw %}\n\n# Customizing OpenAPI Output\n\n## In proto comments\n\nYou can provide comments directly in your Protocol Buffer definitions and they will be translated into comments in the generated OpenAPI definitions:\n\n```protobuf\nmessage MyMessage {\n  // This comment will end up directly in your Open API definition\n  string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: \"The UUID field.\"}];\n}\n```\n\nYou can disable this behavior and exclude all protobuf comments from OpenAPI output via the `ignore_comments` option.\n\n## Using proto options\n\nYou 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:\n\n```protobuf\nimport \"protoc-gen-openapiv2/options/annotations.proto\";\n\nmessage ABitOfEverything {\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n        json_schema: {\n            title: \"A bit of everything\"\n            description: \"Intentionally complicated message type to cover many features of Protobuf.\"\n            required: [\"uuid\", \"int64_value\", \"double_value\"]\n        }\n        external_docs: {\n            url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n            description: \"Find out more about ABitOfEverything\";\n        }\n        example: \"{\\\"uuid\\\": \\\"0cf361e1-4b44-483d-a159-54dabdf7e814\\\"}\"\n        extensions: {\n            key: \"x-irreversible\";\n            value {\n                bool_value: true;\n            }\n        }\n    };\n\n    string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: \"The UUID field.\"}];\n}\n```\nEnums can be customized like messages:\n\n```protobuf\n// NumericEnum is one or zero.\nenum NumericEnum {\n  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum) = {\n    description: \"NumericEnum is one or zero.\"\n    title: \"NumericEnum\"\n    extensions: {\n      key: \"x-a-bit-of-everything-foo\"\n      value {\n        string_value: \"bar\"\n      }\n    }\n    external_docs: {\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      description: \"Find out more about ABitOfEverything\"\n    }\n    example: \"\\\"ZERO\\\"\"\n  };\n  // ZERO means 0\n  ZERO = 0;\n  // ONE means 1\n  ONE = 1;\n}\n```\n\nOperations can also be customized:\n\n```protobuf\nservice ABitOfEverythingService {\n   rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) {\n        option (google.api.http) = {\n            delete: \"/v1/example/a_bit_of_everything/{uuid}\"\n        };\n        option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n            security: {\n                security_requirement: {\n                    key: \"ApiKeyAuth\";\n                    value: {}\n                }\n                security_requirement: {\n                    key: \"OAuth2\";\n                    value: {\n                        scope: \"read\";\n                        scope: \"write\";\n                    }\n                }\n            }\n            extensions: {\n                key: \"x-irreversible\";\n                value {\n                    bool_value: true;\n                }\n            }\n        };\n    }\n}\n```\n\n[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:\n```\nextensions: {\n  key: \"x-amazon-apigateway-authorizer\";\n  value {\n    struct_value {\n      fields {\n        key: \"type\";\n        value {\n          string_value: \"token\";\n        }\n      }\n      fields {\n        key: \"authorizerResultTtlInSeconds\";\n        value {\n          number_value: 60;\n        }\n      }\n    }\n  }\n}\n```\n\nPlease 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.\n\n## Using google.api.field_behavior\n\nGoogle 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:\n\n```protobuf\nimport \"google/api/field_behavior.proto\";\n\nmessage MyMessage {\n    string a_required_field = 1 [(google.api.field_behavior) = REQUIRED];\n}\n```\n\nThe following options are used in the Open API output:\n\n- `REQUIRED` - marks a field as required\n- `OUTPUT_ONLY` - marks a field as readonly\n\nGoogle defines a couple of other options - `OPTIONAL`, `IMMUTABLE`, `INPUT_ONLY` -\nthat are not currently used. `OPTIONAL` support is currently under discussion\nin [this issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/669).\n\nFor `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.\n## Using go templates in proto file comments\n\nUse [Go templates](https://golang.org/pkg/text/template/) in your proto file comments to allow more advanced documentation such as:\n\n- Documentation about fields in the proto objects.\n- Import the content of external files (such as\n  [Markdown](https://en.wikipedia.org/wiki/Markdown)).\n\n### How to use it\n\nBy default this function is turned off, so if you want to use it you have to add the `use_go_templates` option:\n\n```sh\n--openapiv2_out . --openapiv2_opt use_go_templates=true\n```\n\nor:\n\n```sh\n--openapiv2_out=use_go_templates=true:.\n```\n\n#### Example script\n\nExample of a bash script with the `use_go_templates` flag set to true:\n\n```sh\n$ protoc -I. \\\n    --go_out . --go-grpc_out . \\\n    --grpc-gateway_out . \\\n    --openapiv2_out . \\\n    --openapiv2_opt use_go_templates=true \\\n    path/to/my/proto/v1/myproto.proto\n```\n\n#### Example proto file\n\nExample of a proto file with Go templates. This proto file imports documentation from another file, `tables.md`:\n\n```protobuf\nservice LoginService {\n    // Login\n    //\n    // {{.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.\n    // It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n    //\n    // {{import \"tables.md\"}}\n    rpc Login (LoginRequest) returns (LoginReply) {\n        option (google.api.http) = {\n            post: \"/v1/example/login\"\n            body: \"*\"\n        };\n    }\n}\n\nmessage LoginRequest {\n    // The entered username\n    string username = 1;\n    // The entered password\n    string password = 2;\n}\n\nmessage LoginReply {\n    // Whether you have access or not\n    bool access = 1;\n}\n```\n\nThe content of `tables.md`:\n\n```markdown\n## {{.RequestType.Name}}\n| Field ID    | Name      | Type                                                       | Description                  |\n| ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | {{range .RequestType.Fields}}\n| {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\n## {{.ResponseType.Name}}\n| Field ID    | Name      | Type                                                       | Description                  |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}\n| {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n```\n\n### OpenAPI output\n\n#### SwaggerUI\n\nThis is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/).\n\n![Screenshot OpenAPI file in SwaggerUI](../../assets/images/gotemplates/swaggerui.png)\n\n#### Postman\n\nThis is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/).\n\n![Screenshot OpenAPI file in Postman](../../assets/images/gotemplates/postman.png)\n\nFor 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).\n\n### Using custom values\n\nCustom values can be specified in the [Go templates](https://golang.org/pkg/text/template/) that generate your proto file comments.\n\nA use case might be to interpolate different external documentation URLs when rendering documentation for different environments.\n\n#### How to use it\n\nThe `use_go_templates` option has to be enabled as a prerequisite.\n\nProvide 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.\n\nSpecify the `go_template_args` option multiple times if needed.\n\n```sh\n--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\n...\n```\n\n#### Example script\n\nExample of a bash script with the `use_go_templates` flag set to true and custom template values set:\n\n```sh\n$ protoc -I. \\\n    --go_out . --go-grpc_out . \\\n    --grpc-gateway_out . \\\n    --openapiv2_out . \\\n    --openapiv2_opt use_go_templates=true \\\n    --openapiv2_opt go_template_args=environment=test1 \\\n    --openapiv2_opt go_template_args=environment_label=Test1 \\\n    path/to/my/proto/v1/myproto.proto\n```\n\n#### Example proto file\n\nExample of a proto file with Go templates and custom values:\n\n```protobuf\nservice LoginService {\n    // Login (Environment: {{arg \"environment_label\"}})\n    //\n    // {{.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.\n    // It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n    // This only works in the {{arg \"environment\"}} domain.\n    //\n    rpc Login (LoginRequest) returns (LoginReply) {\n        option (google.api.http) = {\n            post: \"/v1/example/login\"\n            body: \"*\"\n        };\n    }\n}\n```\n\n## Other plugin options\n\nA 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:\n\n```sh\n--openapiv2_out . --openapiv2_opt bar=baz,color=red\n```\n\nOr, with `buf` in `buf.gen.yaml`:\n\n```yaml\n  - name: openapiv2\n    out: foo\n    opt: bar=baz,color=red\n```\n\n### Merging output\n\nIf 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.\n\nTo merge disparate `.proto` inputs into a single OpenAPI file, use the `allow_merge` and `merge_file_name` options.\n\n`opt: allow_merge=true,merge_file_name=foo` will result in a single `foo.swagger.json`. Note that you may need to set\nthe [generation strategy](https://docs.buf.build/configuration/v1/buf-gen-yaml/#strategy) to `all` when merging many files:\n\n```yaml\n  - name: openapiv2\n    out: foo\n    strategy: all\n    opt: allow_merge=true,merge_file_name=foo\n```\n\n### Enums as integers\n\nTo generate enums as integers instead of strings, use `enums_as_ints`.\n\n`opt: enums_as_ints=true` will result in:\n\n\n```json\n{\n    \"name\": \"enumValue\",\n    \"description\": \" - Example enums\",\n    \"in\": \"query\",\n    \"required\": false,\n    \"type\": \"int\",\n    \"enum\": [\n        0,\n        1\n    ],\n    \"default\": 0\n},\n```\n\n### Omitting the default value of enums\n\nIf 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`.\nThis option also applies if enums_as_ints option is enalbled to generate enums as integer.\n\n`opt: omit_enum_default_value=true` will result in:\n\nInput Example:\n```\nenum enumValue {\n    UNKNOWN = 0;\n    FOO = 1;\n}\n```\n\nOutput json:\n```json\n{\n    \"name\": \"enumValue\",\n    \"description\": \" - Example enums\",\n    \"in\": \"query\",\n    \"required\": false,\n    \"type\": \"string\",\n    \"enum\": [\n        \"FOO\"\n    ]\n},\n```\n\n### Hiding fields, methods, services and enum values\n\nIf 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.\n\n`visibility_restriction_selectors` can be declared multiple times as an option to include multiple visibility restrictions in the output.\ne.g. if you are using `buf`:\n\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - visibility_restriction_selectors=PREVIEW\n      - visibility_restriction_selectors=INTERNAL\n```\n\nor with `protoc`\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=visibility_restriction_selectors=PREVIEW --openapiv2_opt=visibility_restriction_selectors=INTERNAL ./path/to/file.proto\n```\n\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n\nThese 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.\n\nNote: Annotations are only supported on Services, Methods, Fields and Enum Values.\n\n`opt: visibility_restriction_selectors=PREVIEW` will result in:\n\nInput Example:\n```protobuf\nservice Echo {\n    rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {\n        option (google.api.method_visibility).restriction = \"INTERNAL\";\n        option (google.api.http) = {\n            get: \"/v1/example/echo_internal\"\n        };\n    }\n    rpc EchoInternalAndPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {\n        option (google.api.method_visibility).restriction = \"INTERNAL,PREVIEW\";\n        option (google.api.http) = {\n            get: \"/v1/example/echo_internal_and_preview\"\n        };\n    }\n}\n\nmessage VisibilityRuleSimpleMessage {\n     enum VisibilityEnum {\n          UNSPECIFIED = 0;\n          VISIBLE = 1;\n          INTERNAL = 2 [(google.api.value_visibility).restriction = \"INTERNAL\"];\n          PREVIEW = 3 [(google.api.value_visibility).restriction = \"INTERNAL,PREVIEW\"];\n     }\n\n     string internal_field = 1 [(google.api.field_visibility).restriction = \"INTERNAL\"];\n     string preview_field = 2 [(google.api.field_visibility).restriction = \"INTERNAL,PREVIEW\"];\n     VisibilityEnum an_enum = 3;\n}\n```\n\nOutput json:\n```json\n{\n    \"paths\": {\n        \"/v1/example/echo_internal_and_preview\": {\n            \"get\": {\n                \"summary\": \"EchoInternalAndPreview is a internal and preview API that should be visible in the OpenAPI spec.\",\n                \"operationId\": \"VisibilityRuleEchoService_EchoInternalAndPreview\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"A successful response.\",\n                        \"schema\": {\n                        \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n                        }\n                    },\n                    \"default\": {\n                        \"description\": \"An unexpected error response.\",\n                        \"schema\": {\n                            \"$ref\": \"#/definitions/rpcStatus\"\n                        }\n                    }\n                },\n                \"parameters\": [\n                    {\n                        \"name\": \"previewField\",\n                        \"in\": \"query\",\n                        \"required\": false,\n                        \"type\": \"string\"\n                    },\n                    {\n                        \"name\": \"anEnum\",\n                        \"in\": \"query\",\n                        \"required\": false,\n                        \"type\": \"string\",\n                        \"enum\": [\n                            \"UNSPECIFIED\",\n                            \"VISIBLE\",\n                            \"PREVIEW\"\n                        ],\n                        \"default\": \"UNSPECIFIED\"\n                    }\n                ],\n                \"tags\": [\n                    \"VisibilityRuleEchoService\"\n                ]\n            }\n        }\n    }\n}\n```\n\nFor 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`:\n- [`visibility_restriction_selectors=PREVIEW`](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json)\n- [`visibility_restriction_selectors=INTERNAL`](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json)\n- [`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)\n- [Not set](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json)\n\n### Path parameters\n\nWhen 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.\n\nFor example, consider:\n```protobuf\nservice LibraryService {\n  rpc GetShelf(GetShelfRequest) returns (Shelf) {\n    option (google.api.http) = {\n      get: \"/v1/{name=shelves/*}\"\n    };\n  }\n  rpc GetBook(GetBookRequest) returns (Book) {\n    option (google.api.http) = {\n      get: \"/v1/{name=shelves/*/books/*}\"\n    };\n  }\n}\n\nmessage GetShelfRequest {\n  string name = 1;\n}\n\nmessage GetBookRequest {\n  string name = 1;\n}\n```\n\nThis will generate the following paths:\n- `/v1/{name}`\n- `/v1/{name_1}`\n\nTo override the path parameter names, annotate the field used as path parameter:\n```protobuf\nmessage GetShelfRequest {\n  string name = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {field_configuration: {path_param_name: \"shelfName\"}}];\n}\nmessage GetBookRequest {\n  string name = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {field_configuration: {path_param_name: \"bookName\"}}];\n}\n```\n\nThis will instead generate the following paths:\n- `/v1/{shelfName}`\n- `/v1/{bookName}`\n\nNote that path parameters in OpenAPI does not support values with `/`, as discussed in\n[Support for path parameters which can contain slashes #892](https://github.com/OAI/OpenAPI-Specification/issues/892),\nso tools as Swagger UI will URL encode any `/` provided as parameter value. A possible workaround for this is to write\na custom post processor for your OAS file to replace any path parameter with `/` into multiple parameters.\n\n#### Expand path parameters containing sub-path segments\n\nAlternative to the above, you can enable the `expand_slashed_path_patterns` compiler option to expand path parameters containing sub-path segments into the URI.\n\nFor example, consider:\n```protobuf\nrpc GetBook(GetBookRequest) returns (Book) {\n  option (google.api.http) = {\n    get: \"/v1/{name=publishers/*/books/*}\"\n  };\n}\n```\n\nWhere 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:\n\n```JSON\n{\n \"/v1/publishers/{publisher}/books/{book}\": {\n      \"get\": {\n        \"parameters\": [\n          {\n            \"name\": \"publisher\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n          },\n          {\n            \"name\": \"book\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n          }\n        ]\n      }\n    }\n}\n```\n\nThe 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.\n\nCaveats:\n\n- 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,\n- when the `expand_slashed_path_patterns` compiler flag is enabled, the [`path_param_name`](#path-parameters) field annotation is ignored.\n\n### Output format\n\nBy 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.\n\nFor example, if using `buf`:\n```yaml\n  - name: openapiv2\n    out: pkg\n    opt: output_format=yaml\n```\n\nInput example:\n```protobuf\nsyntax = \"proto3\";\n\npackage helloproto.v1;\noption go_package = \"helloproto/v1;helloproto\";\n\nimport \"google/api/annotations.proto\";\n\nservice EchoService {\n    rpc Hello(HelloReq) returns (HelloResp) {\n        option (google.api.http) = {\n            get: \"/api/hello\"\n        };\n    }\n}\n\nmessage HelloReq {\n    string name = 1;\n}\n\nmessage HelloResp {\n    string message = 1;\n}\n```\n\nOutput:\n```yaml\nswagger: \"2.0\"\ninfo:\n  title: helloproto/v1/example.proto\n  version: version not set\ntags:\n- name: EchoService\nconsumes:\n- application/json\nproduces:\n- application/json\npaths:\n  /api/hello:\n    get:\n      operationId: EchoService_Hello\n      responses:\n        \"200\":\n          description: A successful response.\n          schema:\n            $ref: '#/definitions/v1HelloResp'\n        default:\n          description: An unexpected error response.\n          schema:\n            $ref: '#/definitions/rpcStatus'\n      parameters:\n      - name: name\n        in: query\n        required: false\n        type: string\n      tags:\n      - EchoService\ndefinitions:\n  protobufAny:\n    type: object\n    properties:\n      '@type':\n        type: string\n    additionalProperties: {}\n  rpcStatus:\n    type: object\n    properties:\n      code:\n        type: integer\n        format: int32\n      message:\n        type: string\n      details:\n        type: array\n        items:\n          $ref: '#/definitions/protobufAny'\n  v1HelloResp:\n    type: object\n    properties:\n      message:\n        type: string\n```\n\n### Disable service tag generation\n\nBy 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`.\n\nFor example, if you are using `buf`:\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - disable_service_tags=true\n```\n\nor with `protoc`\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=disable_service_tags=true ./path/to/file.proto\n```\n\nInput example:\n```protobuf\nsyntax = \"proto3\";\n\npackage helloproto.v1;\noption go_package = \"helloproto/v1;helloproto\";\n\nimport \"google/api/annotations.proto\";\n\nservice EchoService {\n    rpc Hello(HelloReq) returns (HelloResp) {\n        option (google.api.http) = {\n            get: \"/api/hello\"\n        };\n    }\n}\n\nmessage HelloReq {\n    string name = 1;\n}\n\nmessage HelloResp {\n    string message = 1;\n}\n```\n\nOutput (tags object are not generated):\n```yaml\nswagger: \"2.0\"\ninfo:\n  title: helloproto/v1/example.proto\n  version: version not set\nconsumes:\n  - application/json\nproduces:\n  - application/json\npaths:\n  /api/hello:\n    get:\n      operationId: EchoService_Hello\n```\n\n### Disable default responses\n\nBy 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`.\n\n**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).\n\nFor example, if you are using `buf`:\n\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - disable_default_responses=true\n```\n\nor with `protoc`\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=disable_default_responses=true ./path/to/file.proto\n```\n\nInput example:\n\n```protobuf\nsyntax = \"proto3\";\n\npackage helloproto.v1;\n\nimport \"google/api/annotations.proto\";\nimport \"protoc-gen-openapiv2/options/annotations.proto\";\n\noption go_package = \"helloproto/v1;helloproto\";\n\nservice EchoService {\n  rpc Hello(HelloReq) returns (HelloResp) {\n    option (google.api.http) = {get: \"/api/hello\"};\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n      responses: {\n        key: \"201\",\n        value: {\n          description: \"Created\";\n          schema: {\n            json_schema: {ref: \".helloproto.v1.HelloResp\"}\n          }\n        }\n      };\n    };\n  }\n}\n\nmessage HelloReq {\n  string name = 1;\n}\n\nmessage HelloResp {\n  string message = 1;\n}\n```\n\nOutput (default response not generated):\n\n```yaml\nswagger: \"2.0\"\ninfo:\n  title: helloproto/v1/hello.proto\n  version: version not set\nconsumes:\n  - application/json\nproduces:\n  - application/json\npaths:\n  /api/hello:\n    get:\n      operationId: EchoService_Hello\n      responses:\n        \"201\":\n          description: Created\n          schema:\n            $ref: \"#/definitions/v1HelloResp\"\n      parameters:\n        - name: name\n          in: query\n          required: false\n          type: string\ndefinitions:\n  v1HelloResp:\n    type: object\n    properties:\n      message:\n        type: string\n```\n\n### Omit array item type when $ref is a sibling\n\nBy 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`.\n\n**Note**: This option only affects the generated OpenAPI specification and does not alter the behavior of the gateway itself.\n\nFor example, if you are using `buf`:\n\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - omit_array_item_type_when_ref_sibling=true\n```\n\nor with `protoc`\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=omit_array_item_type_when_ref_sibling=true ./path/to/file.proto\n```\n\nInput example:\n\n```protobuf\nsyntax = \"proto3\";\n\npackage example.v1;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"example/v1;example\";\n\nservice ExampleService {\n  rpc GetItems(GetItemsRequest) returns (GetItemsResponse) {\n    option (google.api.http) = {get: \"/api/items\"};\n  }\n}\n\nmessage GetItemsRequest {}\n\nmessage GetItemsResponse {\n  repeated Item items = 1;\n}\n\nmessage Item {\n  string id = 1;\n  string name = 2;\n}\n```\n\nOutput without the option (default behavior):\n\n```yaml\ndefinitions:\n  v1GetItemsResponse:\n    type: object\n    properties:\n      items:\n        type: array\n        items:\n          type: object  # This can violate strict no-$ref-siblings rule\n          $ref: \"#/definitions/v1Item\"\n  v1Item:\n    type: object\n    properties:\n      id:\n        type: string\n      name:\n        type: string\n```\n\nOutput with `omit_array_item_type_when_ref_sibling=true`:\n\n```yaml\ndefinitions:\n  v1GetItemsResponse:\n    type: object\n    properties:\n      items:\n        type: array\n        items:\n          $ref: \"#/definitions/v1Item\"  # type: object is omitted\n  v1Item:\n    type: object\n    properties:\n      id:\n        type: string\n      name:\n        type: string\n```\n\n### Custom HTTP Header Request Parameters\n\nBy 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.\n\n**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`.\n\n```protobuf\nsyntax = \"proto3\";\n\npackage helloproto.v1;\n\nimport \"google/api/annotations.proto\";\nimport \"protoc-gen-openapiv2/options/annotations.proto\";\n\noption go_package = \"helloproto/v1;helloproto\";\n\nservice EchoService {\n  rpc Hello(HelloReq) returns (HelloResp) {\n    option (google.api.http) = {get: \"/api/hello\"};\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n      parameters: {\n        headers: {\n          name: \"X-Foo\";\n          description: \"Foo Header\";\n          type: STRING,\n          required: true;\n        };\n        headers: {\n          name: \"X-Bar\";\n          description: \"Bar Header\";\n          type: NUMBER,\n        };\n      };\n    };\n  }\n}\n\nmessage HelloReq {\n  string name = 1;\n}\n\nmessage HelloResp {\n  string message = 1;\n}\n```\n\nOutput:\n\n```yaml\nswagger: \"2.0\"\ninfo:\n  title: helloproto/v1/hello.proto\n  version: version not set\nconsumes:\n  - application/json\nproduces:\n  - application/json\npaths:\n  /api/hello:\n    get:\n      operationId: Hello\n      responses:\n        \"200\":\n          description: A successful response.\n          schema:\n            $ref: \"#/definitions/helloproto.v1.HelloResp\"\n      parameters:\n        - name: name\n          in: query\n          required: false\n          type: string\n        - name: X-Foo\n          description: Foo Header\n          in: header\n          required: true\n          type: string\n        - name: X-Bar\n          description: Bar Header\n          in: header\n          required: false\n          type: number\ndefinitions:\n  helloproto.v1.HelloResp:\n    type: object\n    properties:\n      message:\n        type: string\n```\n\n### Ignore comments\n\nIf 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`.\n\n**Note**: `ignore_comments` and `use_go_templates` are mutually exclusive and cannot be enabled at the same time.\n\nIf you are using `buf`:\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - ignore_comments=true\n```\n\nor with `protoc`:\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=ignore_comments=true ./path/to/file.proto\n```\n\n### Removing internal comments\n\nIf 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.\nIf 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).\n\n### Preserve RPC Path Order\n\nBy default, generated Swagger files emit paths found in proto files in alphabetical order. If you would like to \npreserve 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.\n\nThis option will also ensure path ordering is preserved in the following scenarios:\n\n1. When using additional bindings, paths will preserve their ordering within an RPC.\n2. When using multiple services, paths will preserve their ordering between RPCs in the whole protobuf file.\n3. When merging protobuf files, paths will preserve their ordering depending on the order of files specified on the command line.\n\n`preserve_rpc_order` can be passed via the `protoc` CLI:\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=preserve_rpc_order=true ./path/to/file.proto\n```\n\nOr, with `buf` in `buf.gen.yaml`:\n\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - preserve_rpc_order=true\n```\n\n### Enable RPC deprecation\n\nWith `enable_rpc_deprecation` option you can deprecate openapi method using standard method's option. Allowed values are: `true`, `false`.\n\nFor example, if you are using `buf`:\n\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - enable_rpc_deprecation=true\n```\n\nor with `protoc`\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=enable_rpc_deprecation=true ./path/to/file.proto\n```\n\nInput example:\n\n```protobuf\nsyntax = \"proto3\";\n\npackage helloproto.v1;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"helloproto/v1;helloproto\";\n\nservice EchoService {\n  rpc Hello(HelloReq) returns (HelloResp) {\n    option deprecated = true;\n    option (google.api.http) = {get: \"/api/hello\"};\n  }\n}\n\nmessage HelloReq {\n  string name = 1;\n}\n\nmessage HelloResp {\n  string message = 1;\n}\n```\n\nOutput:\n\n```yaml\nswagger: \"2.0\"\ninfo:\n  title: helloproto/v1/example.proto\n  version: version not set\ntags:\n  - name: EchoService\nconsumes:\n  - application/json\nproduces:\n  - application/json\npaths:\n  /api/hello:\n    get:\n      operationId: EchoService_Hello\n      responses:\n        \"200\":\n          description: A successful response.\n          schema:\n            $ref: '#/definitions/v1HelloResp'\n        default:\n          description: An unexpected error response.\n          schema:\n            $ref: '#/definitions/rpcStatus'\n      parameters:\n        - name: name\n          in: query\n          required: false\n          type: string\n      tags:\n        - EchoService\n      deprecated: true\ndefinitions:\n  protobufAny:\n    type: object\n    properties:\n      '@type':\n        type: string\n    additionalProperties: {}\n  rpcStatus:\n    type: object\n    properties:\n      code:\n        type: integer\n        format: int32\n      message:\n        type: string\n      details:\n        type: array\n        items:\n          type: object\n          $ref: '#/definitions/protobufAny'\n  v1HelloResp:\n    type: object\n    properties:\n      message:\n        type: string\n```\n\n### Deprecating parameters\n\nWith the `enable_field_deprecation` option, OpenAPI parameters will be marked as deprecated based on the protobuf `deprecated` field option. Allowed values are: `true`, `false`.\n\nFor example, if you are using `buf`:\n\n```yaml\nversion: v1\nplugins:\n  - name: openapiv2\n    out: .\n    opt:\n      - enable_field_deprecation=true\n```\n\nor with `protoc`\n\n```sh\nprotoc --openapiv2_out=. --openapiv2_opt=enable_field_deprecation=true ./path/to/file.proto\n```\n\nInput example:\n\n```protobuf\nmessage SearchRequest {\n  string legacy_filter = 1 [deprecated = true];\n  string query = 2;\n}\n```\n\nOutput (excerpt):\n\n```yaml\npaths:\n  /v1/search:\n    get:\n      parameters:\n        - name: legacy_filter\n          in: query\n          required: false\n          type: string\n          deprecated: true\n        - name: query\n          in: query\n          required: false\n          type: string\n```\n\nIf you prefer to leave the protobuf definition active, you can use the `field_configuration.deprecated` annotation on the `openapiv2_field` option instead:\n\n```protobuf\nmessage SearchRequest {\n  string legacy_filter = 1 [\n    (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n      description: \"Legacy filter syntax. Prefer the new 'query' field.\"\n      field_configuration: { deprecated: true }\n    }\n  ];\n  string query = 2;\n}\n```\n\nThis keeps the protobuf field untouched but still emits a deprecated parameter in the generated spec:\n\n```yaml\npaths:\n  /v1/search:\n    get:\n      parameters:\n        - name: legacy_filter\n          in: query\n          required: false\n          type: string\n          description: Legacy filter syntax. Prefer the new 'query' field.\n          deprecated: true\n        - name: query\n          in: query\n          required: false\n          type: string\n```\n\nIf 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.\n\n\n{% endraw %}\n"
  },
  {
    "path": "docs/docs/mapping/customizing_your_gateway.md",
    "content": "---\nlayout: default\ntitle: Customizing your gateway\nnav_order: 5\nparent: Mapping\n---\n\n# Customizing your gateway\n\n## Message serialization\n\n### Custom serializer\n\nYou might want to serialize request/response messages in MessagePack instead of JSON, for example:\n\n1. Write a custom implementation of\n   [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler).\n   See [Custom marshalers](custom_marshalers.md) for some additional\n   customization options.\n\n2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption).\n\n   e.g.\n\n   ```go\n   var m your.MsgPackMarshaler\n   mux := runtime.NewServeMux(\n   \truntime.WithMarshalerOption(\"application/x-msgpack\", m),\n   )\n   ```\n\nYou can see [the default implementation for JSON](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/runtime/marshal_jsonpb.go) for reference.\n\n### Using proto names in JSON\n\nThe protocol buffer compiler generates camelCase JSON tags that are used by default.\nIf you want to use the exact case used in the proto files, set `UseProtoNames: true`:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{\n\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\tUseProtoNames: true,\n\t\t},\n\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\tDiscardUnknown: true,\n\t\t},\n\t}),\n)\n```\n\n### Pretty-print JSON responses when queried with ?pretty\n\nYou can have Elasticsearch-style `?pretty` support in your gateway's endpoints as follows:\n\n1. 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.\n\n2. Register a pretty-printing marshaler for that MIME code.\n\nFor example:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMarshalerOption(\"application/json+pretty\", &runtime.JSONPb{\n\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\tIndent: \"  \",\n\t\t\tMultiline: true, // Optional, implied by presence of \"Indent\".\n\t\t},\n\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\tDiscardUnknown: true,\n\t\t},\n\t}),\n)\nprettier := func(h http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t// checking Values as map[string][]string also catches ?pretty and ?pretty=\n\t\t// r.URL.Query().Get(\"pretty\") would not.\n\t\tif _, ok := r.URL.Query()[\"pretty\"]; ok {\n\t\t\tr.Header.Set(\"Accept\", \"application/json+pretty\")\n\t\t}\n\t\th.ServeHTTP(w, r)\n\t})\n}\nhttp.ListenAndServe(\":8080\", prettier(mux))\n```\n\nNow, either when passing the header `Accept: application/json+pretty` or appending `?pretty` to your HTTP endpoints, the response will be pretty-printed.\n\nNote 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.\n\n## Customize unmarshaling per Content-Type\n\nHaving different unmarshaling options per Content-Type is as easy as configuring a custom marshaler:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMarshalerOption(\"application/json+strict\", &runtime.JSONPb{\n\t\tUnmarshalOptions: &protojson.UnmarshalOptions{\n\t\t\tDiscardUnknown: false, // explicit \"false\", &protojson.UnmarshalOptions{} would have the same effect\n\t\t},\n\t}),\n)\n```\n\nNote: 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.\n\n## Mapping from HTTP request headers to gRPC client metadata\n\nYou 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:\n\n1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc).\n\n2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher)\n\n   e.g.\n\n   ```go\n   func CustomMatcher(key string) (string, bool) {\n   \tswitch key {\n   \tcase \"X-Custom-Header1\":\n   \t\treturn key, true\n   \tcase \"X-Custom-Header2\":\n   \t\treturn \"custom-header2\", true\n   \tdefault:\n   \t\treturn key, false\n   \t}\n   }\n\n   mux := runtime.NewServeMux(\n   \truntime.WithIncomingHeaderMatcher(CustomMatcher),\n   )\n   ```\n\nTo 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:\n\n```go\nfunc CustomMatcher(key string) (string, bool) {\n\tswitch key {\n\tcase \"X-User-Id\":\n\t\treturn key, true\n\tdefault:\n\t\treturn runtime.DefaultHeaderMatcher(key)\n\t}\n}\n```\n\nIt will work with both:\n\n```sh\n$ curl --header \"x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30\" ...\n```\n\nand\n\n```sh\n$ curl --header \"X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30\" ...\n```\n\nTo access this header on gRPC server side use:\n\n```go\nuserID := \"\"\nif md, ok := metadata.FromIncomingContext(ctx); ok {\n\tif uID, ok := md[\"x-user-id\"]; ok {\n\t\tuserID = strings.Join(uID, \",\")\n\t}\n}\n```\n\n## Mapping from gRPC server metadata to HTTP response headers\n\nUse [`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:\n\n```go\nif appendCustomHeader {\n\tgrpc.SendHeader(ctx, metadata.New(map[string]string{\n\t\t\"x-custom-header1\": \"value\",\n\t}))\n}\n```\n\n## Mutate response messages or set response headers\n\n### Set HTTP headers\n\nYou 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.\n\n1. Write a filter function.\n\n```go\nfunc myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) error {\n\tt, ok := resp.(*externalpb.Tokenizer)\n\tif ok {\n\t\tw.Header().Set(\"X-My-Tracking-Token\", t.Token)\n\t\tt.Token = \"\"\n\t}\n\treturn nil\n}\n```\n\n2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption)\n\ne.g.\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithForwardResponseOption(myFilter),\n)\n```\n\n### Controlling HTTP response status codes\n\nTo have the most control over the HTTP response status codes, you can use custom metadata.\n\nWhile handling the rpc, set the intended status code:\n\n```go\n_ = grpc.SetHeader(ctx, metadata.Pairs(\"x-http-code\", \"401\"))\n```\n\nNow, before sending the HTTP response, we need to check for this metadata pair and explicitly set the status code for the response if found.\nTo do so, create a function and hook it into the gRPC-Gateway as a Forward Response Option.\n\nThe function looks like this:\n\n```go\nfunc httpResponseModifier(ctx context.Context, w http.ResponseWriter, p proto.Message) error {\n\tmd, ok := runtime.ServerMetadataFromContext(ctx)\n\tif !ok {\n\t\treturn nil\n\t}\n\n\t// set http status code\n\tif vals := md.HeaderMD.Get(\"x-http-code\"); len(vals) > 0 {\n\t\tcode, err := strconv.Atoi(vals[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// delete the headers to not expose any grpc-metadata in http response\n\t\tdelete(md.HeaderMD, \"x-http-code\")\n\t\tdelete(w.Header(), \"Grpc-Metadata-X-Http-Code\")\n\t\tw.WriteHeader(code)\n\t}\n\n\treturn nil\n}\n```\n\nAnd it gets hooked into the gRPC-Gateway with:\n\n```go\ngwMux := runtime.NewServeMux(\n\truntime.WithForwardResponseOption(httpResponseModifier),\n)\n```\n\nAdditional responses can be added to the Protocol Buffer definitions to match the new status codes:\n\n```protobuf\nservice Greeter {\n  rpc SayHello (HelloRequest) returns (HelloReply) {\n    option (google.api.http) = {\n      post: \"/v1/example/echo\"\n      body: \"*\"\n    };\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n      responses: {\n        key: \"201\"\n        value: {\n          description: \"A successful response.\"\n          schema: {\n            json_schema: {\n              ref: \".mypackage.HelloReply\"\n            }\n          }\n        }\n      }\n    };\n  }\n\n  rpc SayGoodbye (GoodbyeRequest) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      delete: \"/v1/example/echo/{id}\"\n    };\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n      responses: {\n        key: \"204\"\n        value: {\n          description: \"A successful response.\"\n          schema: {}\n        }\n      }\n    };\n  }\n}\n```\n\n### Fully Overriding Custom HTTP Responses\n\nTo fully override custom HTTP responses, you can use both a Forward Response Option and a Custom Marshaler.\n\nFor example with proto response message as:\n\n```proto\nmessage CreateUserResponse {\n  string name = 1;\n}\n```\n\nThe default HTTP response:\n\n```json5\nHTTP 200 OK\nContent-Type: application/json\n\n{\"name\":\"John Doe\"}\n```\n\nBut you want to return a `201 Created` status code along with a custom response structure:\n\n```json5\nHTTP 201 Created\nContent-Type: application/json\n\n{\"success\":true,\"data\":{\"name\":\"John Doe\"}}\n```\n\nFirst, set up the gRPC-Gateway with the custom options:\n\n```go\nmux := runtime.NewServeMux(\n  runtime.WithForwardResponseOption(setStatus),\n  runtime.WithForwardResponseRewriter(responseEnvelope),\n)\n```\n\nDefine the `setStatus` function to handle specific response types:\n\n```go\nfunc setStatus(ctx context.Context, w http.ResponseWriter, m protoreflect.ProtoMessage) error {\n  switch v := m.(type) {\n  case *pb.CreateUserResponse:\n    w.WriteHeader(http.StatusCreated)\n  }\n  // keep default behavior\n  return nil\n}\n```\n\nDefine the `responseEnvelope` function to rewrite the response to a different type/shape:\n\n```go\nfunc responseEnvelope(_ context.Context, response proto.Message) (interface{}, error) {\n  switch v := response.(type) {\n  case *pb.CreateUserResponse:\n    // wrap the response in a custom structure\n    return map[string]any{\n      \"success\": true,\n      \"data\":    response,\n    }, nil\n  }\n  return response, nil\n}\n```\n\nIn this setup:\n\n- The `setStatus` function intercepts the response and uses its type to send `201 Created` only when it sees `*pb.CreateUserResponse`.\n- The `responseEnvelope` function ensures that specific types of responses are wrapped in a custom structure before being sent to the client.\n\n❗ **NOTE:** Using `WithForwardResponseRewriter` is partially incompatible with OpenAPI annotations. Because response\nrewriting happens at runtime, it is not possible to represent that in `protoc-gen-openapiv2` output.\n\n## Error handler\n\nTo override error handling for a `*runtime.ServeMux`, use the\n`runtime.WithErrorHandler` option. This will configure all unary error\nresponses to pass through this error handler.\n\n## Stream Error Handler\n\nThe error handler described in the previous section applies only to RPC methods that have a unary response.\n\nWhen 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).\n\nBecause 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:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithStreamErrorHandler(handleStreamError),\n)\n```\n\nThe 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.\n\nSo 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.\n\nHere's an example custom handler:\n\n```go\n// handleStreamError overrides default behavior for computing an error\n// message for a server stream.\n//\n// It uses a default \"502 Bad Gateway\" HTTP code, only emits \"safe\"\n// messages and does not set the details field (so it will\n// be omitted from the resulting JSON object that is sent to client).\nfunc handleStreamError(ctx context.Context, err error) *status.Status {\n\tcode := codes.Internal\n\tmsg := \"unexpected error\"\n\tif s, ok := status.FromError(err); ok {\n\t\tcode = s.Code()\n\t\t// default message, based on the gRPC status\n\t\tmsg = s.Message()\n\t\t// see if error details include \"safe\" message to send\n\t\t// to external callers\n\t\tfor _, msg := range s.Details() {\n\t\t\tif safe, ok := msg.(*SafeMessage); ok {\n\t\t\t\tmsg = safe.Text\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn status.Errorf(code, msg)\n}\n```\n\nIf 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.\n\n## Controlling path parameter unescaping\n\n<!-- TODO(v3): Remove comments about default behavior -->\n\nBy 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 `/`.\n\nTo 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:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithUnescapingMode(runtime.UnescapingModeAllExceptReserved),\n)\n```\n\nFor 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.\n\nTo replicate the default V2 escaping behavior but also allow passing pct-encoded `/` characters, the ServeMux can be configured as in the example below:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithUnescapingMode(runtime.UnescapingModeAllCharacters),\n)\n```\n\n## Routing Error handler\n\nTo override the error behavior when `*runtime.ServeMux` was not able to serve the request due to routing issues, use the `runtime.WithRoutingErrorHandler` option.\n\nThis will configure all HTTP routing errors to pass through this error handler. The default behavior is to map HTTP error codes to gRPC errors.\n\nHTTP statuses and their mappings to gRPC statuses:\n\n- HTTP `404 Not Found` -> gRPC `5 NOT_FOUND`\n- HTTP `405 Method Not Allowed` -> gRPC `12 UNIMPLEMENTED`\n- HTTP `400 Bad Request` -> gRPC `3 INVALID_ARGUMENT`\n\nThis method is not used outside of the initial routing.\n\n### Customizing Routing Errors\n\nIf 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:\n\n```go\nfunc handleRoutingError(ctx context.Context, mux *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, r *http.Request, httpStatus int) {\n\tif httpStatus != http.StatusMethodNotAllowed {\n\t\truntime.DefaultRoutingErrorHandler(ctx, mux, marshaler, w, r, httpStatus)\n\t\treturn\n\t}\n\n\t// Use HTTPStatusError to customize the DefaultHTTPErrorHandler status code\n\terr := &runtime.HTTPStatusError{\n\t\tHTTPStatus: httpStatus,\n\t\tErr:        status.Error(codes.Unimplemented, http.StatusText(httpStatus)),\n\t}\n\n\truntime.DefaultHTTPErrorHandler(ctx, mux, marshaler, w, r, err)\n}\n```\n\nTo use this routing error handler, construct the mux as follows:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithRoutingErrorHandler(handleRoutingError),\n)\n```\n\n## Disabling X-HTTP-Method-Override\n\nBy default, the gRPC-Gateway allows clients to send a `POST` request with an\n`X-HTTP-Method-Override` header to override the HTTP method. For example, a\n`POST` request with `X-HTTP-Method-Override: GET` will be routed as if it were\na `GET` request. This is part of the path length fallback behavior, which\nallows HTML forms (which only support `GET` and `POST`) to call other methods.\n\nThis can lead to HTTP method confusion when your gateway sits behind a Web\nApplication Firewall (WAF) or reverse proxy that enforces method-based access\ncontrols. For example, if a WAF is configured to only allow `POST` requests to\na particular endpoint, a client could send a `POST` with\n`X-HTTP-Method-Override: DELETE` and the gateway would route the request to the\n`DELETE` handler, bypassing the WAF's intended restrictions. The WAF sees a\n`POST` request, but the gateway processes it as a `DELETE`.\n\nTo disable the `X-HTTP-Method-Override` header handling, use the\n`WithDisableHTTPMethodOverride` option:\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithDisableHTTPMethodOverride(),\n)\n```\n\nThis disables only the method override header. The path length fallback (routing\na `POST` with `Content-Type: application/x-www-form-urlencoded` to a matching\n`GET` handler) remains available unless separately disabled with\n`WithDisablePathLengthFallback`.\n"
  },
  {
    "path": "docs/docs/mapping/examples.md",
    "content": "---\nlayout: default\ntitle: Examples\nnav_order: 0\nparent: Mapping\n---\n\n# Examples\n\nExamples are available under `examples/internal` directory.\n\n- [`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):\n  protobuf service definitions.\n- [`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):\n  generated Go service stubs and types.\n- [`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):\n  generated gRPC-Gateway clients.\n- [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/unannotated_echo_service.yaml):\n  gRPC API Configuration for `unannotated_echo_service.proto`.\n- [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/server/main.go):\n  service implementation.\n- [`main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/gateway/main.go):\n  entrypoint of the generated reverse proxy.\n\nTo use the same port for custom HTTP handlers (e.g. serving `swagger.json`),\ngRPC-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\n[blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)).\n"
  },
  {
    "path": "docs/docs/mapping/grpc_api_configuration.md",
    "content": "---\nlayout: default\ntitle: gRPC API Configuration\nnav_order: 3\nparent: Mapping\n---\n\n# gRPC API Configuration\n\nIn 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.\n\ngRPC-Gateway supports 2 ways of dealing with these situations:\n\n- [gRPC API Configuration](#grpc-api-configuration)\n  - [`generate_unbound_methods`](#generate_unbound_methods)\n  - [Using an external configuration file](#using-an-external-configuration-file)\n    - [Usage of gRPC API Configuration YAML files](#usage-of-grpc-api-configuration-yaml-files)\n\n## `generate_unbound_methods`\n\nProviding 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:\n\n- HTTP method is `POST`\n- URI path is built from the service's name and method: `/<fully qualified service name>/<method name>` (e.g.: `/my.package.EchoService/Echo`)\n- HTTP body is the serialized protobuf message.\n\nNOTE: the same option is also supported by the `gen-openapiv2` plugin.\n\n## Using an external configuration file\n\nGoogle Cloud Platform offers a way to do this for services\nhosted 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.\n\ngRPC-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.\n\nOpenAPI 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.\n\n### Usage of gRPC API Configuration YAML files\n\nThe following is equivalent to the basic [`README.md`](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/README.md#usage) example but without direct\nannotation for gRPC-Gateway in the proto file. Only some steps require minor changes to use a gRPC API Configuration YAML file instead:\n\n1. Define your service in gRPC as usual\n\n   your_service.proto:\n\n   ```protobuf\n   syntax = \"proto3\";\n   package your.service.v1;\n   option go_package = \"github.com/yourorg/yourprotos/gen/go/your/service/v1\";\n   message StringMessage {\n     string value = 1;\n   }\n\n   service YourService {\n     rpc Echo(StringMessage) returns (StringMessage) {}\n   }\n   ```\n\n2. Instead of annotating the proto file in this step leave it untouched\n   and create a `your_service.yaml` with the following content:\n\n   ```yaml\n   type: google.api.Service\n   config_version: 3\n\n   http:\n     rules:\n       - selector: your.service.v1.YourService.Echo\n         post: /v1/example/echo\n         body: \"*\"\n   ```\n\n   Use a [linter](http://www.yamllint.com/) to validate your YAML.\n\n3. Generate gRPC stub as before\n\n   ```sh\n   protoc -I . \\\n     --go_out ./gen/go/ \\\n     --go_opt paths=source_relative \\\n     --go-grpc_out ./gen/go/ \\\n     --go-grpc_opt paths=source_relative \\\n     your/service/v1/your_service.proto\n   ```\n\nIt will generate a stub file with path `./gen/go/your/service/v1/your_service.pb.go`.\n\n4. Implement your service in gRPC as usual\n\n5. Generate the reverse-proxy. Here we have to pass the path to\n   the `your_service.yaml` in addition to the proto file:\n\n   ```sh\n   protoc -I . \\\n     --grpc-gateway_out ./gen/go \\\n     --grpc-gateway_opt paths=source_relative \\\n     --grpc-gateway_opt grpc_api_configuration=path/to/your_service.yaml \\\n     your/service/v1/your_service.proto\n   ```\n\n   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.\n\n   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.\n\n   ```\n   protoc -I . \\\n     --grpc-gateway_out ./gen/go \\\n     --grpc-gateway_opt paths=source_relative \\\n     --grpc-gateway_opt standalone=true \\\n     --grpc-gateway_opt grpc_api_configuration=path/to/your_service.yaml \\\n     your/service/v1/your_service.proto\n   ```\n\n6. Generate the optional your_service.swagger.json\n\n   ```sh\n   protoc -I . --openapiv2_out ./gen/go \\\n     --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \\\n     your/service/v1/your_service.proto\n   ```\n\n   or using an OpenAPI configuration file\n\n   ```sh\n   protoc -I . --openapiv2_out ./gen/go \\\n     --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \\\n     --openapiv2_opt openapi_configuration=path/to/your_service_swagger.yaml \\\n     your/service/v1/your_service.proto\n   ```\n\n   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).\n\n   ```sh\n   protoc -I . --openapiv2_out ./gen/go \\\n     --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \\\n     your/service/v1/your_service.proto\n   ```\n\nAll 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.\n"
  },
  {
    "path": "docs/docs/mapping/httpbody_messages.md",
    "content": "---\nlayout: default\ntitle: HttpBody Messages\nnav_order: 1\nparent: Mapping\n---\n\n# HttpBody Messages\n\nThe [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!\n\n## Example Usage\n\n1. Define your service in gRPC with an httpbody response message\n\n```protobuf\nimport \"google/api/httpbody.proto\";\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/empty.proto\";\n\nservice HttpBodyExampleService {\n\trpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) {\n\t\toption (google.api.http) = {\n\t\t\tget: \"/helloworld\"\n\t\t};\n\t}\n\trpc Download(google.protobuf.Empty) returns (stream google.api.HttpBody) {\n\t\toption (google.api.http) = {\n\t\t\tget: \"/download\"\n\t\t};\n\t}\n}\n```\n\n3. Generate gRPC and reverse-proxy stubs and implement your service.\n\n## Example service implementation\n\n```go\nfunc (*HttpBodyExampleService) Helloworld(ctx context.Context, in *empty.Empty) (*httpbody.HttpBody, error) {\n\treturn &httpbody.HttpBody{\n\t\tContentType: \"text/html\",\n\t\tData:        []byte(\"Hello World\"),\n\t}, nil\n}\n\nfunc (HttpBodyExampleService) Download(_ *empty.Empty, stream HttpBodyExampleService_DownloadServer) error {\n\tmsgs := []*httpbody.HttpBody{\n\t\t{\n\t\t\tContentType: \"text/html\",\n\t\t\tData:        []byte(\"Hello 1\"),\n\t\t},\n\t\t{\n\t\t\tContentType: \"text/html\",\n\t\t\tData:        []byte(\"Hello 2\"),\n\t\t},\n\t}\n\n\tfor _, msg := range msgs {\n\t\tif err := stream.Send(msg); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n```\n"
  },
  {
    "path": "docs/docs/mapping/index.md",
    "content": "---\nlayout: default\ntitle: Mapping\nnav_order: 2\nhas_children: true\n---\n"
  },
  {
    "path": "docs/docs/mapping/patch_feature.md",
    "content": "---\nlayout: default\ntitle: Patch feature\nnav_order: 2\nparent: Mapping\n---\n\n# Patch feature\n\nThe HTTP PATCH method allows a resource to be partially updated.\n\nIf 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 `\"*\"`\n\nThere are two scenarios:\n\n- The FieldMask is hidden from the REST request as per the\n  [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the\n  [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. \n  - By default this feature is enabled, if you need to disable it, you can use the plugin option `allow_patch_feature=false`. \n  - Note: The same option is supported by the `protoc-gen-openapiv2` plugin.\n- 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.\n\n## Example Usage\n\n1. Create a PATCH request.\n\n   The PATCH request needs to include the message and the update mask.\n\n   ```protobuf\n   // UpdateV2Request request for update includes the message and the update mask\n   message UpdateV2Request {\n    ABitOfEverything abe = 1;\n    google.protobuf.FieldMask update_mask = 2;\n   }\n   ```\n\n2. Define your service in gRPC\n\n   If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body.\n\n   ```protobuf\n   rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      put: \"/v2/example/a_bit_of_everything/{abe.uuid}\"\n      body: \"abe\"\n      additional_bindings {\n        patch: \"/v2/example/a_bit_of_everything/{abe.uuid}\"\n        body: \"abe\"\n      }\n    };\n   }\n   ```\n\n   If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message.\n\n   ```protobuf\n   rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      patch: \"/v2a/example/a_bit_of_everything/{abe.uuid}\"\n      body: \"*\"\n    };\n   }\n   ```\n\n3. Generate gRPC and reverse-proxy stubs and implement your service.\n\n## cURL examples\n\nIn 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.\n\n```sh\n$ curl \\\n  --data '{\"stringValue\": \"strprefix/foo\"}' \\\n  -X PATCH \\\n  http://address:port/v2/example/a_bit_of_everything/1\n```\n\nIf 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.\n\n```sh\n$ curl \\\n  --data '{\"abe\":{\"singleNested\":{\"amount\":457},\"stringValue\":\"some value that will not get updated because not in the field mask\"},\"updateMask\":\"singleNested\"}}' \\\n  -X PATCH \\\n  http://address:port/v2a/example/a_bit_of_everything/1\n```\n"
  },
  {
    "path": "docs/docs/mapping/using_ref_with_responses.md",
    "content": "# Using arbitrary messages in response description\n\nAssuming a protobuf file of the structure\n\n```protobuf\nsyntax = \"proto3\";\n\npackage example.service.v1;\n\nimport \"protoc-gen-openapiv2/options/annotations.proto\";\n\nservice GenericService {\n  rpc GenericRPC(GenericRPCRequest) returns (GenericRPCResponse);\n}\n\nmessage GenericRPCRequest {\n  string id = 1;\n}\n\nmessage GenericRPCResponse {\n  string result = 1;\n}\n```\n\nIf you want your OpenAPI document to include a custom response for all RPCs defined in this protobuf file, you can add the following:\n\n```protobuf\noption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n  responses: {\n    key: \"400\"\n    value: {\n      description: \"Returned when the request is malformed.\"\n      schema: {\n        json_schema: {ref: \".example.service.v1.GenericResponse\"} // Must match the fully qualified name of the message\n      }\n    }\n  }\n};\n\nmessage GenericResponse {\n  repeated string resources = 1;\n  repeated string errors = 2;\n}\n```\n\nWhen generating, you will see the following response included in your OpenAPI document:\n\n```json\n\"400\": {\n  \"description\": \"Returned when the request is malformed.\",\n  \"schema\": {\n    \"$ref\": \"#/definitions/v1GenericResponse\"\n  }\n},\n```\n\nThe annotation can also be specified per-rpc."
  },
  {
    "path": "docs/docs/operations/annotated_context.md",
    "content": "---\nlayout: default\ntitle: Extracting the HTTP path pattern for a request\nnav_order: 4\nparent: Operations\n---\n\n# Extracting the HTTP path pattern for a request\n\nIt 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.\n\n## Get HTTP Path pattern\n1. Define the HTTP path in the proto annotation. For example:\n\n```proto\nsyntax = \"proto3\";\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\n\nservice LoginService {\n  rpc Login (LoginRequest) returns (LoginReply) {\n    option (google.api.http) = {\n        post: \"/v1/example/login\"\n        body: \"*\"\n    };\n  }\n}\n\nmessage LoginRequest {}\n\nmessage LoginReply {}\n```\n\n2. At runtime, get the HTTP path pattern from the annotated context, for example using the `WithMetadata` function.\nYou can pass data to your backend by adding them to the gRPC metadata or push them to a metrics server.\n\n```go\nmux := runtime.NewServeMux(\n\truntime.WithMetadata(func(ctx context.Context, r *http.Request) metadata.MD {\n\t\tmd := make(map[string]string)\n\t\tif method, ok := runtime.RPCMethod(ctx); ok {\n\t\t\tmd[\"method\"] = method // /grpc.gateway.examples.internal.proto.examplepb.LoginService/Login\n\t\t}\n\t\tif pattern, ok := runtime.HTTPPathPattern(ctx); ok {\n\t\t\tmd[\"pattern\"] = pattern // /v1/example/login\n\t\t}\n\t\treturn metadata.New(md)\n\t}),\n)\n```"
  },
  {
    "path": "docs/docs/operations/aws_gateway_integration.md",
    "content": "---\nlayout: default\ntitle: AWS gateway integration\nnav_order: 3\nparent: Operations\n---\n\n# AWS gateway integration\n\n## Import OpenAPI documentation into AWS API Gateway\n\nThe 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).\n\nHere are some tips to consider when importing the documentation:\n\n1. Remove any circular dependencies (these aren't supported by the parser).\n2. Remove security-related annotations (These annotations aren't well supported by the parser).\n3. 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.\n4. API gateway errors aren't great, but you can use this [page](https://apidevtools.org/swagger-parser/online/) for structure validation.\n"
  },
  {
    "path": "docs/docs/operations/health_check.md",
    "content": "---\nlayout: default\ntitle: Health check\nnav_order: 1\nparent: Operations\n---\n\n# Health check\n\n## With the [gRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md)\n\nTo use the gRPC health checking protocol you must add the two health checking methods, `Watch` and `Check`.\n\n## Registering the health server\n\n1. Add `google.golang.org/grpc/health/grpc_health_v1` to your imports\n2. Register the health server with `grpc_health_v1.RegisterHealthServer(grpcServer, yourService)`\n\n## Adding the health check methods\n\n1. Check method\n\n```go\nfunc (s *serviceServer) Check(ctx context.Context, in *health.HealthCheckRequest) (*health.HealthCheckResponse, error) {\n\treturn &health.HealthCheckResponse{Status: health.HealthCheckResponse_SERVING}, nil\n}\n```\n\n2. Watch method\n\n```go\nfunc (s *serviceServer) Watch(in *health.HealthCheckRequest, _ health.Health_WatchServer) error {\n    // Example of how to register both methods but only implement the Check method.\n\treturn status.Error(codes.Unimplemented, \"unimplemented\")\n}\n```\n\n3. You can test the functionality with [GRPC health probe](https://github.com/grpc-ecosystem/grpc-health-probe).\n\n## Adding `/healthz` endpoint to runtime.ServeMux\n\nTo automatically register a `/healthz` endpoint in your `ServeMux` you can use\nthe `ServeMuxOption` `WithHealthzEndpoint`\nwhich takes in a connection to your registered gRPC server.\n\nThis endpoint will forward a request to the `Check` method described above to really check the health of the\nwhole system, not only the gateway itself. If your server doesn't implement the health checking protocol each request\nto `/healthz` will result in the following:\n\n```json\n{\"code\":12,\"message\":\"unknown service grpc.health.v1.Health\",\"details\":[]}\n```\n\nIf you've implemented multiple services in your server you can target specific services with the `?service=<service>`\nquery parameter. This will then be added to the `health.HealthCheckRequest` in the `Service` property. With that you can\nwrite your own logic to handle that in the health checking methods.\n\nAnalogously, to register an `{/endpoint/path}` endpoint in your `ServeMux` with a user-defined endpoint path, you can use\nthe `ServeMuxOption` `WithHealthEndpointAt`, which accepts a connection to your registered gRPC server\ntogether with a custom `endpointPath string` parameter.\n"
  },
  {
    "path": "docs/docs/operations/index.md",
    "content": "---\nlayout: default\ntitle: Operations\nnav_order: 3\nhas_children: true\n---\n"
  },
  {
    "path": "docs/docs/operations/inject_router.md",
    "content": "---\nlayout: default\ntitle: Adding custom routes to the mux\nnav_order: 0\nparent: Operations\n---\n\n# Adding custom routes to the mux\n\nThe gRPC-Gateway allows you to add custom routes to the serve mux, for example, if you want to support a use case that isn't supported by the gRPC-Gateway, like file uploads.\n\n## Example\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\n\tpb \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n)\n\nfunc main() {\n\tctx := context.TODO()\n\tmux := runtime.NewServeMux()\n\t// Register generated routes to mux\n\terr := pb.RegisterGreeterHandlerServer(ctx, mux, &GreeterServer{})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\t// Register custom route for  GET /hello/{name}\n\terr = mux.HandlePath(\"GET\", \"/hello/{name}\", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\tw.Write([]byte(\"hello \" + pathParams[\"name\"]))\n\t})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\thttp.ListenAndServe(\":8080\", mux)\n}\n\n// GreeterServer is the server API for Greeter service.\ntype GreeterServer struct {\n\n}\n\n// SayHello implement to say hello\nfunc (h *GreeterServer) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {\n\treturn &pb.HelloReply{\n\t\tMessage: \"hello \" + req.Name,\n\t}, nil\n}\n```\n"
  },
  {
    "path": "docs/docs/operations/logging.md",
    "content": "---\nlayout: default\ntitle: Logging the request body pattern for a request\nnav_order: 5\nparent: Operations\n---\n\n# Logging the request body pattern for a request\n\nIf you want to log the request body of incoming requests, you will need to buffer the body before it reaches the gateway. To log the request body, you can use a middleware `http.Handler` to buffer the request body before it's consumed.\n\n1. Create a `http.Handler` middleware. The `logRequestBody` example middleware logs the request body when the response status code is not 200.\n\n```go\ntype logResponseWriter struct {\n\thttp.ResponseWriter\n\tstatusCode int\n}\n\nfunc (rsp *logResponseWriter) WriteHeader(code int) {\n\trsp.statusCode = code\n\trsp.ResponseWriter.WriteHeader(code)\n}\n\n// Unwrap returns the original http.ResponseWriter. This is necessary\n// to expose Flush() and Push() on the underlying response writer.\nfunc (rsp *logResponseWriter) Unwrap() http.ResponseWriter {\n\treturn rsp.ResponseWriter\n}\n\nfunc newLogResponseWriter(w http.ResponseWriter) *logResponseWriter {\n\treturn &logResponseWriter{w, http.StatusOK}\n}\n\n// logRequestBody logs the request body when the response status code is not 200.\nfunc logRequestBody(h http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tlw := newLogResponseWriter(w)\n\n\t\t// Note that buffering the entire request body could consume a lot of memory.\n\t\tbody, err := io.ReadAll(r.Body)\n\t\tif err != nil {\n\t\t\thttp.Error(w, fmt.Sprintf(\"failed to read body: %v\", err), http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\tclonedR := r.Clone(r.Context())\n\t\tclonedR.Body = io.NopCloser(bytes.NewReader(body))\n\n\t\th.ServeHTTP(lw, clonedR)\n\n\t\tif lw.statusCode != http.StatusOK {\n\t\t\tgrpclog.Errorf(\"http error %+v request body %+v\", lw.statusCode, string(body))\n\t\t}\n\t})\n}\n```\n\n2. Wrap the gateway serve mux with the `logRequestBody` middleware:\n\n```go\n    mux := runtime.NewServeMux()\n    // Register generated gateway handlers\n\n    s := &http.Server{\n        Handler: logRequestBody(mux),\n    }\n```\n"
  },
  {
    "path": "docs/docs/operations/tracing.md",
    "content": "---\nlayout: default\ntitle: Tracing\nnav_order: 2\nparent: Operations\n---\n\n# Tracing\n\n## With [OpenCensus.io](https://opencensus.io/) and [AWS X-ray](https://aws.amazon.com/xray/)\n\n### Adding tracing using AWS-Xray as the exporter\n\nThis example uses the AWS-Xray exporter with a global trace setting. Note that AWS X-ray exporter does not handle any metrics only tracing.\n\n1. Add the following imports\n\n```go\nxray \"contrib.go.opencensus.io/exporter/aws\"\n\"go.opencensus.io/plugin/ocgrpc\"\n\"go.opencensus.io/plugin/ochttp\"\n\"go.opencensus.io/trace\"\n```\n\n2. Register the AWS X-ray exporter for the GRPC server\n\n```go\nxrayExporter, err := xray.NewExporter(\n    xray.WithVersion(\"latest\"),\n    // Add your AWS region.\n    xray.WithRegion(\"ap-southeast-1\"),\n)\nif err != nil {\n    // Handle any error.\n}\n// Do not forget to call Flush() before the application terminates.\ndefer xrayExporter.Flush()\n\n// Register the trace exporter.\ntrace.RegisterExporter(xrayExporter)\n```\n\n3. Add a global tracing configuration\n\n```go\n// Always trace in this example.\n// In production this can be set to a trace.ProbabilitySampler.\ntrace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})\n```\n\n4. Add `ocgrpc.ClientHandler` for tracing the gRPC client calls\n\n```go\nconn, err := grpc.NewClient(\n    // Other options goes here.\n    // Add ocgrpc.ClientHandler for tracing the grpc client calls.\n    grpc.WithStatsHandler(&ocgrpc.ClientHandler{}),\n)\n```\n\n5. Wrap the gateway mux with the OpenCensus HTTP handler\n\n```go\ngwmux := runtime.NewServeMux()\n\nopenCensusHandler := &ochttp.Handler{\n\t\tHandler: gwmux,\n}\n\ngwServer := &http.Server{\n    Addr: \"0.0.0.0:10000\",\n    Handler: openCensusHandler,\n    }),\n}\n```\n\n### Without a global configuration\n\nIn this example we have added the [gRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) and we do not wish to trace any health checks.\n\n1. Follow step `1`, `2` and `4` from the previous section.\n\n2. Since we are not using a global configuration we can decide what paths we want to trace.\n\n```go\ngwmux := runtime.NewServeMux()\n\nopenCensusHandler := &ochttp.Handler{\n    Handler: gwmux,\n    GetStartOptions: func(r *http.Request) trace.StartOptions {\n        startOptions := trace.StartOptions{}\n        if strings.HasPrefix(r.URL.Path, \"/api\") {\n            // This example will always trace anything starting with /api.\n            startOptions.Sampler = trace.AlwaysSample()\n        }\n        return startOptions\n    },\n}\n```\n\n4. No global configuration means we have to use the [per span sampler](https://opencensus.io/tracing/sampling/#per-span-sampler).\n\n#### A method we want to trace\n\n```go\nfunc (s *service) Name(ctx context.Context, req *pb.Request) (*pb.Response, error) {\n    // Here we add the span ourselves.\n    ctx, span := trace.StartSpan(ctx, \"name.to.use.in.trace\", trace.\n    // Select a sampler that fits your implementation.\n    WithSampler(trace.AlwaysSample()))\n    defer span.End()\n    /// Other stuff goes here.\n}\n```\n\n#### A method we do not wish to trace\n\n```go\nfunc (s *service) Check(ctx context.Context, in *health.HealthCheckRequest) (*health.HealthCheckResponse, error) {\n    // Note no span here.\n    return &health.HealthCheckResponse{Status: health.HealthCheckResponse_SERVING}, nil\n}\n```\n\n## OpenTracing Support\n\nIf your project uses [OpenTracing](https://github.com/opentracing/opentracing-go) and you'd like spans to propagate through the gateway, you can add some middleware which parses the incoming HTTP headers to create a new span correctly.\n\n```go\nimport (\n\t\"github.com/opentracing/opentracing-go\"\n\t\"github.com/opentracing/opentracing-go/ext\"\n)\n\nvar grpcGatewayTag = opentracing.Tag{Key: string(ext.Component), Value: \"grpc-gateway\"}\n\nfunc tracingWrapper(h http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tparentSpanContext, err := opentracing.GlobalTracer().Extract(\n\t\t\topentracing.HTTPHeaders,\n\t\t\topentracing.HTTPHeadersCarrier(r.Header))\n\t\tif err == nil || err == opentracing.ErrSpanContextNotFound {\n\t\t\tserverSpan := opentracing.GlobalTracer().StartSpan(\n\t\t\t\t\"ServeHTTP\",\n\t\t\t\t// this is magical, it attaches the new span to the parent parentSpanContext, and creates an unparented one if empty.\n\t\t\t\text.RPCServerOption(parentSpanContext),\n\t\t\t\tgrpcGatewayTag,\n\t\t\t)\n\t\t\tr = r.WithContext(opentracing.ContextWithSpan(r.Context(), serverSpan))\n\t\t\tdefer serverSpan.Finish()\n\t\t}\n\t\th.ServeHTTP(w, r)\n\t})\n}\n\n// Then just wrap the mux returned by runtime.NewServeMux() like this\nif err := http.ListenAndServe(\":8080\", tracingWrapper(mux)); err != nil {\n\tlog.Fatalf(\"failed to start gateway server on 8080: %v\", err)\n}\n```\n\nFinally, don't forget to add a tracing interceptor when registering\nthe services. E.g.\n\n```go\nimport (\n\t\"google.golang.org/grpc\"\n\t\"github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing\"\n)\n\nopts := []grpc.DialOption{\n\tgrpc.WithUnaryInterceptor(\n\t\tgrpc_opentracing.UnaryClientInterceptor(\n\t\t\tgrpc_opentracing.WithTracer(opentracing.GlobalTracer()),\n\t\t),\n\t),\n}\nif err := pb.RegisterMyServiceHandlerFromEndpoint(ctx, mux, serviceEndpoint, opts); err != nil {\n\tlog.Fatalf(\"could not register HTTP service: %v\", err)\n}\n```\n\n## OpenTelemetry\n\nIf your project uses [OpenTelemetry](https://opentelemetry.io/) and you would like spans to propagate through the gateway, you can refer to the [OpenTelemetry gRPC-Gateway Boilerplate](https://github.com/iamrajiv/opentelemetry-grpc-gateway-boilerplate) project. This repository provides a sample project that showcases the integration of OpenTelemetry with gRPC-Gateway to set up an OpenTelemetry-enabled gRPC-Gateway REST server. The project includes a simple `SayHello` method implemented on the gRPC server that returns a greeting message to the client.\n"
  },
  {
    "path": "docs/docs/overview/background.md",
    "content": "---\nlayout: default\ntitle: Background\nnav_order: 0\nparent: Overview\n---\n\n# Background\n\ngRPC 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 API as well. Reasons can range from maintaining backwards-compatibility, supporting languages or clients not well supported by gRPC to simply maintaining the aesthetics and tooling involved with a RESTful architecture.\n\nThis 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.\n"
  },
  {
    "path": "docs/docs/overview/index.md",
    "content": "---\nlayout: default\ntitle: Overview\nnav_order: 1\nhas_children: true\n---\n"
  },
  {
    "path": "docs/docs/overview/usage.md",
    "content": "---\nlayout: default\ntitle: How do I use this?\nnav_order: 1\nparent: Overview\n---\n\n# How do I use this?\n\nFollow the [instructions](https://github.com/grpc-ecosystem/grpc-gateway#usage) in the [README](https://github.com/grpc-ecosystem/grpc-gateway#readme).\n"
  },
  {
    "path": "docs/docs/related_projects.md",
    "content": "---\nlayout: default\ntitle: Related projects\nnav_order: 8\n---\n\n# Related projects\n\n- [grpc-dynamic-gateway](https://github.com/konsumer/grpc-dynamic-gateway)\n\n   A dynamically configured alternative to the grpc-gateway written in Node.\n\n- [rest2grpc](https://www.npmjs.com/package/rest2grpc)\n\n   A statically configured alternative to the grpc-gateway written in Node.\n\n- The Envoy proxy [gRPC-JSON transcoder](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_json_transcoder_filter)\n\n   An Envoy proxy filter that translates incoming JSON requests to gRPC and back.\n\n- Google Cloud Platform [HTTP/JSON gRPC transcoding](https://cloud.google.com/endpoints/docs/grpc/transcoding)\n\n   A GCP product that behaves like the grpc-gateway.\n\n- gRPC gateway project generator [gen-grpc-gateway-api](https://github.com/akoserwal/gen-grpc-gateway-api) \n\n   A shell script that can be used to generate a Go project that utilizes the gRPC-gateway and protobuf to expose a simple API.\n\n   Tutorial guide: [Automate gRPC-Gateway project generation in Go with gen-grpc-gateway-api](https://akoserwal.medium.com/automate-grpc-gateway-project-generation-in-golang-with-gen-grpc-gateway-api-015759f1e51b)\n\n- [grpc-starter transcoding](https://danielliu1123.github.io/grpc-starter/docs/extensions/grpc-http-transcoding/)\n\n   A Java implementation of grpc-gateway based on Spring Boot.\n\n- [grpc-rest-api-example](https://github.com/bullet-tooth/grpc-rest-api-example)\n\n   An example repo showcasing how to use gRPC-Gateway with a Java Maven multi-module project.\n"
  },
  {
    "path": "docs/docs/tutorials/adding_annotations.md",
    "content": "---\nlayout: default\ntitle: Adding gRPC-Gateway annotations to an existing proto file\nnav_order: 4\nparent: Tutorials\n---\n\n# Adding gRPC-Gateway annotations to an existing proto file\n\nNow that we've got a working Go gRPC server, we need to add the gRPC-Gateway annotations.\n\nThe annotations define how gRPC services map to the JSON request and response. When using protocol buffers, each RPC must define the HTTP method and path using the `google.api.http` annotation.\n\nSo we will need to add the `google/api/http.proto` import to the proto file. We also need to add the HTTP->gRPC mapping we want. In this case, we're mapping `POST /v1/example/echo` to our `SayHello` RPC.\n\n```protobuf\nsyntax = \"proto3\";\n\npackage helloworld;\n\nimport \"google/api/annotations.proto\";\n\n// Here is the overall greeting service definition where we define all our endpoints\nservice Greeter {\n  // Sends a greeting\n  rpc SayHello (HelloRequest) returns (HelloReply) {\n    option (google.api.http) = {\n      post: \"/v1/example/echo\"\n      body: \"*\"\n    };\n  }\n}\n\n// The request message containing the user's name\nmessage HelloRequest {\n  string name = 1;\n}\n\n// The response message containing the greetings\nmessage HelloReply {\n  string message = 1;\n}\n```\n\nSee [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 more annotations you can add to customize gateway behavior.\n\n## Generating the gRPC-Gateway stubs\n\nNow that we've got the gRPC-Gateway annotations added to the proto file, we need to use the gRPC-Gateway generator to generate the stubs.\n\n### Using buf\n\nWe'll need to add the gRPC-Gateway generator to the generation configuration:\n\n```yaml\nversion: v1\nplugins:\n  - plugin: go\n    out: proto\n    opt: paths=source_relative\n  - plugin: go-grpc\n    out: proto\n    opt: paths=source_relative,require_unimplemented_servers=false\n  - plugin: grpc-gateway\n    out: proto\n    opt: paths=source_relative\n```\n\nWe'll also need to add the `googleapis` dependency to our `buf.yaml` file:\n\n```yaml\nversion: v1\nname: buf.build/myuser/myrepo\ndeps:\n  - buf.build/googleapis/googleapis\n```\n\nThen we need to run `buf mod update` to select a version of the dependency to use.\n\nAnd that's it! Now if you run:\n\n```sh\n$ buf generate\n```\n\nIt should produce a `*.gw.pb.go` file.\n\n### Using `protoc`\n\nBefore we can generate the stubs with `protoc`, we need to copy some dependencies into our proto file structure. Copy a subset of the `googleapis`\nfrom the [official repository](https://github.com/googleapis/googleapis) to your local proto file structure. It should look like this afterwards:\n\n```\nproto\n├── google\n│   └── api\n│       ├── annotations.proto\n│       └── http.proto\n└── helloworld\n    └── hello_world.proto\n```\n\nNow we need to add the gRPC-Gateway generator to the `protoc` invocation:\n\n```sh\n$ protoc -I ./proto \\\n  --go_out ./proto --go_opt paths=source_relative \\\n  --go-grpc_out ./proto --go-grpc_opt paths=source_relative \\\n  --grpc-gateway_out ./proto --grpc-gateway_opt paths=source_relative \\\n  ./proto/helloworld/hello_world.proto\n```\n\nThis should generate a `*.gw.pb.go` file.\n\nWe also need to add and serve the gRPC-Gateway mux in our `main.go` file.\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"net\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/credentials/insecure\"\n\n\thelloworldpb \"github.com/myuser/myrepo/proto/helloworld\"\n)\n\ntype server struct{\n\thelloworldpb.UnimplementedGreeterServer\n}\n\nfunc NewServer() *server {\n\treturn &server{}\n}\n\nfunc (s *server) SayHello(ctx context.Context, in *helloworldpb.HelloRequest) (*helloworldpb.HelloReply, error) {\n\treturn &helloworldpb.HelloReply{Message: in.Name + \" world\"}, nil\n}\n\nfunc main() {\n\t// Create a listener on TCP port\n\tlis, err := net.Listen(\"tcp\", \":8080\")\n\tif err != nil {\n\t\tlog.Fatalln(\"Failed to listen:\", err)\n\t}\n\n\t// Create a gRPC server object\n\ts := grpc.NewServer()\n\t// Attach the Greeter service to the server\n\thelloworldpb.RegisterGreeterServer(s, &server{})\n\t// Serve gRPC server\n\tlog.Println(\"Serving gRPC on 0.0.0.0:8080\")\n\tgo func() {\n\t\tlog.Fatalln(s.Serve(lis))\n\t}()\n\n\t// Create a client connection to the gRPC server we just started\n\t// This is where the gRPC-Gateway proxies the requests\n\tconn, err := grpc.NewClient(\n\t\t\"0.0.0.0:8080\",\n\t\tgrpc.WithTransportCredentials(insecure.NewCredentials()),\n\t)\n\tif err != nil {\n\t\tlog.Fatalln(\"Failed to dial server:\", err)\n\t}\n\n\tgwmux := runtime.NewServeMux()\n\t// Register Greeter\n\terr = helloworldpb.RegisterGreeterHandler(context.Background(), gwmux, conn)\n\tif err != nil {\n\t\tlog.Fatalln(\"Failed to register gateway:\", err)\n\t}\n\n\tgwServer := &http.Server{\n\t\tAddr:    \":8090\",\n\t\tHandler: gwmux,\n\t}\n\n\tlog.Println(\"Serving gRPC-Gateway on http://0.0.0.0:8090\")\n\tlog.Fatalln(gwServer.ListenAndServe())\n}\n```\n\nFor more examples, please refer to [our boilerplate repository](https://github.com/johanbrandhorst/grpc-gateway-boilerplate).\n\n## Testing the gRPC-Gateway\n\nNow we can start the server:\n\n```sh\n$ go run main.go\n```\n\nThen we use cURL to send HTTP requests:\n\n```sh\n$ curl -X POST -k http://localhost:8090/v1/example/echo -d '{\"name\": \" hello\"}'\n```\n\n```\n{\"message\":\"hello world\"}\n```\n\nHopefully, that gives a bit of understanding of how to use the gRPC-Gateway.\n\nFull source code of hello world program can be found here [helloworld-grpc-gateway](https://github.com/iamrajiv/helloworld-grpc-gateway).\n\n[Next](learn_more.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }\n"
  },
  {
    "path": "docs/docs/tutorials/creating_main.go.md",
    "content": "---\nlayout: default\ntitle: Creating main.go\nnav_order: 3\nparent: Tutorials\n---\n\n# Creating main.go\n\nBefore creating `main.go` file we are assuming that the user has created a `go.mod` with the name `github.com/myuser/myrepo`, if not please refer to [Creating go.mod file](introduction.md#creating-gomod-file). The import here is using the path to the generated files in `proto/helloworld` relative to the root of the repository.\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"net\"\n\n\t\"google.golang.org/grpc\"\n\n\thelloworldpb \"github.com/myuser/myrepo/proto/helloworld\"\n)\n\ntype server struct{\n\thelloworldpb.UnimplementedGreeterServer\n}\n\nfunc NewServer() *server {\n\treturn &server{}\n}\n\nfunc (s *server) SayHello(ctx context.Context, in *helloworldpb.HelloRequest) (*helloworldpb.HelloReply, error) {\n\treturn &helloworldpb.HelloReply{Message: in.Name + \" world\"}, nil\n}\n\nfunc main() {\n\t// Create a listener on TCP port\n\tlis, err := net.Listen(\"tcp\", \":8080\")\n\tif err != nil {\n\t\tlog.Fatalln(\"Failed to listen:\", err)\n\t}\n\n\t// Create a gRPC server object\n\ts := grpc.NewServer()\n\t// Attach the Greeter service to the server\n\thelloworldpb.RegisterGreeterServer(s, &server{})\n\t// Serve gRPC Server\n\tlog.Println(\"Serving gRPC on 0.0.0.0:8080\")\n\tlog.Fatal(s.Serve(lis))\n}\n```\n\n## Read More\n\nFor more refer to gRPC docs [https://grpc.io/docs/languages/go/](https://grpc.io/docs/languages/go/).\n\n[Next](adding_annotations.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }\n"
  },
  {
    "path": "docs/docs/tutorials/generating_stubs/index.md",
    "content": "---\nlayout: default\ntitle: Generating stubs\nparent: Tutorials\nnav_order: 2\nhas_children: true\n---\n\nFor generating the stubs, we have two alternatives: `protoc` and `buf`. `protoc` is the more classic generation experience that is used widely in the industry, but it has a pretty steep learning curve. `buf` is a newer tool that is built with user experience and speed in mind. It also offers linting and breaking change detection, something `protoc` doesn't offer. We offer instructions for both here.\n"
  },
  {
    "path": "docs/docs/tutorials/generating_stubs/using_buf.md",
    "content": "---\nlayout: default\ntitle: Generating stubs using buf\nnav_order: 0\nparent: Generating stubs\ngrand_parent: Tutorials\n---\n\n# Generating stubs using buf\n\n[Buf](https://github.com/bufbuild/buf) is a tool that provides various protobuf utilities such as linting, breaking change detection and generation. Please find installation instructions on [https://docs.buf.build/installation/](https://docs.buf.build/installation/).\n\nIt is configured through a `buf.yaml` file that should be checked in to the root of your Protobuf file hierarchy. Buf will automatically read this file if present. Configuration can also be provided via the command-line flag `--config`, which accepts a path to a `.json` or `.yaml` file, or direct JSON or YAML data. As opposed to `protoc`, where all `.proto` files are manually specified on the command-line, buf operates by recursively discovering all `.proto` files under configuration and building them.\n\nThe following is an example of a valid configuration, and you would put it in the root of your Protobuf file hierarchy, e.g. in `proto/buf.yaml` relative to the root of your repository.\n\n```yaml\nversion: v1\nname: buf.build/myuser/myrepo\n```\n\nTo generate type and gRPC stubs for Go, create the file `buf.gen.yaml`:\n\n```yaml\nversion: v1\nplugins:\n  - plugin: go\n    out: proto\n    opt: paths=source_relative\n  - plugin: go-grpc\n    out: proto\n    opt: paths=source_relative\n```\n\nWe use the `go` and `go-grpc` plugins to generate Go types and gRPC service definitions. We're outputting the generated files relative to the `proto` folder, and we're using the `paths=source_relative` option, which means that the generated files will appear in the same directory as the source `.proto` file.\n\nThen run\n\n```sh\n$ buf generate\n```\n\nThis will have generated a `*.pb.go` and a `*_grpc.pb.go` file for each protobuf package in our `proto` file hierarchy.\n\n[Next](../creating_main.go.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }\n"
  },
  {
    "path": "docs/docs/tutorials/generating_stubs/using_protoc.md",
    "content": "---\nlayout: default\ntitle: Generating stubs using protoc\nnav_order: 1\nparent: Generating stubs\ngrand_parent: Tutorials\n---\n\n# Generating stubs using protoc\n\nHere's an example of what a `protoc` command might look like to generate Go stubs, assuming that you're at the root of your repository and you have your proto files in a directory called `proto`:\n\n```sh\n$ protoc -I ./proto \\\n   --go_out ./proto --go_opt paths=source_relative \\\n   --go-grpc_out ./proto --go-grpc_opt paths=source_relative \\\n   ./proto/helloworld/hello_world.proto\n```\n\nWe use the `go` and `go-grpc` plugins to generate Go types and gRPC service definitions. We're outputting the generated files relative to the `proto` folder, and we're using the `paths=source_relative` option, which means that the generated files will appear in the same directory as the source `.proto` file.\n\nThis will have generated a `*.pb.go` and a `*_grpc.pb.go` file for `proto/helloworld/hello_world.proto`.\n\n[Next](../creating_main.go.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }\n"
  },
  {
    "path": "docs/docs/tutorials/index.md",
    "content": "---\nlayout: default\ntitle: Tutorials\nnav_order: 6\nhas_children: true\n---\n"
  },
  {
    "path": "docs/docs/tutorials/introduction.md",
    "content": "---\nlayout: default\ntitle: Introduction to the gRPC-Gateway\nnav_order: 0\nparent: Tutorials\n---\n\n# Introduction to the gRPC-Gateway\n\nWe all know that gRPC is not a tool for everything. There are cases where we still want to provide a traditional HTTP/JSON API. The reasons can range from maintaining backward-compatibility to supporting programming languages or clients not well supported by gRPC. But writing another service just to expose an HTTP/JSON API is quite a time consuming and tedious task.\n\nSo is there any way to code just once, but provide APIs in both gRPC and HTTP/JSON at the same time?\n\nThe answer is Yes.\n\nThe 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.\n\nThis helps you provide your APIs in both gRPC and HTTP/JSON format at the same time.\n\n<div align=\"center\">\n<img src=\"../../../assets/images/architecture_introduction_diagram.svg\" />\n</div>\n\n## Prerequisites\n\nBefore we start coding, we have to install some tools.\n\nWe will be using a Go gRPC server in the examples, so please install Go first from [https://golang.org/dl/](https://golang.org/dl/).\n\nAfter installing Go, use `go install` to download and build the following binaries:\n\n```sh\n$ go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest\n$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest\n$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest\n```\n\nThis installs the `protoc` generator plugins we need to generate the stubs. Make sure to add `$GOPATH/bin` to your `$PATH` so that executables installed via `go get` are available on your `$PATH`.\n\nWe will be working in a new module for this tutorial, so go ahead and create that in a folder of your choosing now:\n\n### Creating go.mod file\n\nStart your module using the [go mod init command](https://golang.org/cmd/go/#hdr-Initialize_new_module_in_current_directory) to create a go.mod file.\n\nRun the `go mod init` command, giving it the path of the module your code will be in. Here, use github.com/myuser/myrepo for the module path -- in production code, this would be the URL from which your module can be downloaded.\n\n```sh\n$ go mod init github.com/myuser/myrepo\ngo: creating new go.mod: module github.com/myuser/myrepo\n```\n\nThe `go mod init` command creates a go.mod file that identifies your code as a module that might be used from other code. The file you just created includes only the name of your module and the Go version your code supports. But as you add dependencies -- meaning packages from other modules -- the go.mod file will list the specific module versions to use. This keeps builds reproducible and gives you direct control over which module versions to use.\n\n[Next](simple_hello_world.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }\n"
  },
  {
    "path": "docs/docs/tutorials/learn_more.md",
    "content": "---\nlayout: default\ntitle: Learn More\nnav_order: 5\nparent: Tutorials\n---\n\n# Learn More\n\n## How it works\n\nWhen the HTTP request arrives at the gRPC-Gateway, it parses the JSON data into a protobuf message. It then makes a normal Go gRPC client request using the parsed protobuf message. The Go gRPC client encodes the protobuf structure into the protobuf binary format and sends it to the gRPC server. The gRPC Server handles the request and returns the response in the protobuf binary format. The Go gRPC client parses it into a protobuf message and returns it to the gRPC-Gateway, which encodes the protobuf message to JSON and returns it to the original client.\n\n## google.api.http\n\nRead more about `google.api.http` in [the source file documentation](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto).\n\n## HTTP and gRPC Transcoding\n\nRead more about HTTP and gRPC Transcoding on [AIP 127](https://google.aip.dev/127).\n"
  },
  {
    "path": "docs/docs/tutorials/simple_hello_world.md",
    "content": "---\nlayout: default\ntitle: Creating a simple hello world with gRPC\nnav_order: 1\nparent: Tutorials\n---\n\n# Creating a simple hello world with gRPC\n\nTo understand the gRPC-Gateway we are going to first make a hello world gRPC service.\n\n## Defining your gRPC service using protocol buffers\n\nBefore we create a gRPC service, we should create a proto file to define what we need, here we create a file named `hello_world.proto` in the directory `proto/helloworld/hello_world.proto`.\n\nThe gRPC service is defined using [Google Protocol Buffers](https://developers.google.com/protocol-buffers). To learn more about how to define a service in a `.proto` file see their [Basics tutorial](https://grpc.io/docs/languages/go/basics/). For now, all you need to know is that both the server and the client stub have a `SayHello()` RPC method that takes a `HelloRequest` parameter from the client and returns a `HelloReply` from the server, and that the method is defined like this:\n\n```protobuf\nsyntax = \"proto3\";\n\npackage helloworld;\n\n// The greeting service definition\nservice Greeter {\n  // Sends a greeting\n  rpc SayHello (HelloRequest) returns (HelloReply) {}\n}\n\n// The request message containing the user's name\nmessage HelloRequest {\n  string name = 1;\n}\n\n// The response message containing the greetings\nmessage HelloReply {\n  string message = 1;\n}\n```\n\n[Next](generating_stubs/index.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }\n"
  },
  {
    "path": "docs/docs/using_custom_query_parser.md",
    "content": "# Custom Query Parameter Parsing in gRPC-Gateway\nThe gRPC-Gateway allows you to customize the way query parameters are parsed and mapped to your gRPC request messages. This can be particularly useful when dealing with nested fields or complex query parameter mappings that are not directly supported by the default behavior.\n\n## Example: Custom Query Parameter Parser for Nested Fields\nSuppose you have a gRPC service definition where you want to map query parameters to a nested message field. Here is how you can achieve this using a custom query parameter parser.\n\n## Protobuf Definition:\n```protobuf\nsyntax = \"proto3\";\n\nimport \"google/api/annotations.proto\";\n\npackage your.service.v1;\n\nmessage PageOptions {\n  int32 limit = 1;\n  int32 page = 2;\n}\n\nmessage ListStuffRequest {\n  string stuff_uuid = 1;\n  PageOptions pagination = 2;\n}\n\nmessage ListStuffResponse {\n  repeated string stuff = 1;\n}\n\nservice MyService {\n  rpc ListStuff(ListStuffRequest) returns (ListStuffResponse) {\n    option (google.api.http) = {\n      get: \"/path/to/{stuff_uuid}/stuff\"\n    };\n  }\n}\n```\n\n## The Problem\nThe ListStuffRequest message contains a nested PageOptions message that represents pagination options for the list operation. By default, creating a ServerMux in gRPC-Gateway will be able to parse query parameters for the `stuff_uuid` and other basic fields (that are not your own custom message). Given that `PageOptions` is a custom message, and therefore will lead to a nested RequestMessage (the root message), it can only parse query parameters for the `PageOptions` message if they are in the format `url?pagination.limit=x`. If your endpoint constraints require query parameters to be in the format `url?limit=x`, without specifying the full qualified path in the url, you will need to implement a custom parser to map these parameters correctly into the nested PageOptions message.\n\n## Custom Query Parameter Parser\n\nCreate a custom [QueryParameterParser](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/runtime/query.go#L30) to handle the nested PageOptions message.\n```go\npackage customparser\n\nimport (\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/protobuf/proto\"\n\n\tyour_service_v1 \"path/to/your/service/v1\"\n)\n\n// CustomQueryParameterParser parses query parameters into the appropriate gRPC message fields.\ntype CustomQueryParameterParser struct{}\n\n// Parse parses query parameters and populates the appropriate fields in the gRPC request message.\nfunc (p *CustomQueryParameterParser) Parse(target proto.Message, values url.Values, filter *utilities.DoubleArray) error {\n\tswitch req := target.(type) {\n\t// Different messages/requests can have different parsers, of course\n\tcase *your_service_v1.ListStuffRequest:\n\t\treturn populateListStuffParams(values, req)\n\t}\n\t\n\treturn (runtime.DefaultQueryParser{}).Parse(target, values, filter)\n}\n\n// populateListStuffParams populates the ListStuffRequest with query parameters.\nfunc populateListStuffParams(values url.Values, r *your_service_v1.ListStuffRequest) error {\n\tpageOptions := &your_service_v1.PageOptions{}\n\t\n\tif limit := values.Get(\"limit\"); limit != \"\" {\n\t\tif parsedLimit, err := strconv.Atoi(limit); err == nil {\n\t\t\tpageOptions.Limit = int32(parsedLimit)\n\t\t}\n\t}\n\tif page := values.Get(\"page\"); page != \"\" {\n\t\tif parsedPage, err := strconv.Atoi(page); err == nil {\n\t\t\tpageOptions.Page = int32(parsedPage)\n\t\t}\n\t}\n\n\tr.Pagination = pageOptions\n\treturn nil\n}\n```\n## Integrate Your Custom Query Parameter Parser in gRPC-Gateway Setup\n\nAll you need to do now is update the gRPC-Gateway setup, particularly wherever you are [defining the mux server](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/runtime/mux.go#L293), to [use the custom query parameter parser](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/runtime/mux.go#L110).\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\n\t\"your_module/path/customparser\"\n)\n\n// create a new ServeMux with custom parser and other runtime options as needed\nfunc createGRPCGatewayMux() *runtime.ServeMux {\n\t// whatever custom code you may need before you create the mux...\n\t\n\treturn runtime.NewServeMux(\n\t\t// Custom query parameter parser\n\t\truntime.SetQueryParameterParser(&customparser.CustomQueryParameterParser{}),\n\t\t\n\t\t// other runtime options you may need...\n\t)\n}\n```"
  },
  {
    "path": "docs/index.md",
    "content": "---\nlayout: default\ntitle: gRPC-Gateway\nnav_order: 0\ndescription: \"Documentation site for the gRPC-Gateway\"\npermalink: /\n---\n\n# gRPC-Gateway\n{: .fs-9 }\n\ngRPC-Gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). It reads a [gRPC](https://grpc.io/) service definition and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. This server is generated according to [custom options](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.api#http) in your gRPC definition.\n{: .fs-6 .fw-300 }\n\n[Get started](#getting-started){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [View it on GitHub](https://github.com/grpc-ecosystem/grpc-gateway){: .btn .fs-5 .mb-4 .mb-md-0 }\n\n---\n\n## Getting started\n\n<a href=\"https://github.com/grpc-ecosystem/grpc-gateway/actions/workflows/main.yml\"><img src=\"https://img.shields.io/github/workflow/status/grpc-ecosystem/grpc-gateway/main?color=379c9c&label=build&logo=github&logoColor=ffffff&style=flat-square\"/></a>\n<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>\n<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>\n<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>\n<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>\n\ngRPC-Gateway helps you to provide your APIs in both gRPC and RESTful style at the same time.\n\n<div align=\"center\">\n<img src=\"assets/images/architecture_introduction_diagram.svg\" />\n</div>\n\nTo learn more about gRPC-Gateway check out the documentation.\n\n## Contribution\n\nSee [CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md).\n\n## License\n\ngRPC-Gateway is licensed under the BSD 3-Clause License.\n\nSee [LICENSE](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE) for more details.\n\n### Thank you to the contributors of gRPC-Gateway\n\n<ul class=\"list-style-none\">\n{% for contributor in site.github.contributors %}\n<li class=\"d-inline-block mr-1\">\n<a href=\"{{ contributor.html_url }}\"><img src=\"{{ contributor.avatar_url }}\" width=\"32\" height=\"32\" alt=\"{{ contributor.login }}\"/></a>\n</li>\n{% endfor %}\n</ul>\n"
  },
  {
    "path": "docs/run.sh",
    "content": "#! /bin/bash\n\nset -e\n\nJEKYLL_VERSION=4\nBUNDLE_DIR=\"/tmp/grpc-gateway-bundle\"\n\nif [ ! -d \"${BUNDLE_DIR}\" ]; then\n  mkdir \"${BUNDLE_DIR}\"\n\n  # Run this to update the Gemsfile.lock\n  docker run --rm \\\n    --volume=\"${PWD}:/srv/jekyll\" \\\n    -e \"JEKYLL_UID=$(id -u)\" \\\n    -e \"JEKYLL_GID=$(id -g)\" \\\n    --volume=\"/tmp/grpc-gateway-bundle:/usr/local/bundle\" \\\n    -it \"jekyll/builder:${JEKYLL_VERSION}\" \\\n    bundle update\nfi\n\nif [[ ${JEKYLL_GITHUB_TOKEN} == \"\" ]]; then\n  echo \"Please set \\$JEKYLL_GITHUB_TOKEN before running\"\n  exit 1\nfi\n\ndocker run --rm \\\n  --volume=\"${PWD}:/srv/jekyll\" \\\n  -p 35729:35729 -p 4000:4000 \\\n  -e \"JEKYLL_UID=$(id -u)\" \\\n  -e \"JEKYLL_GID=$(id -g)\" \\\n  -e \"JEKYLL_GITHUB_TOKEN=${JEKYLL_GITHUB_TOKEN}\" \\\n  --volume=\"/tmp/grpc-gateway-bundle:/usr/local/bundle\" \\\n  -it \"jekyll/builder:${JEKYLL_VERSION}\" \\\n  jekyll serve\n"
  },
  {
    "path": "examples/internal/README.md",
    "content": "# One way to run the example\n\n```bash\n# Handle dependencies\n$ dep init\n```\n\nFollow the guides from this [README.md](./browser/README.md) to run the server and gateway.\n```bash\n# Make sure you are in the correct directory: \n# $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/v2/examples\n$ cd examples/internal/browser\n$ pwd\n\n# Install gulp\n$ npm install -g gulp-cli\n$ npm install\n$ gulp\n\n# Run\n$ gulp bower\n$ gulp backends\n```\n\nThen you can use curl or a browser to test:\n\n```bash\n# List all apis\n$ curl http://localhost:8080/openapiv2/echo_service.swagger.json\n\n# Visit the apis\n$ curl -XPOST http://localhost:8080/v1/example/echo/foo\n{\"id\":\"foo\"}\n\n$ curl  http://localhost:8080/v1/example/echo/foo/123\n{\"id\":\"foo\",\"num\":\"123\"}\n\n```\n\nSo you have visited the apis by HTTP successfully. You can also try other apis.\n"
  },
  {
    "path": "examples/internal/browser/.gitignore",
    "content": "/bower_components\n/node_modules\n"
  },
  {
    "path": "examples/internal/browser/README.md",
    "content": "# Browser example\n\nThis directory contains an example use of gRPC-Gateway with web browsers.\nThe following commands automatically runs integration tests with phantomjs.\n\n```shell-session\n$ npm install -g gulp-cli\n$ npm install\n$ gulp\n```\n\n## Other examples\n\n### Very simple example\n\nRun\n\n```shell-session\n$ gulp bower\n$ gulp backends\n```\n\nthen, open `index.html`.\n\n### Integration test with your browser\n\nRun\n\n```shell-session\n$ gulp serve\n```\n\nthen, open `http://localhost:8000` with your browser.\n"
  },
  {
    "path": "examples/internal/browser/a_bit_of_everything_service.spec.js",
    "content": "'use strict';\n\nvar SwaggerClient = require('swagger-client');\n\ndescribe('ABitOfEverythingService', function () {\n  var client;\n\n  beforeEach(function (done) {\n    new SwaggerClient({\n      url: \"http://localhost:8080/openapiv2/a_bit_of_everything.swagger.json\",\n      usePromise: true,\n    }).then(function (c) {\n      client = c;\n    }).catch(function (err) {\n      done.fail(err);\n    }).then(done);\n  });\n\n  describe('Create', function () {\n    var created;\n    var expected = {\n      floatValue: 1.5,\n      doubleValue: 2.5,\n      int64Value: \"4294967296\",\n      uint64Value: \"9223372036854775807\",\n      int32Value: -2147483648,\n      fixed64Value: \"9223372036854775807\",\n      fixed32Value: 4294967295,\n      boolValue: true,\n      stringValue: \"strprefix/foo\",\n      uint32Value: 4294967295,\n      sfixed32Value: 2147483647,\n      sfixed64Value: \"-4611686018427387904\",\n      sint32Value: 2147483647,\n      sint64Value: \"4611686018427387903\",\n      nonConventionalNameValue: \"camelCase\",\n      enumValue: \"ONE\",\n      pathEnumValue: \"DEF\",\n      nestedPathEnumValue: \"JKL\",\n      enumValueAnnotation: \"ONE\",\n      requiredStringViaFieldBehaviorAnnotation: \"foo\",\n      required_field_schema_json_name_custom: \"bar\",\n      required_field_behavior_json_name_custom: \"baz\",\n      requiredStringField1: \"field1\",\n      requiredStringField2: \"field2\",\n      uuid: \"\",\n      singleNested: null,\n      nested: [],\n      bytesValue: \"\",\n      repeatedStringValue: [],\n      mapValue: {},\n      mappedStringValue: {},\n      mappedNestedValue: {},\n      timestampValue: \"2006-01-02T15:04:05Z\",\n      repeatedEnumValue: [],\n      repeatedEnumAnnotation: [],\n      repeatedStringAnnotation: [],\n      repeatedNestedAnnotation: [],\n      nestedAnnotation: null,\n      int64OverrideType: \"0\",\n      outputOnlyStringViaFieldBehaviorAnnotation: \"\",\n    };\n\n    beforeEach(function (done) {\n      // Skipping Create endpoint - it has issues with map serialization in URL parameters\n      done();\n    });\n\n    // Skipping - GET-style Create endpoint renders map objects as [object Object] instead of proper nested format\n    xit('should assign id', function () {\n      expect(created.uuid).not.toBe(\"\");\n    });\n\n    // Skipping - GET-style Create endpoint renders map objects as [object Object] instead of proper nested format\n    xit('should echo the request back', function () {\n      delete created.uuid;\n      expect(created).toEqual(expected);\n    });\n  });\n\n  describe('CreateBody', function () {\n    var created;\n    var expected = {\n      floatValue: 1.5,\n      doubleValue: 2.5,\n      int64Value: \"4294967296\",\n      uint64Value: \"9223372036854775807\",\n      int32Value: -2147483648,\n      fixed64Value: \"9223372036854775807\",\n      fixed32Value: 4294967295,\n      boolValue: true,\n      stringValue: \"strprefix/foo\",\n      uint32Value: 4294967295,\n      sfixed32Value: 2147483647,\n      sfixed64Value: \"-4611686018427387904\",\n      sint32Value: 2147483647,\n      sint64Value: \"4611686018427387903\",\n      nonConventionalNameValue: \"camelCase\",\n      enumValue: \"ONE\",\n      pathEnumValue: \"DEF\",\n      nestedPathEnumValue: \"JKL\",\n      nested: [\n        { name: \"bar\", amount: 10 },\n        { name: \"baz\", amount: 20 },\n      ],\n      repeatedStringValue: [\"a\", \"b\", \"c\"],\n      oneofString: \"x\",\n      mapValue: { a: \"ONE\", b: 2 },\n      mappedStringValue: { a: \"x\", b: \"y\" },\n      mappedNestedValue: {\n        a: { name: \"x\", amount: 1 },\n        b: { name: \"y\", amount: 2 },\n      },\n      enumValueAnnotation: \"ONE\",\n      requiredStringViaFieldBehaviorAnnotation: \"foo\",\n      productId: [],\n      optionalStringField: \"\",\n      requiredStringField1: \"\",\n      requiredStringField2: \"\",\n      required_field_behavior_json_name_custom: \"\",\n      required_field_schema_json_name_custom: \"\",\n      trailingOnly: \"\",\n      trailingOnlyDot: \"\",\n      trailingBoth: \"\",\n      trailingMultiline: \"\",\n      uuids: [],\n      singleNested: null,\n      nested: [],\n      bytesValue: \"\",\n      repeatedStringValue: [],\n      mapValue: {},\n      mappedStringValue: {},\n      mappedNestedValue: {},\n      timestampValue: \"2006-01-02T15:04:05Z\",\n      repeatedEnumValue: [],\n      repeatedEnumAnnotation: [],\n      repeatedStringAnnotation: [],\n      repeatedNestedAnnotation: [],\n      nestedAnnotation: null,\n      int64OverrideType: \"0\",\n      outputOnlyStringViaFieldBehaviorAnnotation: \"\",\n    };\n\n    beforeEach(function (done) {\n      client.ABitOfEverything.ABitOfEverythingService_CreateBody({\n        body: expected,\n      }).then(function (resp) {\n        created = resp.obj;\n      }).catch(function (err) {\n        done.fail(err);\n      }).then(done);\n    });\n\n    it('should assign id', function () {\n      expect(created.uuid).not.toBe(\"\");\n    });\n\n    it('should echo the request back', function () {\n      delete created.uuid;\n      expect(created).toEqual(expected);\n    });\n  });\n\n  describe('lookup', function () {\n    var created;\n    var expected = {\n      boolValue: true,\n      stringValue: \"strprefix/foo\",\n    };\n\n    beforeEach(function (done) {\n      client.ABitOfEverything.ABitOfEverythingService_CreateBody({\n        body: expected,\n      }).then(function (resp) {\n        created = resp.obj;\n      }).catch(function (err) {\n        fail(err);\n      }).finally(done);\n    });\n\n    it('should look up an object by uuid', function (done) {\n      client.ABitOfEverything.ABitOfEverythingService_Lookup({\n        uuid: created.uuid\n      }).then(function (resp) {\n        expect(resp.obj).toEqual(created);\n      }).catch(function (err) {\n        fail(err.errObj);\n      }).finally(done);\n    });\n\n    it('should fail if no such object', function (done) {\n      client.ABitOfEverything.ABitOfEverythingService_Lookup({\n        uuid: 'not_exist',\n      }).then(function (resp) {\n        fail('expected failure but succeeded');\n      }).catch(function (err) {\n        expect(err.status).toBe(404);\n      }).finally(done);\n    });\n  });\n\n  describe('Delete', function () {\n    var created;\n    var expected = {\n      boolValue: true,\n      stringValue: \"strprefix/foo\",\n    };\n\n    beforeEach(function (done) {\n      client.ABitOfEverything.ABitOfEverythingService_CreateBody({\n        body: expected,\n      }).then(function (resp) {\n        created = resp.obj;\n      }).catch(function (err) {\n        fail(err);\n      }).finally(done);\n    });\n\n    it('should delete an object by id', function (done) {\n      client.ABitOfEverything.ABitOfEverythingService_Delete({\n        uuid: created.uuid\n      }).then(function (resp) {\n        expect(resp.obj).toEqual({});\n      }).catch(function (err) {\n        fail(err.errObj);\n      }).then(function () {\n        return client.ABitOfEverything.ABitOfEverythingService_Lookup({\n          uuid: created.uuid\n        });\n      }).then(function (resp) {\n        fail('expected failure but succeeded');\n      }).catch(function (err) {\n        expect(err.status).toBe(404);\n      }).finally(done);\n    });\n  });\n\n  describe('GetRepeatedQuery', function () {\n    var repeated;\n    var expected = {\n      pathRepeatedFloatValue: [1.5, -1.5],\n      pathRepeatedDoubleValue: [2.5, -2.5],\n      pathRepeatedInt64Value: [\"4294967296\", \"-4294967296\"],\n      pathRepeatedUint64Value: [\"0\", \"9223372036854775807\"],\n      pathRepeatedInt32Value: [2147483647, -2147483648],\n      pathRepeatedFixed64Value: [\"0\", \"9223372036854775807\"],\n      pathRepeatedFixed32Value: [0, 4294967295],\n      pathRepeatedBoolValue: [true, false],\n      pathRepeatedStringValue: [\"foo\", \"bar\"],\n      pathRepeatedBytesValue: [\"AA==\", \"_w==\"],\n      pathRepeatedUint32Value: [4294967295, 0],\n      pathRepeatedEnumValue: [\"ONE\", \"ONE\"],\n      pathRepeatedSfixed32Value: [-2147483648, 2147483647],\n      pathRepeatedSfixed64Value: [\"-4294967296\", \"4294967296\"],\n      pathRepeatedSint32Value: [2147483646, -2147483647],\n      pathRepeatedSint64Value: [\"4611686018427387903\", \"-4611686018427387904\"]\n    };\n\n    beforeEach(function (done) {\n      client.ABitOfEverything.ABitOfEverythingService_GetRepeatedQuery(expected).then(function (resp) {\n        repeated = resp.obj;\n      }).catch(function (err) {\n        done.fail(err);\n      }).then(done);\n    });\n\n    it('should echo the request back', function () {\n      // API will echo a non URL safe encoding\n      expected.pathRepeatedBytesValue = [\"AA==\", \"/w==\"];\n      expect(repeated).toEqual(expected);\n    });\n  });\n});\n"
  },
  {
    "path": "examples/internal/browser/bin/.gitignore",
    "content": "/*\n!/.gitignore\n"
  },
  {
    "path": "examples/internal/browser/bower.json",
    "content": "{\n  \"name\": \"grpc-gateway-example-browser\",\n  \"description\": \"Example use of gRPC-Gateway from browser\",\n  \"main\": \"index.js\",\n  \"authors\": [\n    \"Yuki Yugui Sonoda <yugui@gengo.com>\"\n  ],\n  \"license\": \"SEE LICENSE IN LICENSE file\",\n  \"homepage\": \"https://github.com/grpc-ecosystem/grpc-gateway\",\n  \"private\": true,\n  \"dependencies\": {\n    \"swagger-js\": \"~> 2.1\"\n  },\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"bower_components\",\n    \"test\",\n    \"tests\"\n  ]\n}\n"
  },
  {
    "path": "examples/internal/browser/echo_service.spec.js",
    "content": "'use strict';\n\nvar SwaggerClient = require('swagger-client');\n\ndescribe('EchoService', function () {\n  var client;\n\n  beforeEach(function (done) {\n    new SwaggerClient({\n      url: \"http://localhost:8080/openapiv2/echo_service.swagger.json\",\n      usePromise: true,\n    }).then(function (c) {\n      client = c;\n      done();\n    });\n  });\n\n  describe('Echo', function () {\n    it('should echo the request back', function (done) {\n      var expected = {\n        id: \"foo\",\n        num: \"0\",\n        status: null,\n        resourceId: '',\n        nId: null\n      };\n      client.EchoService.EchoService_Echo(\n        expected,\n        { responseContentType: \"application/json\" }\n      ).then(function (resp) {\n        expect(resp.obj).toEqual(expected);\n      }).catch(function (err) {\n        done.fail(err);\n      }).then(done);\n    });\n  });\n\n  describe('EchoBody', function () {\n    it('should echo the request back', function (done) {\n      var expected = {\n        id: \"foo\",\n        num: \"0\",\n        status: null,\n        resourceId: '',\n        nId: null\n      };\n      client.EchoService.EchoService_EchoBody(\n        { body: expected },\n        { responseContentType: \"application/json\" }\n      ).then(function (resp) {\n        expect(resp.obj).toEqual(expected);\n      }).catch(function (err) {\n        done.fail(err);\n      }).then(done);\n    });\n  });\n});\n"
  },
  {
    "path": "examples/internal/browser/gulpfile.js",
    "content": "\"use strict\";\n\nconst { exec, spawn } = require('child_process');\nconst util = require('util');\nconst path = require('path');\nconst fs = require('fs');\nconst http = require('http');\nconst execPromise = util.promisify(exec);\n\n// Module paths for the example builds\nconst SERVER_MODULE = 'github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-grpc-server';\nconst GATEWAY_MODULE = 'github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-gateway-server';\n\nlet serverProcess = null;\nlet gatewayProcess = null;\n\n// Validate module path to ensure it's safe\nfunction validateModulePath(modulePath) {\n  // Module path should only contain alphanumeric, hyphens, underscores, dots, and slashes\n  if (!/^[a-zA-Z0-9\\-_.\\/]+$/.test(modulePath)) {\n    throw new Error(`Invalid module path: ${modulePath}`);\n  }\n}\n\nfunction cleanupProcesses() {\n  if (serverProcess) {\n    serverProcess.kill();\n    serverProcess = null;\n  }\n  if (gatewayProcess) {\n    gatewayProcess.kill();\n    gatewayProcess = null;\n  }\n}\n\nprocess.on('exit', cleanupProcesses);\nprocess.on('SIGINT', () => {\n  cleanupProcesses();\n  process.exit();\n});\n\nasync function buildServer() {\n  console.log('Building example server...');\n  validateModulePath(SERVER_MODULE);\n  try {\n    const { stdout, stderr } = await execPromise(\n      `go build -o bin/example-server ${SERVER_MODULE}`\n    );\n    // Only log if there's actual output (Go builds are usually silent on success)\n    if (stdout) console.log(stdout);\n    if (stderr) console.error(stderr);\n    console.log('Server built successfully');\n  } catch (error) {\n    console.error('Failed to build server:', error.message);\n    throw error;\n  }\n}\n\nasync function buildGateway() {\n  console.log('Building gateway...');\n  validateModulePath(GATEWAY_MODULE);\n  try {\n    const { stdout, stderr } = await execPromise(\n      `go build -o bin/example-gw ${GATEWAY_MODULE}`\n    );\n    // Only log if there's actual output (Go builds are usually silent on success)\n    if (stdout) console.log(stdout);\n    if (stderr) console.error(stderr);\n    console.log('Gateway built successfully');\n  } catch (error) {\n    console.error('Failed to build gateway:', error.message);\n    throw error;\n  }\n}\n\nasync function build() {\n  await buildServer();\n  await buildGateway();\n  console.log('All builds completed successfully');\n}\n\nasync function startServer() {\n  await buildServer();\n  return new Promise((resolve, reject) => {\n    const serverPath = path.join(__dirname, 'bin', 'example-server');\n    console.log(`Starting server: ${serverPath}`);\n    serverProcess = spawn(serverPath, [], { \n      stdio: ['ignore', 'pipe', 'pipe'],\n      cwd: __dirname\n    });\n    \n    serverProcess.stdout.on('data', (data) => {\n      console.log(`[Server]: ${data.toString().trim()}`);\n    });\n    \n    serverProcess.stderr.on('data', (data) => {\n      console.error(`[Server Error]: ${data.toString().trim()}`);\n    });\n    \n    serverProcess.on('error', (error) => {\n      console.error(`Failed to start server: ${error.message}`);\n      reject(error);\n    });\n    \n    serverProcess.on('exit', (code, signal) => {\n      console.log(`Server exited with code ${code} and signal ${signal}`);\n    });\n    \n    // Give server time to start\n    setTimeout(resolve, 2000);\n  });\n}\n\nasync function startGateway() {\n  await buildGateway();\n  return new Promise((resolve, reject) => {\n    const gatewayPath = path.join(__dirname, 'bin', 'example-gw');\n    const openApiDir = path.join(__dirname, '..', 'proto', 'examplepb');\n    console.log(`Starting gateway: ${gatewayPath} with openapi_dir: ${openApiDir}`);\n    gatewayProcess = spawn(gatewayPath, [\n      '--openapi_dir', openApiDir\n    ], { \n      stdio: ['ignore', 'pipe', 'pipe'],\n      cwd: __dirname\n    });\n    \n    gatewayProcess.stdout.on('data', (data) => {\n      console.log(`[Gateway]: ${data.toString().trim()}`);\n    });\n    \n    gatewayProcess.stderr.on('data', (data) => {\n      console.error(`[Gateway Error]: ${data.toString().trim()}`);\n    });\n    \n    gatewayProcess.on('error', (error) => {\n      console.error(`Failed to start gateway: ${error.message}`);\n      reject(error);\n    });\n    \n    gatewayProcess.on('exit', (code, signal) => {\n      console.log(`Gateway exited with code ${code} and signal ${signal}`);\n    });\n    \n    // Give gateway time to start\n    setTimeout(resolve, 2000);\n  });\n}\n\nasync function bundleSpecs() {\n  console.log('Bundling test specs with webpack...');\n  const specFiles = [\n    path.join(__dirname, 'a_bit_of_everything_service.spec.js'),\n    path.join(__dirname, 'echo_service.spec.js')\n  ];\n  \n  try {\n    const { stdout, stderr } = await execPromise(\n      `npx webpack --config webpack.config.js --entry ${specFiles.join(' --entry ')} --output-path ${path.join(__dirname, 'bin')} --output-filename spec.js`,\n      { cwd: __dirname }\n    );\n    if (stdout) console.log(stdout);\n    if (stderr && !stderr.includes('webpack')) console.error(stderr);\n    console.log('Specs bundled successfully');\n  } catch (error) {\n    console.error('Failed to bundle specs:', error.message);\n    throw error;\n  }\n}\n\n// Generate HTML content for Jasmine test runner\nfunction generateJasmineHTML(jasmineCore, jasmineHtml, includeResultsCapture = false) {\n  const resultsScript = includeResultsCapture ? 'window.jasmineResults = result;' : '';\n  \n  return `\n    <!DOCTYPE html>\n    <html>\n    <head>\n      <meta charset=\"utf-8\">\n      <title>Jasmine Spec Runner</title>\n      <style>\n        body { font-family: Arial, sans-serif; margin: 20px; }\n        .jasmine_html-reporter { margin: 0; padding: 0; }\n      </style>\n    </head>\n    <body>\n      <script>${jasmineCore}</script>\n      <script>${jasmineHtml}</script>\n      <script>\n        window.jasmine = jasmineRequire.core(jasmineRequire);\n        var env = jasmine.getEnv();\n        \n        // Console reporter for logging\n        var consoleReporter = {\n          jasmineStarted: function() { console.log('Jasmine started'); },\n          suiteStarted: function(result) { console.log('Suite: ' + result.description); },\n          specStarted: function(result) { console.log('  Spec: ' + result.description); },\n          specDone: function(result) {\n            console.log('  Spec done: ' + result.description + ' - ' + result.status);\n            if (result.status === 'failed') {\n              result.failedExpectations.forEach(function(expectation) {\n                console.log('    FAILED: ' + expectation.message);\n              });\n            }\n          },\n          suiteDone: function(result) {},\n          jasmineDone: function(result) {\n            console.log('Jasmine done: ' + result.overallStatus);\n            ${resultsScript}\n          }\n        };\n        env.addReporter(consoleReporter);\n        \n        // Make jasmine interface available globally\n        var jasmineInterface = jasmineRequire.interface(jasmine, env);\n        Object.assign(window, jasmineInterface);\n      </script>\n      <script src=\"/spec.js\"></script>\n      <script>\n        env.execute();\n      </script>\n    </body>\n    </html>\n  `;\n}\n\n// Load Jasmine library files\nfunction loadJasmineFiles() {\n  const jasmineCorePath = require.resolve('jasmine-core/lib/jasmine-core/jasmine.js');\n  const jasmineHtmlPath = require.resolve('jasmine-core/lib/jasmine-core/jasmine-html.js');\n  \n  return {\n    jasmineCore: fs.readFileSync(jasmineCorePath, 'utf8'),\n    jasmineHtml: fs.readFileSync(jasmineHtmlPath, 'utf8')\n  };\n}\n\n// Create HTTP server that serves test page and spec bundle\nfunction createTestServer(htmlContent, specBundle) {\n  return http.createServer((req, res) => {\n    if (req.url === '/spec.js') {\n      res.writeHead(200, { 'Content-Type': 'application/javascript' });\n      res.end(specBundle);\n    } else {\n      res.writeHead(200, { 'Content-Type': 'text/html' });\n      res.end(htmlContent);\n    }\n  });\n}\n\nasync function runTests() {\n  const { chromium } = require('playwright');\n  \n  let server = null;\n  let browser = null;\n  \n  try {\n    // Start the backends\n    console.log('Starting server and gateway...');\n    await startServer();\n    await startGateway();\n    \n    // Bundle the specs\n    await bundleSpecs();\n    \n    // Set up test server\n    console.log('Setting up test server...');\n    \n    // Load Jasmine and the bundled specs\n    const { jasmineCore, jasmineHtml } = loadJasmineFiles();\n    const specBundle = fs.readFileSync(path.join(__dirname, 'bin', 'spec.js'), 'utf8');\n\n    // Create HTML page content with results capture\n    const htmlContent = generateJasmineHTML(jasmineCore, jasmineHtml, true);\n\n    // Create HTTP server\n    server = createTestServer(htmlContent, specBundle);\n\n    // Start server on port 8000\n    await new Promise((resolve) => {\n      server.listen(8000, () => {\n        console.log('Test server listening on http://localhost:8000');\n        resolve();\n      });\n    });\n\n    // Run tests in Playwright\n    console.log('Launching browser...');\n    browser = await chromium.launch({ headless: true });\n    const context = await browser.newContext();\n    const page = await context.newPage();\n\n    console.log('Setting page timeout...');\n    page.setDefaultTimeout(120000);  // Set default timeout to 120 seconds\n\n    // Capture console output\n    page.on('console', msg => {\n      const text = msg.text();\n      console.log('[Browser]:', text);\n    });\n\n    // Capture page errors\n    page.on('pageerror', error => {\n      console.error('[Page Error]:', error.message);\n    });\n\n    console.log('Navigating to test page...');\n    // Navigate to the test server\n    await page.goto('http://localhost:8000');\n\n    console.log('Waiting for tests to complete...');\n    // Wait for tests to complete\n    await page.waitForFunction(() => window.jasmineResults !== undefined, { timeout: 120000 });\n\n    // Get results\n    const results = await page.evaluate(() => window.jasmineResults);\n    \n    await browser.close();\n    browser = null;\n\n    console.log(`\\nTest Results: ${results.overallStatus}`);\n    console.log(`Total specs: ${results.totalCount || 'N/A'}`);\n    console.log(`Failed specs: ${results.failedExpectations?.length || 0}`);\n\n    if (results.overallStatus !== 'passed') {\n      throw new Error('Tests failed');\n    }\n    \n    console.log('Tests completed successfully');\n  } catch (error) {\n    console.error('Tests failed:', error.message);\n    throw error;\n  } finally {\n    // Cleanup\n    if (browser) {\n      await browser.close();\n    }\n    if (server) {\n      server.close();\n    }\n    cleanupProcesses();\n  }\n}\n\nasync function serve() {\n  try {\n    // Start the backends\n    console.log('Starting server and gateway...');\n    await startServer();\n    await startGateway();\n    \n    // Bundle the specs\n    await bundleSpecs();\n    \n    // Start a development server\n    console.log('Starting development server on http://localhost:8000...');\n    \n    // Load Jasmine files\n    const { jasmineCore, jasmineHtml } = loadJasmineFiles();\n    \n    // Create server that dynamically loads spec bundle on each request (for development)\n    const server = http.createServer((req, res) => {\n      if (req.url === '/spec.js') {\n        const specBundle = fs.readFileSync(path.join(__dirname, 'bin', 'spec.js'), 'utf8');\n        res.writeHead(200, { 'Content-Type': 'application/javascript' });\n        res.end(specBundle);\n        return;\n      }\n      \n      // Generate HTML without results capture for development\n      const htmlContent = generateJasmineHTML(jasmineCore, jasmineHtml, false);\n      res.writeHead(200, { 'Content-Type': 'text/html' });\n      res.end(htmlContent);\n    });\n    \n    server.listen(8000, () => {\n      console.log('Development server running at http://localhost:8000');\n      console.log('Backend server running at http://localhost:9090');\n      console.log('Gateway running at http://localhost:8080');\n      console.log('Press Ctrl+C to stop');\n    });\n    \n    // Keep the process running indefinitely until terminated by user\n    await new Promise(() => {});\n  } catch (error) {\n    console.error('Serve task failed:', error.message);\n    throw error;\n  } finally {\n    cleanupProcesses();\n  }\n}\n\nexports.build = build;\nexports.buildServer = buildServer;\nexports.buildGateway = buildGateway;\nexports.test = runTests;\nexports.serve = serve;\nexports.default = runTests;\n"
  },
  {
    "path": "examples/internal/browser/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <script type=\"application/javascript\" src=\"bower_components/swagger-js/browser/swagger-client.min.js\"></script>\n    <script type=\"application/javascript\">\n      window.client = new SwaggerClient({\n        url: \"http://localhost:8080/openapiv2/echo_service.swagger.json\",\n        success: function() {\n          client.EchoService.Echo(\n              {id: \"foo\"},\n              {responseContentType: \"application/json\"},\n              function(data) {\n                document.getElementById(\"echoBack\").innerHTML = data.obj.id;\n              });\n        }\n      })\n    </script>\n  </head>\n  <body>\n    <div id=\"echoBack\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "examples/internal/browser/package.json",
    "content": "{\n  \"name\": \"grpc-gateway-example\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Example use of gRPC-Gateway from browser\",\n  \"scripts\": {\n    \"test\": \"gulp\",\n    \"postinstall\": \"playwright install chromium\"\n  },\n  \"author\": \"\",\n  \"license\": \"SEE LICENSE\",\n  \"devDependencies\": {\n    \"gulp\": \"^5.0.0\",\n    \"jasmine-core\": \"^5.5.0\",\n    \"playwright\": \"^1.49.1\",\n    \"swagger-client\": \"^2.1.32\",\n    \"webpack\": \"^5.97.1\",\n    \"webpack-cli\": \"^6.0.1\"\n  },\n  \"dependencies\": {\n    \"gulp-cli\": \"^3.1.0\"\n  }\n}\n"
  },
  {
    "path": "examples/internal/browser/spec/support/jasmine-browser.json",
    "content": "{\n  \"srcDir\": \".\",\n  \"srcFiles\": [],\n  \"specDir\": \"bin\",\n  \"specFiles\": [\n    \"spec.js\"\n  ],\n  \"helpers\": [],\n  \"env\": {\n    \"stopSpecOnExpectationFailure\": false,\n    \"stopOnSpecFailure\": false,\n    \"random\": false\n  },\n  \"browser\": {\n    \"name\": \"headlessChrome\"\n  }\n}\n"
  },
  {
    "path": "examples/internal/browser/webpack.config.js",
    "content": "const path = require('path');\n\nmodule.exports = {\n  mode: 'development',\n  devtool: 'source-map'\n};\n"
  },
  {
    "path": "examples/internal/clients/abe/.gitignore",
    "content": "/docs\n"
  },
  {
    "path": "examples/internal/clients/abe/.swagger-codegen/VERSION",
    "content": "2.4.8"
  },
  {
    "path": "examples/internal/clients/abe/.swagger-codegen-ignore",
    "content": ".gitignore\n"
  },
  {
    "path": "examples/internal/clients/abe/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"abe\",\n    srcs = [\n        \"api_a_bit_of_everything.go\",\n        \"api_camel_case_service_name.go\",\n        \"api_echo_rpc.go\",\n        \"api_snake_enum_service.go\",\n        \"client.go\",\n        \"configuration.go\",\n        \"enum_helper.go\",\n        \"model_a_bit_of_everything.go\",\n        \"model_a_bit_of_everything_1.go\",\n        \"model_a_bit_of_everything_2.go\",\n        \"model_a_bit_of_everything_3.go\",\n        \"model_a_bit_of_everything_4.go\",\n        \"model_a_bit_of_everything_5.go\",\n        \"model_a_bit_of_everything_6.go\",\n        \"model_a_bit_of_everything_7.go\",\n        \"model_a_bit_of_everything_8.go\",\n        \"model_a_bit_of_everything_nested.go\",\n        \"model_a_bit_of_everything_service_deep_path_echo_body.go\",\n        \"model_a_bit_of_everything_service_deep_path_echo_body_single_nested.go\",\n        \"model_a_bit_of_everything_service_post_with_empty_body_body.go\",\n        \"model_a_bit_of_everything_service_update_body.go\",\n        \"model_a_bit_of_everything_service_update_v2_body.go\",\n        \"model_book.go\",\n        \"model_examplepb_a_bit_of_everything.go\",\n        \"model_examplepb_a_bit_of_everything_repeated.go\",\n        \"model_examplepb_a_bit_of_everything_service_update_body.go\",\n        \"model_examplepb_bar.go\",\n        \"model_examplepb_body.go\",\n        \"model_examplepb_book.go\",\n        \"model_examplepb_check_status_response.go\",\n        \"model_examplepb_error_object.go\",\n        \"model_examplepb_error_response.go\",\n        \"model_examplepb_numeric_enum.go\",\n        \"model_examplepb_required_message_type_request.go\",\n        \"model_examplepb_snake_case_0_enum.go\",\n        \"model_examplepb_snake_case_enum.go\",\n        \"model_examplepb_snake_enum_response.go\",\n        \"model_google_rpc_status.go\",\n        \"model_message_path_enum_nested_path_enum.go\",\n        \"model_nested_deep_enum.go\",\n        \"model_oneofenum_example_enum.go\",\n        \"model_pathenum_path_enum.go\",\n        \"model_pathenum_snake_case_for_import.go\",\n        \"model_proto_examplepb_foo.go\",\n        \"model_protobuf_any.go\",\n        \"model_sub_string_message.go\",\n        \"model_the_book_to_update_.go\",\n        \"model_the_book_to_update__1.go\",\n        \"model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go\",\n        \"model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go\",\n        \"model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go\",\n        \"model_v1exampledeep_pathsingle_nested_name_single_nested.go\",\n        \"response.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/abe\",\n    deps = [\n        \"//examples/internal/proto/examplepb\",\n        \"//examples/internal/proto/pathenum\",\n        \"//runtime\",\n        \"@com_github_antihax_optional//:optional\",\n        \"@org_golang_x_oauth2//:oauth2\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":abe\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/api/swagger.yaml",
    "content": "---\nswagger: \"2.0\"\ninfo:\n  version: \"1.0\"\n  title: \"A Bit of Everything\"\n  contact:\n    name: \"gRPC-Gateway project\"\n    url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    email: \"none@example.com\"\n  license:\n    name: \"BSD 3-Clause License\"\n    url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\"\n  x-something-something: \"yadda\"\ntags:\n- name: \"echo rpc\"\n  description: \"Echo Rpc description\"\n  x-traitTag: true\n- name: \"ABitOfEverything\"\n  description: \"ABitOfEverythingService description -- which should not be used in\\\n    \\ place of the documentation comment!\"\n  externalDocs:\n    description: \"Find out more about EchoService\"\n    url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n- name: \"camelCaseServiceName\"\n- name: \"AnotherServiceWithNoBindings\"\n- name: \"SnakeEnumService\"\nschemes:\n- \"http\"\n- \"https\"\n- \"wss\"\nconsumes:\n- \"application/json\"\n- \"application/x-foo-mime\"\nproduces:\n- \"application/json\"\n- \"application/x-foo-mime\"\nsecurity:\n- ApiKeyAuth: []\n  BasicAuth: []\n- ApiKeyAuth: []\n  OAuth2:\n  - \"read\"\n  - \"write\"\npaths:\n  /v1/example/a_bit_of_everything:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CreateBody\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"Intentionally complicated message type to cover many features\\\n          \\ of Protobuf.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbABitOfEverything\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/custom/{optionalStringValue}:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Custom2\"\n      parameters:\n      - name: \"optionalStringValue\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"uuid\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"Uuid\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/echo/{value}:\n    get:\n      tags:\n      - \"echo rpc\"\n      summary: \"Summary: Echo rpc\"\n      description: \"Description Echo\"\n      operationId: \"ABitOfEverythingService_Echo\"\n      parameters:\n      - name: \"value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Value\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          examples:\n            application/json:\n              value: \"the input value\"\n          schema:\n            $ref: \"#/definitions/subStringMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"integer\"\n            format: \"integer\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        503:\n          description: \"Returned when the resource is temporarily unavailable.\"\n          schema: {}\n          x-number: 100\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n      externalDocs:\n        description: \"Find out more Echo\"\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n  /v1/example/a_bit_of_everything/params/get/nested_enum/{singleNested.ok}:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CheckNestedEnumGetQueryParams\"\n      parameters:\n      - name: \"singleNested.ok\"\n        in: \"path\"\n        description: \"DeepEnum description.\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"uuid\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"Uuid\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/params/get/{singleNested.name}:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CheckGetQueryParams\"\n      parameters:\n      - name: \"singleNested.name\"\n        in: \"path\"\n        description: \"name is nested field.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"uuid\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"Uuid\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/params/post/{stringValue}:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CheckPostQueryParams\"\n      parameters:\n      - name: \"stringValue\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n      - in: \"body\"\n        name: \"singleNested\"\n        required: true\n        schema:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n        x-exportParamName: \"SingleNested\"\n      - name: \"uuid\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"Uuid\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/query/{uuidName}:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_GetQuery\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n      security: []\n      externalDocs:\n        description: \"Find out more about GetQuery\"\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      deprecated: true\n  ? /v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}\n  : post:\n      tags:\n      - \"ABitOfEverything\"\n      summary: \"Create a new ABitOfEverything\"\n      description: \"This API creates a new ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Create\"\n      parameters:\n      - name: \"floatValue\"\n        in: \"path\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"path\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n      - name: \"int32Value\"\n        in: \"path\"\n        required: true\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n      - name: \"fixed64Value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n      - name: \"fixed32Value\"\n        in: \"path\"\n        required: true\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n      - name: \"boolValue\"\n        in: \"path\"\n        required: true\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n      - name: \"stringValue\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        pattern: \"strprefix/[^/]+\"\n        x-exportParamName: \"StringValue\"\n      - name: \"uint32Value\"\n        in: \"path\"\n        required: true\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n      - name: \"sfixed32Value\"\n        in: \"path\"\n        required: true\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n      - name: \"sfixed64Value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n      - name: \"sint32Value\"\n        in: \"path\"\n        required: true\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n      - name: \"sint64Value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n      - name: \"nonConventionalNameValue\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n      - name: \"enumValue\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n      - name: \"pathEnumValue\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n      - name: \"nestedPathEnumValue\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n      - name: \"enumValueAnnotation\"\n        in: \"path\"\n        description: \"Numeric enum description.\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"uuid\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"Uuid\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/{uuidName}:\n    head:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Exists\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n    put:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Update\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - in: \"body\"\n        name: \"body\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbABitOfEverythingServiceUpdateBody\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n    options:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CustomOptionsRequest\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/{uuidName}:custom:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Custom\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/{uuidName}:custom:custom:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_DoubleColon\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - name: \"singleNested.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n        x-optionalDataType: \"String\"\n      - name: \"singleNested.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"SingleNestedAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"singleNested.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"SingleNestedOk\"\n        x-optionalDataType: \"String\"\n      - name: \"floatValue\"\n        in: \"query\"\n        description: \"Float value field\"\n        required: true\n        type: \"number\"\n        default: 0.2\n        format: \"float\"\n        x-exportParamName: \"FloatValue\"\n      - name: \"doubleValue\"\n        in: \"query\"\n        required: true\n        type: \"number\"\n        format: \"double\"\n        x-exportParamName: \"DoubleValue\"\n      - name: \"int64Value\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Int64Value\"\n      - name: \"uint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Uint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"int32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Int32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"fixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"uint64\"\n        x-exportParamName: \"Fixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"fixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Fixed32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"boolValue\"\n        in: \"query\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"BoolValue\"\n        x-optionalDataType: \"Bool\"\n      - name: \"stringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"bytesValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"byte\"\n        x-exportParamName: \"BytesValue\"\n        x-optionalDataType: \"String\"\n      - name: \"uint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Uint32Value\"\n        x-optionalDataType: \"Int64\"\n      - name: \"enumValue\"\n        in: \"query\"\n        description: \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"pathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"ABC\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"PathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedPathEnumValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        default: \"GHI\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"NestedPathEnumValue\"\n        x-optionalDataType: \"String\"\n      - name: \"sfixed32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sfixed32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sfixed64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sfixed64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"sint32Value\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int32\"\n        x-exportParamName: \"Sint32Value\"\n        x-optionalDataType: \"Int32\"\n      - name: \"sint64Value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Sint64Value\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringValue\"\n        in: \"query\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringValue\"\n      - name: \"oneofEmpty\"\n        in: \"query\"\n        required: false\n        type: \"object\"\n        x-exportParamName: \"OneofEmpty\"\n      - name: \"oneofString\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OneofString\"\n        x-optionalDataType: \"String\"\n      - name: \"mapValue\"\n        in: \"query\"\n        description: \"map of numeric enum\"\n        required: false\n        x-exportParamName: \"MapValue\"\n      - name: \"mappedStringValue\"\n        in: \"query\"\n        description: \"Map of string title\\n\\nMap of string description.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"MappedStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"mappedNestedValue\"\n        in: \"query\"\n        required: false\n        x-exportParamName: \"MappedNestedValue\"\n      - name: \"nonConventionalNameValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NonConventionalNameValue\"\n        x-optionalDataType: \"String\"\n      - name: \"timestampValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"date-time\"\n        x-exportParamName: \"TimestampValue\"\n        x-optionalDataType: \"Time\"\n      - name: \"repeatedEnumValue\"\n        in: \"query\"\n        description: \"repeated enum value. it is comma-separated in query\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumValue\"\n      - name: \"repeatedEnumAnnotation\"\n        in: \"query\"\n        description: \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\\n          \\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedEnumAnnotation\"\n      - name: \"enumValueAnnotation\"\n        in: \"query\"\n        description: \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO:\\\n          \\ ZERO means 0\\n - ONE: ONE means 1\"\n        required: false\n        type: \"string\"\n        default: \"ZERO\"\n        enum:\n        - \"ZERO\"\n        - \"ONE\"\n        x-exportParamName: \"EnumValueAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"repeatedStringAnnotation\"\n        in: \"query\"\n        description: \"Repeated string title\\n\\nRepeated string description.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"RepeatedStringAnnotation\"\n      - name: \"nestedAnnotation.name\"\n        in: \"query\"\n        description: \"name is nested field.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NestedAnnotationName\"\n        x-optionalDataType: \"String\"\n      - name: \"nestedAnnotation.amount\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"NestedAnnotationAmount\"\n        x-optionalDataType: \"Int64\"\n      - name: \"nestedAnnotation.ok\"\n        in: \"query\"\n        description: \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n          \\ TRUE is true.\"\n        required: false\n        type: \"string\"\n        default: \"FALSE\"\n        enum:\n        - \"FALSE\"\n        - \"TRUE\"\n        x-exportParamName: \"NestedAnnotationOk\"\n        x-optionalDataType: \"String\"\n      - name: \"int64OverrideType\"\n        in: \"query\"\n        required: false\n        type: \"integer\"\n        format: \"int64\"\n        x-exportParamName: \"Int64OverrideType\"\n        x-optionalDataType: \"Int64\"\n      - name: \"requiredStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as required in Open API definition\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringViaFieldBehaviorAnnotation\"\n      - name: \"outputOnlyStringViaFieldBehaviorAnnotation\"\n        in: \"query\"\n        description: \"mark a field as readonly in Open API definition\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OutputOnlyStringViaFieldBehaviorAnnotation\"\n        x-optionalDataType: \"String\"\n      - name: \"optionalStringValue\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringValue\"\n        x-optionalDataType: \"String\"\n      - name: \"productId\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of repeated fields\\n\\nOnly digits\\\n          \\ are allowed.\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"ProductId\"\n      - name: \"optionalStringField\"\n        in: \"query\"\n        description: \"Test openapiv2 generation of required fields with annotation\\\n          \\ and jsonschema to reproduce\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"OptionalStringField\"\n        x-optionalDataType: \"String\"\n      - name: \"requiredStringField1\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField1\"\n      - name: \"requiredStringField2\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredStringField2\"\n      - name: \"required_field_behavior_json_name_custom\"\n        in: \"query\"\n        description: \"Test openapiv2 handling of required json_name fields\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldBehaviorJsonNameCustom\"\n      - name: \"required_field_schema_json_name_custom\"\n        in: \"query\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"RequiredFieldSchemaJsonNameCustom\"\n      - name: \"trailingOnly\"\n        in: \"query\"\n        description: \"Trailing only\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnly\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingOnlyDot\"\n        in: \"query\"\n        description: \"Trailing only dot.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingOnlyDot\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingBoth\"\n        in: \"query\"\n        description: \"Leading both\\n\\nTrailing both.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingBoth\"\n        x-optionalDataType: \"String\"\n      - name: \"trailingMultiline\"\n        in: \"query\"\n        description: \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\\n          \\nTrailing multiline.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"TrailingMultiline\"\n        x-optionalDataType: \"String\"\n      - name: \"uuids\"\n        in: \"query\"\n        description: \"Specify a custom format of repeated field items\"\n        required: false\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n        collectionFormat: \"multi\"\n        x-exportParamName: \"Uuids\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/a_bit_of_everything/{uuid}:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Lookup\"\n      parameters:\n      - name: \"uuid\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Uuid\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n    delete:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Delete\"\n      parameters:\n      - name: \"uuid\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Uuid\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n      security:\n      - ApiKeyAuth: []\n        OAuth2:\n        - \"read\"\n        - \"write\"\n      x-irreversible: true\n  ? /v1/example/a_bit_of_everything_repeated/{pathRepeatedFloatValue}/{pathRepeatedDoubleValue}/{pathRepeatedInt64Value}/{pathRepeatedUint64Value}/{pathRepeatedInt32Value}/{pathRepeatedFixed64Value}/{pathRepeatedFixed32Value}/{pathRepeatedBoolValue}/{pathRepeatedStringValue}/{pathRepeatedBytesValue}/{pathRepeatedUint32Value}/{pathRepeatedEnumValue}/{pathRepeatedSfixed32Value}/{pathRepeatedSfixed64Value}/{pathRepeatedSint32Value}/{pathRepeatedSint64Value}\n  : get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_GetRepeatedQuery\"\n      parameters:\n      - name: \"pathRepeatedFloatValue\"\n        in: \"path\"\n        description: \"repeated values. they are comma-separated in path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"number\"\n          format: \"float\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedFloatValue\"\n      - name: \"pathRepeatedDoubleValue\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"number\"\n          format: \"double\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedDoubleValue\"\n      - name: \"pathRepeatedInt64Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"int64\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedInt64Value\"\n      - name: \"pathRepeatedUint64Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uint64\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedUint64Value\"\n      - name: \"pathRepeatedInt32Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int32\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedInt32Value\"\n      - name: \"pathRepeatedFixed64Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uint64\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedFixed64Value\"\n      - name: \"pathRepeatedFixed32Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int64\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedFixed32Value\"\n      - name: \"pathRepeatedBoolValue\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"boolean\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedBoolValue\"\n      - name: \"pathRepeatedStringValue\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedStringValue\"\n      - name: \"pathRepeatedBytesValue\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"byte\"\n          pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedBytesValue\"\n      - name: \"pathRepeatedUint32Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int64\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedUint32Value\"\n      - name: \"pathRepeatedEnumValue\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n          enum:\n          - \"ZERO\"\n          - \"ONE\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedEnumValue\"\n      - name: \"pathRepeatedSfixed32Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int32\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedSfixed32Value\"\n      - name: \"pathRepeatedSfixed64Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"int64\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedSfixed64Value\"\n      - name: \"pathRepeatedSint32Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int32\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedSint32Value\"\n      - name: \"pathRepeatedSint64Value\"\n        in: \"path\"\n        required: true\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"int64\"\n        collectionFormat: \"csv\"\n        minItems: 1\n        x-exportParamName: \"PathRepeatedSint64Value\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverythingRepeated\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/checkStatus:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CheckStatus\"\n      parameters: []\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbCheckStatusResponse\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/deep_path/{singleNested.name}:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_DeepPathEcho\"\n      parameters:\n      - name: \"singleNested.name\"\n        in: \"path\"\n        description: \"name is nested field.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"SingleNestedName\"\n      - in: \"body\"\n        name: \"body\"\n        required: true\n        schema:\n          $ref: \"#/definitions/ABitOfEverythingServiceDeepPathEchoBody\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbABitOfEverything\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/oneofenum:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_PostOneofEnum\"\n      parameters:\n      - in: \"body\"\n        name: \"exampleEnum\"\n        required: true\n        schema:\n          $ref: \"#/definitions/oneofenumExampleEnum\"\n        x-exportParamName: \"ExampleEnum\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/requiredmessagetype:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_PostRequiredMessageType\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbRequiredMessageTypeRequest\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/snake/{who}/{what}/{where}:\n    get:\n      tags:\n      - \"SnakeEnumService\"\n      operationId: \"SnakeEnumService_SnakeEnum\"\n      parameters:\n      - name: \"who\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"value_e\"\n        - \"value_f\"\n        x-exportParamName: \"Who\"\n      - name: \"what\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"value_c\"\n        - \"value_d\"\n        x-exportParamName: \"What\"\n      - name: \"where\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"value_x\"\n        - \"value_y\"\n        x-exportParamName: \"Where\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSnakeEnumResponse\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/{book.name}:\n    patch:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_UpdateBook\"\n      parameters:\n      - name: \"book.name\"\n        in: \"path\"\n        description: \"The resource name of the book.\\n\\nFormat: `publishers/{publisher}/books/{book}`\\n\\\n          \\nExample: `publishers/1257894000000000000/books/my-book`\"\n        required: true\n        type: \"string\"\n        pattern: \"publishers/[^/]+/books/[^/]+\"\n        x-exportParamName: \"BookName\"\n      - in: \"body\"\n        name: \"book\"\n        description: \"The book to update.\\n\\nThe book's `name` field is used to identify\\\n          \\ the book to be updated.\\nFormat: publishers/{publisher}/books/{book}\"\n        required: true\n        schema:\n          $ref: \"The book to update.\"\n        x-exportParamName: \"Book\"\n      - name: \"allowMissing\"\n        in: \"query\"\n        description: \"If set to true, and the book is not found, a new book will be\\\n          \\ created.\\nIn this situation, `update_mask` is ignored.\"\n        required: false\n        type: \"boolean\"\n        x-exportParamName: \"AllowMissing\"\n        x-optionalDataType: \"Bool\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbBook\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/{parent}/books:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      summary: \"Create a book.\"\n      operationId: \"ABitOfEverythingService_CreateBook\"\n      parameters:\n      - name: \"parent\"\n        in: \"path\"\n        description: \"The publisher in which to create the book.\\n\\nFormat: `publishers/{publisher}`\\n\\\n          \\nExample: `publishers/1257894000000000000`\"\n        required: true\n        type: \"string\"\n        pattern: \"publishers/[^/]+\"\n        x-exportParamName: \"Parent\"\n      - in: \"body\"\n        name: \"book\"\n        description: \"The book to create.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbBook\"\n        x-exportParamName: \"Book\"\n      - name: \"bookId\"\n        in: \"query\"\n        description: \"The ID to use for the book.\\n\\nThis must start with an alphanumeric\\\n          \\ character.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"BookId\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbBook\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/a_bit_of_everything/{uuidName}:\n    put:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_UpdateV2\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - in: \"body\"\n        name: \"abe\"\n        description: \"A bit of everything\\n\\nIntentionally complicated message type\\\n          \\ to cover many features of Protobuf.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/A bit of everything\"\n        x-exportParamName: \"Abe\"\n      - name: \"updateMask\"\n        in: \"query\"\n        description: \"The paths to update.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"UpdateMask\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n    patch:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_UpdateV22\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - in: \"body\"\n        name: \"abe\"\n        description: \"A bit of everything\\n\\nIntentionally complicated message type\\\n          \\ to cover many features of Protobuf.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/A bit of everything_1\"\n        x-exportParamName: \"Abe\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/echo:\n    get:\n      tags:\n      - \"echo rpc\"\n      summary: \"Summary: Echo rpc\"\n      description: \"Description Echo\"\n      operationId: \"ABitOfEverythingService_Echo3\"\n      parameters:\n      - name: \"value\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Value\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          examples:\n            application/json:\n              value: \"the input value\"\n          schema:\n            $ref: \"#/definitions/subStringMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"integer\"\n            format: \"integer\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        503:\n          description: \"Returned when the resource is temporarily unavailable.\"\n          schema: {}\n          x-number: 100\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n      externalDocs:\n        description: \"Find out more Echo\"\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    post:\n      tags:\n      - \"echo rpc\"\n      summary: \"Summary: Echo rpc\"\n      description: \"Description Echo\"\n      operationId: \"ABitOfEverythingService_Echo2\"\n      parameters:\n      - in: \"body\"\n        name: \"value\"\n        required: true\n        schema:\n          type: \"string\"\n        x-exportParamName: \"Value\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          examples:\n            application/json:\n              value: \"the input value\"\n          schema:\n            $ref: \"#/definitions/subStringMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"integer\"\n            format: \"integer\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        503:\n          description: \"Returned when the resource is temporarily unavailable.\"\n          schema: {}\n          x-number: 100\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n      externalDocs:\n        description: \"Find out more Echo\"\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n  /v2/example/empty:\n    get:\n      tags:\n      - \"camelCaseServiceName\"\n      operationId: \"camelCaseServiceName_Empty\"\n      parameters: []\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/errorwithdetails:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_ErrorWithDetails\"\n      parameters: []\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/overwriterequestcontenttype:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_OverwriteRequestContentType\"\n      consumes:\n      - \"application/x-bar-mime\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbBody\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/overwriteresponsecontenttype:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_OverwriteResponseContentType\"\n      produces:\n      - \"application/text\"\n      parameters: []\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"string\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/postwithemptybody/{name}:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_PostWithEmptyBody\"\n      parameters:\n      - name: \"name\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Name\"\n      - in: \"body\"\n        name: \"body\"\n        required: true\n        schema:\n          $ref: \"#/definitions/ABitOfEverythingServicePostWithEmptyBodyBody\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/timeout:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_Timeout\"\n      parameters: []\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/example/withbody/{id}:\n    post:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_GetMessageWithBody\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - in: \"body\"\n        name: \"data\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbBody\"\n        x-exportParamName: \"Data\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2/{value}:check:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CheckExternalPathEnum\"\n      parameters:\n      - name: \"value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"ABC\"\n        - \"DEF\"\n        x-exportParamName: \"Value\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v2a/example/a_bit_of_everything/{uuidName}:\n    patch:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_UpdateV23\"\n      parameters:\n      - name: \"uuidName\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"uuid\"\n        x-internal: true\n        x-exportParamName: \"UuidName\"\n      - in: \"body\"\n        name: \"body\"\n        required: true\n        schema:\n          $ref: \"#/definitions/ABitOfEverythingServiceUpdateV2Body\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v3/{value}:check:\n    get:\n      tags:\n      - \"ABitOfEverything\"\n      operationId: \"ABitOfEverythingService_CheckExternalNestedPathEnum\"\n      parameters:\n      - name: \"value\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        enum:\n        - \"GHI\"\n        - \"JKL\"\n        x-exportParamName: \"Value\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            type: \"object\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        418:\n          description: \"I'm a teapot.\"\n          schema:\n            $ref: \"#/definitions/examplepbNumericEnum\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/examplepbErrorResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\nsecurityDefinitions:\n  ApiKeyAuth:\n    type: \"apiKey\"\n    name: \"X-API-Key\"\n    in: \"header\"\n    x-amazon-apigateway-authorizer:\n      authorizerResultTtlInSeconds: 60\n      type: \"token\"\n    x-amazon-apigateway-authtype: \"oauth2\"\n  BasicAuth:\n    type: \"basic\"\n  OAuth2:\n    type: \"oauth2\"\n    authorizationUrl: \"https://example.com/oauth/authorize\"\n    tokenUrl: \"https://example.com/oauth/token\"\n    flow: \"accessCode\"\n    scopes:\n      admin: \"Grants read and write access to administrative information\"\n      read: \"Grants read access\"\n      write: \"Grants write access\"\ndefinitions:\n  ABitOfEverythingNested:\n    type: \"object\"\n    properties:\n      name:\n        type: \"string\"\n        description: \"name is nested field.\"\n      amount:\n        type: \"integer\"\n        format: \"int64\"\n      ok:\n        description: \"DeepEnum description.\"\n        $ref: \"#/definitions/NestedDeepEnum\"\n    description: \"Nested is nested type.\"\n    example:\n      ok: \"TRUE\"\n  ABitOfEverythingServiceDeepPathEchoBody:\n    type: \"object\"\n    required:\n    - \"doubleValue\"\n    - \"floatValue\"\n    - \"int64Value\"\n    - \"requiredStringField1\"\n    - \"requiredStringField2\"\n    - \"requiredStringViaFieldBehaviorAnnotation\"\n    - \"required_field_behavior_json_name_custom\"\n    - \"required_field_schema_json_name_custom\"\n    - \"uuid\"\n    properties:\n      singleNested:\n        $ref: \"#/definitions/ABitOfEverythingServiceDeepPathEchoBody_singleNested\"\n      uuid:\n        type: \"string\"\n        format: \"uuid\"\n        minLength: 1\n        pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n        x-internal: true\n      nested:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      floatValue:\n        type: \"number\"\n        format: \"float\"\n        description: \"Float value field\"\n        default: 0.2\n      doubleValue:\n        type: \"number\"\n        format: \"double\"\n      int64Value:\n        type: \"string\"\n        format: \"int64\"\n      uint64Value:\n        type: \"string\"\n        format: \"uint64\"\n      int32Value:\n        type: \"integer\"\n        format: \"int32\"\n      fixed64Value:\n        type: \"string\"\n        format: \"uint64\"\n      fixed32Value:\n        type: \"integer\"\n        format: \"int64\"\n      boolValue:\n        type: \"boolean\"\n      stringValue:\n        type: \"string\"\n      bytesValue:\n        type: \"string\"\n        format: \"byte\"\n        pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n      uint32Value:\n        type: \"integer\"\n        format: \"int64\"\n      enumValue:\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      pathEnumValue:\n        $ref: \"#/definitions/pathenumPathEnum\"\n      nestedPathEnumValue:\n        $ref: \"#/definitions/MessagePathEnumNestedPathEnum\"\n      sfixed32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sfixed64Value:\n        type: \"string\"\n        format: \"int64\"\n      sint32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sint64Value:\n        type: \"string\"\n        format: \"int64\"\n      repeatedStringValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n      oneofEmpty:\n        type: \"object\"\n        properties: {}\n      oneofString:\n        type: \"string\"\n      mapValue:\n        type: \"object\"\n        title: \"map of numeric enum\"\n        additionalProperties:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      mappedStringValue:\n        type: \"object\"\n        description: \"Map of string description.\"\n        title: \"Map of string title\"\n        additionalProperties:\n          type: \"string\"\n      mappedNestedValue:\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nonConventionalNameValue:\n        type: \"string\"\n      timestampValue:\n        type: \"string\"\n        format: \"date-time\"\n      repeatedEnumValue:\n        type: \"array\"\n        title: \"repeated enum value. it is comma-separated in query\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedEnumAnnotation:\n        type: \"array\"\n        description: \"Repeated numeric enum description.\"\n        title: \"Repeated numeric enum title\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      enumValueAnnotation:\n        description: \"Numeric enum description.\"\n        title: \"Numeric enum title\"\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedStringAnnotation:\n        type: \"array\"\n        description: \"Repeated string description.\"\n        title: \"Repeated string title\"\n        items:\n          type: \"string\"\n      repeatedNestedAnnotation:\n        type: \"array\"\n        description: \"Repeated nested object description.\"\n        title: \"Repeated nested object title\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nestedAnnotation:\n        description: \"Nested object description.\"\n        title: \"Nested object title\"\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      int64OverrideType:\n        type: \"integer\"\n        format: \"int64\"\n      requiredStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as required in Open API definition\"\n      outputOnlyStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as readonly in Open API definition\"\n        readOnly: true\n      optionalStringValue:\n        type: \"string\"\n      productId:\n        type: \"array\"\n        description: \"Only digits are allowed.\"\n        title: \"Test openapiv2 generation of repeated fields\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n      optionalStringField:\n        type: \"string\"\n        title: \"Test openapiv2 generation of required fields with annotation and jsonschema\\\n          \\ to reproduce\"\n      requiredStringField1:\n        type: \"string\"\n      requiredStringField2:\n        type: \"string\"\n      required_field_behavior_json_name_custom:\n        type: \"string\"\n        title: \"Test openapiv2 handling of required json_name fields\"\n      required_field_schema_json_name_custom:\n        type: \"string\"\n      trailingOnly:\n        type: \"string\"\n        title: \"Trailing only\"\n      trailingOnlyDot:\n        type: \"string\"\n        description: \"Trailing only dot.\"\n      trailingBoth:\n        type: \"string\"\n        description: \"Trailing both.\"\n        title: \"Leading both\"\n      trailingMultiline:\n        type: \"string\"\n        description: \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\"\n        title: \"Leading multiline\"\n      uuids:\n        type: \"array\"\n        title: \"Specify a custom format of repeated field items\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n    externalDocs:\n      description: \"Find out more about ABitOfEverything\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    title: \"A bit of everything\"\n    description: \"Intentionally complicated message type to cover many features of\\\n      \\ Protobuf.\"\n    example:\n      int64_value: 12\n      double_value: 12.3\n    x-a-bit-of-everything-foo: \"bar\"\n  ABitOfEverythingServicePostWithEmptyBodyBody:\n    type: \"object\"\n  ABitOfEverythingServiceUpdateV2Body:\n    type: \"object\"\n    properties:\n      abe:\n        $ref: \"#/definitions/A bit of everything_2\"\n      updateMask:\n        type: \"string\"\n        description: \"The paths to update.\"\n    title: \"UpdateV2Request request for update includes the message and the update\\\n      \\ mask\"\n    example:\n      abe: \"{\\\"int64_value\\\":12,\\\"double_value\\\":12.3}\"\n      updateMask: \"updateMask\"\n  MessagePathEnumNestedPathEnum:\n    type: \"string\"\n    enum:\n    - \"GHI\"\n    - \"JKL\"\n    default: \"GHI\"\n  NestedDeepEnum:\n    type: \"string\"\n    description: \"DeepEnum is one or zero.\\n\\n - FALSE: FALSE is false.\\n - TRUE:\\\n      \\ TRUE is true.\"\n    enum:\n    - \"FALSE\"\n    - \"TRUE\"\n    default: \"FALSE\"\n  examplepbABitOfEverything:\n    type: \"object\"\n    required:\n    - \"doubleValue\"\n    - \"floatValue\"\n    - \"int64Value\"\n    - \"requiredStringField1\"\n    - \"requiredStringField2\"\n    - \"requiredStringViaFieldBehaviorAnnotation\"\n    - \"required_field_behavior_json_name_custom\"\n    - \"required_field_schema_json_name_custom\"\n    - \"uuid\"\n    properties:\n      singleNested:\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      uuid:\n        type: \"string\"\n        format: \"uuid\"\n        minLength: 1\n        pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n        x-internal: true\n      nested:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      floatValue:\n        type: \"number\"\n        format: \"float\"\n        description: \"Float value field\"\n        default: 0.2\n      doubleValue:\n        type: \"number\"\n        format: \"double\"\n      int64Value:\n        type: \"string\"\n        format: \"int64\"\n      uint64Value:\n        type: \"string\"\n        format: \"uint64\"\n      int32Value:\n        type: \"integer\"\n        format: \"int32\"\n      fixed64Value:\n        type: \"string\"\n        format: \"uint64\"\n      fixed32Value:\n        type: \"integer\"\n        format: \"int64\"\n      boolValue:\n        type: \"boolean\"\n      stringValue:\n        type: \"string\"\n      bytesValue:\n        type: \"string\"\n        format: \"byte\"\n        pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n      uint32Value:\n        type: \"integer\"\n        format: \"int64\"\n      enumValue:\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      pathEnumValue:\n        $ref: \"#/definitions/pathenumPathEnum\"\n      nestedPathEnumValue:\n        $ref: \"#/definitions/MessagePathEnumNestedPathEnum\"\n      sfixed32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sfixed64Value:\n        type: \"string\"\n        format: \"int64\"\n      sint32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sint64Value:\n        type: \"string\"\n        format: \"int64\"\n      repeatedStringValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n      oneofEmpty:\n        type: \"object\"\n        properties: {}\n      oneofString:\n        type: \"string\"\n      mapValue:\n        type: \"object\"\n        title: \"map of numeric enum\"\n        additionalProperties:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      mappedStringValue:\n        type: \"object\"\n        description: \"Map of string description.\"\n        title: \"Map of string title\"\n        additionalProperties:\n          type: \"string\"\n      mappedNestedValue:\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nonConventionalNameValue:\n        type: \"string\"\n      timestampValue:\n        type: \"string\"\n        format: \"date-time\"\n      repeatedEnumValue:\n        type: \"array\"\n        title: \"repeated enum value. it is comma-separated in query\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedEnumAnnotation:\n        type: \"array\"\n        description: \"Repeated numeric enum description.\"\n        title: \"Repeated numeric enum title\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      enumValueAnnotation:\n        description: \"Numeric enum description.\"\n        title: \"Numeric enum title\"\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedStringAnnotation:\n        type: \"array\"\n        description: \"Repeated string description.\"\n        title: \"Repeated string title\"\n        items:\n          type: \"string\"\n      repeatedNestedAnnotation:\n        type: \"array\"\n        description: \"Repeated nested object description.\"\n        title: \"Repeated nested object title\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nestedAnnotation:\n        description: \"Nested object description.\"\n        title: \"Nested object title\"\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      int64OverrideType:\n        type: \"integer\"\n        format: \"int64\"\n      requiredStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as required in Open API definition\"\n      outputOnlyStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as readonly in Open API definition\"\n        readOnly: true\n      optionalStringValue:\n        type: \"string\"\n      productId:\n        type: \"array\"\n        description: \"Only digits are allowed.\"\n        title: \"Test openapiv2 generation of repeated fields\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n      optionalStringField:\n        type: \"string\"\n        title: \"Test openapiv2 generation of required fields with annotation and jsonschema\\\n          \\ to reproduce\"\n      requiredStringField1:\n        type: \"string\"\n      requiredStringField2:\n        type: \"string\"\n      required_field_behavior_json_name_custom:\n        type: \"string\"\n        title: \"Test openapiv2 handling of required json_name fields\"\n      required_field_schema_json_name_custom:\n        type: \"string\"\n      trailingOnly:\n        type: \"string\"\n        title: \"Trailing only\"\n      trailingOnlyDot:\n        type: \"string\"\n        description: \"Trailing only dot.\"\n      trailingBoth:\n        type: \"string\"\n        description: \"Trailing both.\"\n        title: \"Leading both\"\n      trailingMultiline:\n        type: \"string\"\n        description: \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\"\n        title: \"Leading multiline\"\n      uuids:\n        type: \"array\"\n        title: \"Specify a custom format of repeated field items\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n    externalDocs:\n      description: \"Find out more about ABitOfEverything\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    title: \"A bit of everything\"\n    description: \"Intentionally complicated message type to cover many features of\\\n      \\ Protobuf.\"\n    example:\n      int64_value: 12\n      double_value: 12.3\n    x-a-bit-of-everything-foo: \"bar\"\n  examplepbABitOfEverythingRepeated:\n    type: \"object\"\n    properties:\n      pathRepeatedFloatValue:\n        type: \"array\"\n        title: \"repeated values. they are comma-separated in path\"\n        items:\n          type: \"number\"\n          format: \"float\"\n      pathRepeatedDoubleValue:\n        type: \"array\"\n        items:\n          type: \"number\"\n          format: \"double\"\n      pathRepeatedInt64Value:\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"int64\"\n      pathRepeatedUint64Value:\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uint64\"\n      pathRepeatedInt32Value:\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int32\"\n      pathRepeatedFixed64Value:\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uint64\"\n      pathRepeatedFixed32Value:\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int64\"\n      pathRepeatedBoolValue:\n        type: \"array\"\n        items:\n          type: \"boolean\"\n      pathRepeatedStringValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n      pathRepeatedBytesValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"byte\"\n          pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n      pathRepeatedUint32Value:\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int64\"\n      pathRepeatedEnumValue:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      pathRepeatedSfixed32Value:\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int32\"\n      pathRepeatedSfixed64Value:\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"int64\"\n      pathRepeatedSint32Value:\n        type: \"array\"\n        items:\n          type: \"integer\"\n          format: \"int32\"\n      pathRepeatedSint64Value:\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"int64\"\n    title: \"ABitOfEverythingRepeated is used to validate repeated path parameter functionality\"\n    example:\n      path_repeated_bool_value:\n      - true\n      - true\n      - false\n      - true\n      path_repeated_int32_value:\n      - 1\n      - 2\n      - 3\n  examplepbABitOfEverythingServiceUpdateBody:\n    type: \"object\"\n    required:\n    - \"doubleValue\"\n    - \"floatValue\"\n    - \"int64Value\"\n    - \"requiredStringField1\"\n    - \"requiredStringField2\"\n    - \"requiredStringViaFieldBehaviorAnnotation\"\n    - \"required_field_behavior_json_name_custom\"\n    - \"required_field_schema_json_name_custom\"\n    properties:\n      singleNested:\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      nested:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      floatValue:\n        type: \"number\"\n        format: \"float\"\n        description: \"Float value field\"\n        default: 0.2\n      doubleValue:\n        type: \"number\"\n        format: \"double\"\n      int64Value:\n        type: \"string\"\n        format: \"int64\"\n      uint64Value:\n        type: \"string\"\n        format: \"uint64\"\n      int32Value:\n        type: \"integer\"\n        format: \"int32\"\n      fixed64Value:\n        type: \"string\"\n        format: \"uint64\"\n      fixed32Value:\n        type: \"integer\"\n        format: \"int64\"\n      boolValue:\n        type: \"boolean\"\n      stringValue:\n        type: \"string\"\n      bytesValue:\n        type: \"string\"\n        format: \"byte\"\n        pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n      uint32Value:\n        type: \"integer\"\n        format: \"int64\"\n      enumValue:\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      pathEnumValue:\n        $ref: \"#/definitions/pathenumPathEnum\"\n      nestedPathEnumValue:\n        $ref: \"#/definitions/MessagePathEnumNestedPathEnum\"\n      sfixed32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sfixed64Value:\n        type: \"string\"\n        format: \"int64\"\n      sint32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sint64Value:\n        type: \"string\"\n        format: \"int64\"\n      repeatedStringValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n      oneofEmpty:\n        type: \"object\"\n        properties: {}\n      oneofString:\n        type: \"string\"\n      mapValue:\n        type: \"object\"\n        title: \"map of numeric enum\"\n        additionalProperties:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      mappedStringValue:\n        type: \"object\"\n        description: \"Map of string description.\"\n        title: \"Map of string title\"\n        additionalProperties:\n          type: \"string\"\n      mappedNestedValue:\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nonConventionalNameValue:\n        type: \"string\"\n      timestampValue:\n        type: \"string\"\n        format: \"date-time\"\n      repeatedEnumValue:\n        type: \"array\"\n        title: \"repeated enum value. it is comma-separated in query\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedEnumAnnotation:\n        type: \"array\"\n        description: \"Repeated numeric enum description.\"\n        title: \"Repeated numeric enum title\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      enumValueAnnotation:\n        description: \"Numeric enum description.\"\n        title: \"Numeric enum title\"\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedStringAnnotation:\n        type: \"array\"\n        description: \"Repeated string description.\"\n        title: \"Repeated string title\"\n        items:\n          type: \"string\"\n      repeatedNestedAnnotation:\n        type: \"array\"\n        description: \"Repeated nested object description.\"\n        title: \"Repeated nested object title\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nestedAnnotation:\n        description: \"Nested object description.\"\n        title: \"Nested object title\"\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      int64OverrideType:\n        type: \"integer\"\n        format: \"int64\"\n      requiredStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as required in Open API definition\"\n      outputOnlyStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as readonly in Open API definition\"\n        readOnly: true\n      optionalStringValue:\n        type: \"string\"\n      productId:\n        type: \"array\"\n        description: \"Only digits are allowed.\"\n        title: \"Test openapiv2 generation of repeated fields\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n      optionalStringField:\n        type: \"string\"\n        title: \"Test openapiv2 generation of required fields with annotation and jsonschema\\\n          \\ to reproduce\"\n      requiredStringField1:\n        type: \"string\"\n      requiredStringField2:\n        type: \"string\"\n      required_field_behavior_json_name_custom:\n        type: \"string\"\n        title: \"Test openapiv2 handling of required json_name fields\"\n      required_field_schema_json_name_custom:\n        type: \"string\"\n      trailingOnly:\n        type: \"string\"\n        title: \"Trailing only\"\n      trailingOnlyDot:\n        type: \"string\"\n        description: \"Trailing only dot.\"\n      trailingBoth:\n        type: \"string\"\n        description: \"Trailing both.\"\n        title: \"Leading both\"\n      trailingMultiline:\n        type: \"string\"\n        description: \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\"\n        title: \"Leading multiline\"\n      uuids:\n        type: \"array\"\n        title: \"Specify a custom format of repeated field items\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n    externalDocs:\n      description: \"Find out more about ABitOfEverything\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    title: \"A bit of everything\"\n    description: \"Intentionally complicated message type to cover many features of\\\n      \\ Protobuf.\"\n    example:\n      int64_value: 12\n      double_value: 12.3\n    x-a-bit-of-everything-foo: \"bar\"\n  examplepbBar:\n    type: \"object\"\n    required:\n    - \"id\"\n    properties:\n      id:\n        type: \"string\"\n  examplepbBody:\n    type: \"object\"\n    properties:\n      name:\n        type: \"string\"\n  examplepbBook:\n    type: \"object\"\n    properties:\n      name:\n        type: \"string\"\n        description: \"The resource name of the book.\\n\\nFormat: `publishers/{publisher}/books/{book}`\\n\\\n          \\nExample: `publishers/1257894000000000000/books/my-book`\"\n      id:\n        type: \"string\"\n        description: \"Output only. The book's ID.\"\n        readOnly: true\n      createTime:\n        type: \"string\"\n        format: \"date-time\"\n        description: \"Output only. Creation time of the book.\"\n        readOnly: true\n    description: \"An example resource type from AIP-123 used to test the behavior\\\n      \\ described in\\nthe CreateBookRequest message.\\n\\nSee: https://google.aip.dev/123\"\n    example:\n      createTime: \"2000-01-23T04:56:07.000+00:00\"\n      name: \"name\"\n      id: \"id\"\n  examplepbCheckStatusResponse:\n    type: \"object\"\n    properties:\n      status:\n        $ref: \"#/definitions/googleRpcStatus\"\n    example:\n      status:\n        code: 0\n        details:\n        - '@type': \"@type\"\n        - '@type': \"@type\"\n        message: \"message\"\n  examplepbErrorObject:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n        format: \"integer\"\n        description: \"Response code\"\n        title: \"code\"\n      message:\n        type: \"string\"\n        description: \"Response message\"\n        title: \"message\"\n        pattern: \"^[a-zA-Z0-9]{1, 32}$\"\n  examplepbErrorResponse:\n    type: \"object\"\n    properties:\n      correlationId:\n        type: \"string\"\n        format: \"uuid\"\n        example: \"2438ac3c-37eb-4902-adef-ed16b4431030\"\n        description: \"Unique event identifier for server requests\"\n        title: \"x-correlation-id\"\n        pattern: \"^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$\"\n      error:\n        $ref: \"#/definitions/examplepbErrorObject\"\n  examplepbNumericEnum:\n    type: \"string\"\n    externalDocs:\n      description: \"Find out more about ABitOfEverything\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    title: \"NumericEnum\"\n    description: \"NumericEnum is one or zero.\"\n    example: \"ZERO\"\n    enum:\n    - \"ZERO\"\n    - \"ONE\"\n    default: \"ZERO\"\n    x-a-bit-of-everything-foo: \"bar\"\n  examplepbRequiredMessageTypeRequest:\n    type: \"object\"\n    required:\n    - \"foo\"\n    - \"id\"\n    properties:\n      id:\n        type: \"string\"\n      foo:\n        $ref: \"#/definitions/protoExamplepbFoo\"\n    title: \"Required message type -> OpenAPI\\nhttps://github.com/grpc-ecosystem/grpc-gateway/issues/2837\"\n  examplepbSnakeEnumResponse:\n    type: \"object\"\n  examplepbSnake_case_0_enum:\n    type: \"string\"\n    title: \"Ignoring lint warnings as this enum type exist to validate proper functionality\\n\\\n      for projects that don't follow these lint rules.\\nbuf:lint:ignore ENUM_PASCAL_CASE\"\n    description: \"- value_e: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\\n - value_f:\\\n      \\ buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\"\n    enum:\n    - \"value_e\"\n    - \"value_f\"\n    default: \"value_e\"\n  examplepbSnake_case_enum:\n    type: \"string\"\n    title: \"Ignoring lint warnings as this enum type exist to validate proper functionality\\n\\\n      for projects that don't follow these lint rules.\\nbuf:lint:ignore ENUM_PASCAL_CASE\"\n    description: \"- value_c: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\\n - value_d:\\\n      \\ buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\"\n    enum:\n    - \"value_c\"\n    - \"value_d\"\n    default: \"value_c\"\n  googleRpcStatus:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n        format: \"int32\"\n        description: \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n      message:\n        type: \"string\"\n        description: \"A developer-facing error message, which should be in English.\\\n          \\ Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details]\\\n          \\ field, or localized by the client.\"\n      details:\n        type: \"array\"\n        description: \"A list of messages that carry the error details.  There is a\\\n          \\ common set of\\nmessage types for APIs to use.\"\n        items:\n          $ref: \"#/definitions/protobufAny\"\n    description: \"The `Status` type defines a logical error model that is suitable\\\n      \\ for\\ndifferent programming environments, including REST APIs and RPC APIs.\\\n      \\ It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\n\\\n      three pieces of data: error code, error message, and error details.\\n\\nYou can\\\n      \\ find out more about this error model and how to work with it in the\\n[API\\\n      \\ Design Guide](https://cloud.google.com/apis/design/errors).\"\n    example:\n      code: 0\n      details:\n      - '@type': \"@type\"\n      - '@type': \"@type\"\n      message: \"message\"\n  oneofenumExampleEnum:\n    type: \"string\"\n    enum:\n    - \"EXAMPLE_ENUM_UNSPECIFIED\"\n    - \"EXAMPLE_ENUM_FIRST\"\n    default: \"EXAMPLE_ENUM_UNSPECIFIED\"\n  pathenumPathEnum:\n    type: \"string\"\n    enum:\n    - \"ABC\"\n    - \"DEF\"\n    default: \"ABC\"\n  pathenumSnake_case_for_import:\n    type: \"string\"\n    title: \"Ignoring lint warnings as this enum type exist to validate proper functionality\\n\\\n      for projects that don't follow these lint rules.\\nbuf:lint:ignore ENUM_PASCAL_CASE\"\n    description: \"- value_x: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\\n - value_y:\\\n      \\ buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\"\n    enum:\n    - \"value_x\"\n    - \"value_y\"\n    default: \"value_x\"\n  protoExamplepbFoo:\n    type: \"object\"\n    required:\n    - \"bar\"\n    properties:\n      bar:\n        $ref: \"#/definitions/examplepbBar\"\n  protobufAny:\n    type: \"object\"\n    properties:\n      '@type':\n        type: \"string\"\n        description: \"A URL/resource name that uniquely identifies the type of the\\\n          \\ serialized\\nprotocol buffer message. This string must contain at least\\n\\\n          one \\\"/\\\" character. The last segment of the URL's path must represent\\n\\\n          the fully qualified name of the type (as in\\n`path/google.protobuf.Duration`).\\\n          \\ The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\\n          \\nIn practice, teams usually precompile into the binary all types that they\\n\\\n          expect it to use in the context of Any. However, for URLs which use the\\n\\\n          scheme `http`, `https`, or no scheme, one can optionally set up a type\\n\\\n          server that maps type URLs to message definitions as follows:\\n\\n* If no\\\n          \\ scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must\\\n          \\ yield a [google.protobuf.Type][]\\n  value in binary format, or produce\\\n          \\ an error.\\n* Applications are allowed to cache lookup results based on\\\n          \\ the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup.\\\n          \\ Therefore, binary compatibility needs to be preserved\\n  on changes to\\\n          \\ types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote:\\\n          \\ this functionality is not currently available in the official\\nprotobuf\\\n          \\ release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\\n          \\ As of May 2023, there are no widely used type server\\nimplementations\\\n          \\ and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or\\\n          \\ the empty scheme) might be\\nused with implementation specific semantics.\"\n    description: \"`Any` contains an arbitrary serialized protocol buffer message along\\\n      \\ with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf\\\n      \\ library provides support to pack/unpack Any values in the form\\nof utility\\\n      \\ functions or additional generated methods of the Any type.\\n\\nExample 1: Pack\\\n      \\ and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n\\\n      \\    ...\\n    if (any.UnpackTo(&foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack\\\n      \\ and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n\\\n      \\    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n\\\n      \\    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n\\\n      \\      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack\\\n      \\ and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n \\\n      \\   any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n\\\n      \\      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := &pb.Foo{...}\\n\\\n      \\     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n\\\n      \\     ...\\n     foo := &pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err !=\\\n      \\ nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library\\\n      \\ will by default use\\n'type.googleapis.com/full.type.name' as the type URL\\\n      \\ and the unpack\\nmethods only use the fully qualified type name after the last\\\n      \\ '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\n\\\n      name \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses\\\n      \\ the regular\\nrepresentation of the deserialized, embedded message, with an\\n\\\n      additional field `@type` which contains the type URL. Example:\\n\\n    package\\\n      \\ google.profile;\\n    message Person {\\n      string first_name = 1;\\n    \\\n      \\  string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\"\\\n      ,\\n      \\\"firstName\\\": <string>,\\n      \\\"lastName\\\": <string>\\n    }\\n\\nIf\\\n      \\ the embedded message type is well-known and has a custom JSON\\nrepresentation,\\\n      \\ that representation will be embedded adding a field\\n`value` which holds the\\\n      \\ custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\\n      \\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n\\\n      \\      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    example:\n      '@type': \"@type\"\n    additionalProperties: {}\n  subStringMessage:\n    type: \"object\"\n    properties:\n      value:\n        type: \"string\"\n  The book to update.:\n    type: \"object\"\n    properties:\n      id:\n        type: \"string\"\n        description: \"Output only. The book's ID.\"\n        readOnly: true\n      createTime:\n        type: \"string\"\n        format: \"date-time\"\n        description: \"Output only. Creation time of the book.\"\n        readOnly: true\n    title: \"The book to update.\"\n    description: \"The book's `name` field is used to identify the book to be updated.\\n\\\n      Format: publishers/{publisher}/books/{book}\"\n  A bit of everything:\n    type: \"object\"\n    required:\n    - \"doubleValue\"\n    - \"floatValue\"\n    - \"int64Value\"\n    - \"requiredStringField1\"\n    - \"requiredStringField2\"\n    - \"requiredStringViaFieldBehaviorAnnotation\"\n    - \"required_field_behavior_json_name_custom\"\n    - \"required_field_schema_json_name_custom\"\n    properties:\n      singleNested:\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      nested:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      floatValue:\n        type: \"number\"\n        format: \"float\"\n        description: \"Float value field\"\n        default: 0.2\n      doubleValue:\n        type: \"number\"\n        format: \"double\"\n      int64Value:\n        type: \"string\"\n        format: \"int64\"\n      uint64Value:\n        type: \"string\"\n        format: \"uint64\"\n      int32Value:\n        type: \"integer\"\n        format: \"int32\"\n      fixed64Value:\n        type: \"string\"\n        format: \"uint64\"\n      fixed32Value:\n        type: \"integer\"\n        format: \"int64\"\n      boolValue:\n        type: \"boolean\"\n      stringValue:\n        type: \"string\"\n      bytesValue:\n        type: \"string\"\n        format: \"byte\"\n        pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n      uint32Value:\n        type: \"integer\"\n        format: \"int64\"\n      enumValue:\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      pathEnumValue:\n        $ref: \"#/definitions/pathenumPathEnum\"\n      nestedPathEnumValue:\n        $ref: \"#/definitions/MessagePathEnumNestedPathEnum\"\n      sfixed32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sfixed64Value:\n        type: \"string\"\n        format: \"int64\"\n      sint32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sint64Value:\n        type: \"string\"\n        format: \"int64\"\n      repeatedStringValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n      oneofEmpty:\n        type: \"object\"\n        properties: {}\n      oneofString:\n        type: \"string\"\n      mapValue:\n        type: \"object\"\n        title: \"map of numeric enum\"\n        additionalProperties:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      mappedStringValue:\n        type: \"object\"\n        description: \"Map of string description.\"\n        title: \"Map of string title\"\n        additionalProperties:\n          type: \"string\"\n      mappedNestedValue:\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nonConventionalNameValue:\n        type: \"string\"\n      timestampValue:\n        type: \"string\"\n        format: \"date-time\"\n      repeatedEnumValue:\n        type: \"array\"\n        title: \"repeated enum value. it is comma-separated in query\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedEnumAnnotation:\n        type: \"array\"\n        description: \"Repeated numeric enum description.\"\n        title: \"Repeated numeric enum title\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      enumValueAnnotation:\n        description: \"Numeric enum description.\"\n        title: \"Numeric enum title\"\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedStringAnnotation:\n        type: \"array\"\n        description: \"Repeated string description.\"\n        title: \"Repeated string title\"\n        items:\n          type: \"string\"\n      repeatedNestedAnnotation:\n        type: \"array\"\n        description: \"Repeated nested object description.\"\n        title: \"Repeated nested object title\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nestedAnnotation:\n        description: \"Nested object description.\"\n        title: \"Nested object title\"\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      int64OverrideType:\n        type: \"integer\"\n        format: \"int64\"\n      requiredStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as required in Open API definition\"\n      outputOnlyStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as readonly in Open API definition\"\n        readOnly: true\n      optionalStringValue:\n        type: \"string\"\n      productId:\n        type: \"array\"\n        description: \"Only digits are allowed.\"\n        title: \"Test openapiv2 generation of repeated fields\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n      optionalStringField:\n        type: \"string\"\n        title: \"Test openapiv2 generation of required fields with annotation and jsonschema\\\n          \\ to reproduce\"\n      requiredStringField1:\n        type: \"string\"\n      requiredStringField2:\n        type: \"string\"\n      required_field_behavior_json_name_custom:\n        type: \"string\"\n        title: \"Test openapiv2 handling of required json_name fields\"\n      required_field_schema_json_name_custom:\n        type: \"string\"\n      trailingOnly:\n        type: \"string\"\n        title: \"Trailing only\"\n      trailingOnlyDot:\n        type: \"string\"\n        description: \"Trailing only dot.\"\n      trailingBoth:\n        type: \"string\"\n        description: \"Trailing both.\"\n        title: \"Leading both\"\n      trailingMultiline:\n        type: \"string\"\n        description: \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\"\n        title: \"Leading multiline\"\n      uuids:\n        type: \"array\"\n        title: \"Specify a custom format of repeated field items\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n    externalDocs:\n      description: \"Find out more about ABitOfEverything\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    title: \"A bit of everything\"\n    description: \"Intentionally complicated message type to cover many features of\\\n      \\ Protobuf.\"\n    example:\n      int64_value: 12\n      double_value: 12.3\n    x-a-bit-of-everything-foo: \"bar\"\n  A bit of everything_1:\n    type: \"object\"\n    required:\n    - \"doubleValue\"\n    - \"floatValue\"\n    - \"int64Value\"\n    - \"requiredStringField1\"\n    - \"requiredStringField2\"\n    - \"requiredStringViaFieldBehaviorAnnotation\"\n    - \"required_field_behavior_json_name_custom\"\n    - \"required_field_schema_json_name_custom\"\n    properties:\n      singleNested:\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      nested:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      floatValue:\n        type: \"number\"\n        format: \"float\"\n        description: \"Float value field\"\n        default: 0.2\n      doubleValue:\n        type: \"number\"\n        format: \"double\"\n      int64Value:\n        type: \"string\"\n        format: \"int64\"\n      uint64Value:\n        type: \"string\"\n        format: \"uint64\"\n      int32Value:\n        type: \"integer\"\n        format: \"int32\"\n      fixed64Value:\n        type: \"string\"\n        format: \"uint64\"\n      fixed32Value:\n        type: \"integer\"\n        format: \"int64\"\n      boolValue:\n        type: \"boolean\"\n      stringValue:\n        type: \"string\"\n      bytesValue:\n        type: \"string\"\n        format: \"byte\"\n        pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n      uint32Value:\n        type: \"integer\"\n        format: \"int64\"\n      enumValue:\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      pathEnumValue:\n        $ref: \"#/definitions/pathenumPathEnum\"\n      nestedPathEnumValue:\n        $ref: \"#/definitions/MessagePathEnumNestedPathEnum\"\n      sfixed32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sfixed64Value:\n        type: \"string\"\n        format: \"int64\"\n      sint32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sint64Value:\n        type: \"string\"\n        format: \"int64\"\n      repeatedStringValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n      oneofEmpty:\n        type: \"object\"\n        properties: {}\n      oneofString:\n        type: \"string\"\n      mapValue:\n        type: \"object\"\n        title: \"map of numeric enum\"\n        additionalProperties:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      mappedStringValue:\n        type: \"object\"\n        description: \"Map of string description.\"\n        title: \"Map of string title\"\n        additionalProperties:\n          type: \"string\"\n      mappedNestedValue:\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nonConventionalNameValue:\n        type: \"string\"\n      timestampValue:\n        type: \"string\"\n        format: \"date-time\"\n      repeatedEnumValue:\n        type: \"array\"\n        title: \"repeated enum value. it is comma-separated in query\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedEnumAnnotation:\n        type: \"array\"\n        description: \"Repeated numeric enum description.\"\n        title: \"Repeated numeric enum title\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      enumValueAnnotation:\n        description: \"Numeric enum description.\"\n        title: \"Numeric enum title\"\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedStringAnnotation:\n        type: \"array\"\n        description: \"Repeated string description.\"\n        title: \"Repeated string title\"\n        items:\n          type: \"string\"\n      repeatedNestedAnnotation:\n        type: \"array\"\n        description: \"Repeated nested object description.\"\n        title: \"Repeated nested object title\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nestedAnnotation:\n        description: \"Nested object description.\"\n        title: \"Nested object title\"\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      int64OverrideType:\n        type: \"integer\"\n        format: \"int64\"\n      requiredStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as required in Open API definition\"\n      outputOnlyStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as readonly in Open API definition\"\n        readOnly: true\n      optionalStringValue:\n        type: \"string\"\n      productId:\n        type: \"array\"\n        description: \"Only digits are allowed.\"\n        title: \"Test openapiv2 generation of repeated fields\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n      optionalStringField:\n        type: \"string\"\n        title: \"Test openapiv2 generation of required fields with annotation and jsonschema\\\n          \\ to reproduce\"\n      requiredStringField1:\n        type: \"string\"\n      requiredStringField2:\n        type: \"string\"\n      required_field_behavior_json_name_custom:\n        type: \"string\"\n        title: \"Test openapiv2 handling of required json_name fields\"\n      required_field_schema_json_name_custom:\n        type: \"string\"\n      trailingOnly:\n        type: \"string\"\n        title: \"Trailing only\"\n      trailingOnlyDot:\n        type: \"string\"\n        description: \"Trailing only dot.\"\n      trailingBoth:\n        type: \"string\"\n        description: \"Trailing both.\"\n        title: \"Leading both\"\n      trailingMultiline:\n        type: \"string\"\n        description: \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\"\n        title: \"Leading multiline\"\n      uuids:\n        type: \"array\"\n        title: \"Specify a custom format of repeated field items\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n    externalDocs:\n      description: \"Find out more about ABitOfEverything\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    title: \"A bit of everything\"\n    description: \"Intentionally complicated message type to cover many features of\\\n      \\ Protobuf.\"\n    example:\n      int64_value: 12\n      double_value: 12.3\n    x-a-bit-of-everything-foo: \"bar\"\n  ABitOfEverythingServiceDeepPathEchoBody_singleNested:\n    properties:\n      amount:\n        type: \"integer\"\n        format: \"int64\"\n      ok:\n        description: \"DeepEnum description.\"\n        $ref: \"#/definitions/NestedDeepEnum\"\n    description: \"Nested is nested type.\"\n    example: \"{\\\"ok\\\":\\\"TRUE\\\"}\"\n  A bit of everything_2:\n    required:\n    - \"doubleValue\"\n    - \"floatValue\"\n    - \"int64Value\"\n    - \"requiredStringField1\"\n    - \"requiredStringField2\"\n    - \"requiredStringViaFieldBehaviorAnnotation\"\n    - \"required_field_behavior_json_name_custom\"\n    - \"required_field_schema_json_name_custom\"\n    properties:\n      singleNested:\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      nested:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      floatValue:\n        type: \"number\"\n        format: \"float\"\n        description: \"Float value field\"\n        default: 0.2\n      doubleValue:\n        type: \"number\"\n        format: \"double\"\n      int64Value:\n        type: \"string\"\n        format: \"int64\"\n      uint64Value:\n        type: \"string\"\n        format: \"uint64\"\n      int32Value:\n        type: \"integer\"\n        format: \"int32\"\n      fixed64Value:\n        type: \"string\"\n        format: \"uint64\"\n      fixed32Value:\n        type: \"integer\"\n        format: \"int64\"\n      boolValue:\n        type: \"boolean\"\n      stringValue:\n        type: \"string\"\n      bytesValue:\n        type: \"string\"\n        format: \"byte\"\n        pattern: \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$\"\n      uint32Value:\n        type: \"integer\"\n        format: \"int64\"\n      enumValue:\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      pathEnumValue:\n        $ref: \"#/definitions/pathenumPathEnum\"\n      nestedPathEnumValue:\n        $ref: \"#/definitions/MessagePathEnumNestedPathEnum\"\n      sfixed32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sfixed64Value:\n        type: \"string\"\n        format: \"int64\"\n      sint32Value:\n        type: \"integer\"\n        format: \"int32\"\n      sint64Value:\n        type: \"string\"\n        format: \"int64\"\n      repeatedStringValue:\n        type: \"array\"\n        items:\n          type: \"string\"\n      oneofEmpty:\n        type: \"object\"\n        properties: {}\n      oneofString:\n        type: \"string\"\n      mapValue:\n        type: \"object\"\n        title: \"map of numeric enum\"\n        additionalProperties:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      mappedStringValue:\n        type: \"object\"\n        description: \"Map of string description.\"\n        title: \"Map of string title\"\n        additionalProperties:\n          type: \"string\"\n      mappedNestedValue:\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nonConventionalNameValue:\n        type: \"string\"\n      timestampValue:\n        type: \"string\"\n        format: \"date-time\"\n      repeatedEnumValue:\n        type: \"array\"\n        title: \"repeated enum value. it is comma-separated in query\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedEnumAnnotation:\n        type: \"array\"\n        description: \"Repeated numeric enum description.\"\n        title: \"Repeated numeric enum title\"\n        items:\n          $ref: \"#/definitions/examplepbNumericEnum\"\n      enumValueAnnotation:\n        description: \"Numeric enum description.\"\n        title: \"Numeric enum title\"\n        $ref: \"#/definitions/examplepbNumericEnum\"\n      repeatedStringAnnotation:\n        type: \"array\"\n        description: \"Repeated string description.\"\n        title: \"Repeated string title\"\n        items:\n          type: \"string\"\n      repeatedNestedAnnotation:\n        type: \"array\"\n        description: \"Repeated nested object description.\"\n        title: \"Repeated nested object title\"\n        items:\n          $ref: \"#/definitions/ABitOfEverythingNested\"\n      nestedAnnotation:\n        description: \"Nested object description.\"\n        title: \"Nested object title\"\n        $ref: \"#/definitions/ABitOfEverythingNested\"\n      int64OverrideType:\n        type: \"integer\"\n        format: \"int64\"\n      requiredStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as required in Open API definition\"\n      outputOnlyStringViaFieldBehaviorAnnotation:\n        type: \"string\"\n        title: \"mark a field as readonly in Open API definition\"\n        readOnly: true\n      optionalStringValue:\n        type: \"string\"\n      productId:\n        type: \"array\"\n        description: \"Only digits are allowed.\"\n        title: \"Test openapiv2 generation of repeated fields\"\n        items:\n          type: \"string\"\n          minLength: 1\n          maxLength: 19\n          pattern: \"^[0-9]+$\"\n      optionalStringField:\n        type: \"string\"\n        title: \"Test openapiv2 generation of required fields with annotation and jsonschema\\\n          \\ to reproduce\"\n      requiredStringField1:\n        type: \"string\"\n      requiredStringField2:\n        type: \"string\"\n      required_field_behavior_json_name_custom:\n        type: \"string\"\n        title: \"Test openapiv2 handling of required json_name fields\"\n      required_field_schema_json_name_custom:\n        type: \"string\"\n      trailingOnly:\n        type: \"string\"\n        title: \"Trailing only\"\n      trailingOnlyDot:\n        type: \"string\"\n        description: \"Trailing only dot.\"\n      trailingBoth:\n        type: \"string\"\n        description: \"Trailing both.\"\n        title: \"Leading both\"\n      trailingMultiline:\n        type: \"string\"\n        description: \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\"\n        title: \"Leading multiline\"\n      uuids:\n        type: \"array\"\n        title: \"Specify a custom format of repeated field items\"\n        items:\n          type: \"string\"\n          format: \"uuid\"\n    description: \"Intentionally complicated message type to cover many features of\\\n      \\ Protobuf.\"\n    example: \"{\\\"int64_value\\\":12,\\\"double_value\\\":12.3}\"\nexternalDocs:\n  description: \"More about gRPC-Gateway\"\n  url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\nx-grpc-gateway-baz-list:\n- \"one\"\n- true\nx-grpc-gateway-foo: \"bar\"\n"
  },
  {
    "path": "examples/internal/clients/abe/api_a_bit_of_everything.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"fmt\"\n\t\"github.com/antihax/optional\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype ABitOfEverythingApiService service\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param value\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckExternalNestedPathEnum(ctx context.Context, value string) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v3/{value}:check\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"value\"+\"}\", fmt.Sprintf(\"%v\", value), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param value\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckExternalPathEnum(ctx context.Context, value string) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/{value}:check\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"value\"+\"}\", fmt.Sprintf(\"%v\", value), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param singleNestedName name is nested field.\n * @param uuid\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceCheckGetQueryParamsOpts - Optional Parameters:\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return ExamplepbABitOfEverything\n*/\n\ntype ABitOfEverythingServiceCheckGetQueryParamsOpts struct { \n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/params/get/{singleNested.name}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"singleNested.name\"+\"}\", fmt.Sprintf(\"%v\", singleNestedName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"uuid\", parameterToString(uuid, \"\"))\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param singleNestedOk DeepEnum description.\n * @param uuid\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return ExamplepbABitOfEverything\n*/\n\ntype ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/params/get/nested_enum/{singleNested.ok}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"singleNested.ok\"+\"}\", fmt.Sprintf(\"%v\", singleNestedOk), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"uuid\", parameterToString(uuid, \"\"))\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param stringValue\n * @param singleNested\n * @param uuid\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceCheckPostQueryParamsOpts - Optional Parameters:\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return ExamplepbABitOfEverything\n*/\n\ntype ABitOfEverythingServiceCheckPostQueryParamsOpts struct { \n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/params/post/{stringValue}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"stringValue\"+\"}\", fmt.Sprintf(\"%v\", stringValue), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tlocalVarQueryParams.Add(\"uuid\", parameterToString(uuid, \"\"))\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &singleNested\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n\n@return ExamplepbCheckStatusResponse\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckStatus(ctx context.Context) (ExamplepbCheckStatusResponse, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbCheckStatusResponse\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/checkStatus\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbCheckStatusResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService Create a new ABitOfEverything\nThis API creates a new ABitOfEverything\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param uint64Value\n * @param int32Value\n * @param fixed64Value\n * @param fixed32Value\n * @param boolValue\n * @param stringValue\n * @param uint32Value\n * @param sfixed32Value\n * @param sfixed64Value\n * @param sint32Value\n * @param sint64Value\n * @param nonConventionalNameValue\n * @param enumValue\n * @param pathEnumValue\n * @param nestedPathEnumValue\n * @param enumValueAnnotation Numeric enum description.\n * @param uuid\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceCreateOpts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"BytesValue\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return ExamplepbABitOfEverything\n*/\n\ntype ABitOfEverythingServiceCreateOpts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tBytesValue optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, uuid string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"floatValue\"+\"}\", fmt.Sprintf(\"%v\", floatValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"doubleValue\"+\"}\", fmt.Sprintf(\"%v\", doubleValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"int64Value\"+\"}\", fmt.Sprintf(\"%v\", int64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uint64Value\"+\"}\", fmt.Sprintf(\"%v\", uint64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"int32Value\"+\"}\", fmt.Sprintf(\"%v\", int32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"fixed64Value\"+\"}\", fmt.Sprintf(\"%v\", fixed64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"fixed32Value\"+\"}\", fmt.Sprintf(\"%v\", fixed32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"boolValue\"+\"}\", fmt.Sprintf(\"%v\", boolValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"stringValue\"+\"}\", fmt.Sprintf(\"%v\", stringValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uint32Value\"+\"}\", fmt.Sprintf(\"%v\", uint32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"sfixed32Value\"+\"}\", fmt.Sprintf(\"%v\", sfixed32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"sfixed64Value\"+\"}\", fmt.Sprintf(\"%v\", sfixed64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"sint32Value\"+\"}\", fmt.Sprintf(\"%v\", sint32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"sint64Value\"+\"}\", fmt.Sprintf(\"%v\", sint64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"nonConventionalNameValue\"+\"}\", fmt.Sprintf(\"%v\", nonConventionalNameValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"enumValue\"+\"}\", fmt.Sprintf(\"%v\", enumValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathEnumValue\"+\"}\", fmt.Sprintf(\"%v\", pathEnumValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"nestedPathEnumValue\"+\"}\", fmt.Sprintf(\"%v\", nestedPathEnumValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"enumValueAnnotation\"+\"}\", fmt.Sprintf(\"%v\", enumValueAnnotation), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"uuid\", parameterToString(uuid, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body Intentionally complicated message type to cover many features of Protobuf.\n\n@return ExamplepbABitOfEverything\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCreateBody(ctx context.Context, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService Create a book.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param parent The publisher in which to create the book.  Format: &#x60;publishers/{publisher}&#x60;  Example: &#x60;publishers/1257894000000000000&#x60;\n * @param book The book to create.\n * @param optional nil or *ABitOfEverythingServiceCreateBookOpts - Optional Parameters:\n     * @param \"BookId\" (optional.String) -  The ID to use for the book.  This must start with an alphanumeric character.\n\n@return ExamplepbBook\n*/\n\ntype ABitOfEverythingServiceCreateBookOpts struct { \n\tBookId optional.String\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCreateBook(ctx context.Context, parent string, book ExamplepbBook, localVarOptionals *ABitOfEverythingServiceCreateBookOpts) (ExamplepbBook, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbBook\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/{parent}/books\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"parent\"+\"}\", fmt.Sprintf(\"%v\", parent), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.BookId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bookId\", parameterToString(localVarOptionals.BookId.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &book\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbBook\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceCustomOpts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return ExamplepbABitOfEverything\n*/\n\ntype ABitOfEverythingServiceCustomOpts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{uuidName}:custom\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param optionalStringValue\n * @param uuid\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceCustom2Opts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return ExamplepbABitOfEverything\n*/\n\ntype ABitOfEverythingServiceCustom2Opts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCustom2(ctx context.Context, optionalStringValue string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCustom2Opts) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/custom/{optionalStringValue}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"optionalStringValue\"+\"}\", fmt.Sprintf(\"%v\", optionalStringValue), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"uuid\", parameterToString(uuid, \"\"))\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceCustomOptionsRequestOpts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return interface{}\n*/\n\ntype ABitOfEverythingServiceCustomOptionsRequestOpts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Options\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{uuidName}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param singleNestedName name is nested field.\n * @param body\n\n@return ExamplepbABitOfEverything\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceDeepPathEcho(ctx context.Context, singleNestedName string, body ABitOfEverythingServiceDeepPathEchoBody) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/deep_path/{singleNested.name}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"singleNested.name\"+\"}\", fmt.Sprintf(\"%v\", singleNestedName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuid\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceDelete(ctx context.Context, uuid string) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Delete\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{uuid}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuid\"+\"}\", fmt.Sprintf(\"%v\", uuid), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceDoubleColonOpts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return ExamplepbABitOfEverything\n*/\n\ntype ABitOfEverythingServiceDoubleColonOpts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{uuidName}:custom:custom\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceErrorWithDetails(ctx context.Context) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/errorwithdetails\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceExistsOpts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return interface{}\n*/\n\ntype ABitOfEverythingServiceExistsOpts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Head\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{uuidName}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id\n * @param data\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceGetMessageWithBody(ctx context.Context, id string, data ExamplepbBody) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/withbody/{id}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &data\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param floatValue Float value field\n * @param doubleValue\n * @param int64Value\n * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition\n * @param requiredStringField1\n * @param requiredStringField2\n * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields\n * @param requiredFieldSchemaJsonNameCustom\n * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters:\n     * @param \"SingleNestedName\" (optional.String) -  name is nested field.\n     * @param \"SingleNestedAmount\" (optional.Int64) - \n     * @param \"SingleNestedOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Uint64Value\" (optional.String) - \n     * @param \"Int32Value\" (optional.Int32) - \n     * @param \"Fixed64Value\" (optional.String) - \n     * @param \"Fixed32Value\" (optional.Int64) - \n     * @param \"BoolValue\" (optional.Bool) - \n     * @param \"StringValue\" (optional.String) - \n     * @param \"BytesValue\" (optional.String) - \n     * @param \"Uint32Value\" (optional.Int64) - \n     * @param \"EnumValue\" (optional.String) -   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"PathEnumValue\" (optional.String) - \n     * @param \"NestedPathEnumValue\" (optional.String) - \n     * @param \"Sfixed32Value\" (optional.Int32) - \n     * @param \"Sfixed64Value\" (optional.String) - \n     * @param \"Sint32Value\" (optional.Int32) - \n     * @param \"Sint64Value\" (optional.String) - \n     * @param \"RepeatedStringValue\" (optional.Interface of []string) - \n     * @param \"OneofEmpty\" (optional.Interface of map[string]string) - \n     * @param \"OneofString\" (optional.String) - \n     * @param \"MapValue\" (optional.Interface of interface{}) -  map of numeric enum\n     * @param \"MappedStringValue\" (optional.String) -  Map of string title  Map of string description.\n     * @param \"MappedNestedValue\" (optional.Interface of interface{}) - \n     * @param \"NonConventionalNameValue\" (optional.String) - \n     * @param \"TimestampValue\" (optional.Time) - \n     * @param \"RepeatedEnumValue\" (optional.Interface of []string) -  repeated enum value. it is comma-separated in query   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedEnumAnnotation\" (optional.Interface of []string) -  Repeated numeric enum title  Repeated numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"EnumValueAnnotation\" (optional.String) -  Numeric enum title  Numeric enum description.   - ZERO: ZERO means 0  - ONE: ONE means 1\n     * @param \"RepeatedStringAnnotation\" (optional.Interface of []string) -  Repeated string title  Repeated string description.\n     * @param \"NestedAnnotationName\" (optional.String) -  name is nested field.\n     * @param \"NestedAnnotationAmount\" (optional.Int64) - \n     * @param \"NestedAnnotationOk\" (optional.String) -  DeepEnum description.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\n     * @param \"Int64OverrideType\" (optional.Int64) - \n     * @param \"OutputOnlyStringViaFieldBehaviorAnnotation\" (optional.String) -  mark a field as readonly in Open API definition\n     * @param \"OptionalStringValue\" (optional.String) - \n     * @param \"ProductId\" (optional.Interface of []string) -  Test openapiv2 generation of repeated fields  Only digits are allowed.\n     * @param \"OptionalStringField\" (optional.String) -  Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n     * @param \"TrailingOnly\" (optional.String) -  Trailing only\n     * @param \"TrailingOnlyDot\" (optional.String) -  Trailing only dot.\n     * @param \"TrailingBoth\" (optional.String) -  Leading both  Trailing both.\n     * @param \"TrailingMultiline\" (optional.String) -  Leading multiline  This is an example of a multi-line comment.  Trailing multiline.\n     * @param \"Uuids\" (optional.Interface of []string) -  Specify a custom format of repeated field items\n\n@return interface{}\n*/\n\ntype ABitOfEverythingServiceGetQueryOpts struct { \n\tSingleNestedName optional.String\n\tSingleNestedAmount optional.Int64\n\tSingleNestedOk optional.String\n\tUint64Value optional.String\n\tInt32Value optional.Int32\n\tFixed64Value optional.String\n\tFixed32Value optional.Int64\n\tBoolValue optional.Bool\n\tStringValue optional.String\n\tBytesValue optional.String\n\tUint32Value optional.Int64\n\tEnumValue optional.String\n\tPathEnumValue optional.String\n\tNestedPathEnumValue optional.String\n\tSfixed32Value optional.Int32\n\tSfixed64Value optional.String\n\tSint32Value optional.Int32\n\tSint64Value optional.String\n\tRepeatedStringValue optional.Interface\n\tOneofEmpty optional.Interface\n\tOneofString optional.String\n\tMapValue optional.Interface\n\tMappedStringValue optional.String\n\tMappedNestedValue optional.Interface\n\tNonConventionalNameValue optional.String\n\tTimestampValue optional.Time\n\tRepeatedEnumValue optional.Interface\n\tRepeatedEnumAnnotation optional.Interface\n\tEnumValueAnnotation optional.String\n\tRepeatedStringAnnotation optional.Interface\n\tNestedAnnotationName optional.String\n\tNestedAnnotationAmount optional.Int64\n\tNestedAnnotationOk optional.String\n\tInt64OverrideType optional.Int64\n\tOutputOnlyStringViaFieldBehaviorAnnotation optional.String\n\tOptionalStringValue optional.String\n\tProductId optional.Interface\n\tOptionalStringField optional.String\n\tTrailingOnly optional.String\n\tTrailingOnlyDot optional.String\n\tTrailingBoth optional.String\n\tTrailingMultiline optional.String\n\tUuids optional.Interface\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/query/{uuidName}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.name\", parameterToString(localVarOptionals.SingleNestedName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.amount\", parameterToString(localVarOptionals.SingleNestedAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"singleNested.ok\", parameterToString(localVarOptionals.SingleNestedOk.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"floatValue\", parameterToString(floatValue, \"\"))\n\tlocalVarQueryParams.Add(\"doubleValue\", parameterToString(doubleValue, \"\"))\n\tlocalVarQueryParams.Add(\"int64Value\", parameterToString(int64Value, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint64Value\", parameterToString(localVarOptionals.Uint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int32Value\", parameterToString(localVarOptionals.Int32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed64Value\", parameterToString(localVarOptionals.Fixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"fixed32Value\", parameterToString(localVarOptionals.Fixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"boolValue\", parameterToString(localVarOptionals.BoolValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"stringValue\", parameterToString(localVarOptionals.StringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"bytesValue\", parameterToString(localVarOptionals.BytesValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uint32Value\", parameterToString(localVarOptionals.Uint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValue\", parameterToString(localVarOptionals.EnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"pathEnumValue\", parameterToString(localVarOptionals.PathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedPathEnumValue\", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed32Value\", parameterToString(localVarOptionals.Sfixed32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sfixed64Value\", parameterToString(localVarOptionals.Sfixed64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint32Value\", parameterToString(localVarOptionals.Sint32Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"sint64Value\", parameterToString(localVarOptionals.Sint64Value.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringValue\", parameterToString(localVarOptionals.RepeatedStringValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofEmpty.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofEmpty\", parameterToString(localVarOptionals.OneofEmpty.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OneofString.IsSet() {\n\t\tlocalVarQueryParams.Add(\"oneofString\", parameterToString(localVarOptionals.OneofString.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MapValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mapValue\", parameterToString(localVarOptionals.MapValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedStringValue\", parameterToString(localVarOptionals.MappedStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.MappedNestedValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"mappedNestedValue\", parameterToString(localVarOptionals.MappedNestedValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nonConventionalNameValue\", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"timestampValue\", parameterToString(localVarOptionals.TimestampValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumValue\", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedEnumAnnotation\", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"enumValueAnnotation\", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"repeatedStringAnnotation\", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.name\", parameterToString(localVarOptionals.NestedAnnotationName.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.amount\", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nestedAnnotation.ok\", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() {\n\t\tlocalVarQueryParams.Add(\"int64OverrideType\", parameterToString(localVarOptionals.Int64OverrideType.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringViaFieldBehaviorAnnotation\", parameterToString(requiredStringViaFieldBehaviorAnnotation, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {\n\t\tlocalVarQueryParams.Add(\"outputOnlyStringViaFieldBehaviorAnnotation\", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringValue\", parameterToString(localVarOptionals.OptionalStringValue.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ProductId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"productId\", parameterToString(localVarOptionals.ProductId.Value(), \"multi\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() {\n\t\tlocalVarQueryParams.Add(\"optionalStringField\", parameterToString(localVarOptionals.OptionalStringField.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"requiredStringField1\", parameterToString(requiredStringField1, \"\"))\n\tlocalVarQueryParams.Add(\"requiredStringField2\", parameterToString(requiredStringField2, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_behavior_json_name_custom\", parameterToString(requiredFieldBehaviorJsonNameCustom, \"\"))\n\tlocalVarQueryParams.Add(\"required_field_schema_json_name_custom\", parameterToString(requiredFieldSchemaJsonNameCustom, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnly\", parameterToString(localVarOptionals.TrailingOnly.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingOnlyDot\", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingBoth\", parameterToString(localVarOptionals.TrailingBoth.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() {\n\t\tlocalVarQueryParams.Add(\"trailingMultiline\", parameterToString(localVarOptionals.TrailingMultiline.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Uuids.IsSet() {\n\t\tlocalVarQueryParams.Add(\"uuids\", parameterToString(localVarOptionals.Uuids.Value(), \"multi\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param pathRepeatedFloatValue repeated values. they are comma-separated in path\n * @param pathRepeatedDoubleValue\n * @param pathRepeatedInt64Value\n * @param pathRepeatedUint64Value\n * @param pathRepeatedInt32Value\n * @param pathRepeatedFixed64Value\n * @param pathRepeatedFixed32Value\n * @param pathRepeatedBoolValue\n * @param pathRepeatedStringValue\n * @param pathRepeatedBytesValue\n * @param pathRepeatedUint32Value\n * @param pathRepeatedEnumValue\n * @param pathRepeatedSfixed32Value\n * @param pathRepeatedSfixed64Value\n * @param pathRepeatedSint32Value\n * @param pathRepeatedSint64Value\n\n@return ExamplepbABitOfEverythingRepeated\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceGetRepeatedQuery(ctx context.Context, pathRepeatedFloatValue []float32, pathRepeatedDoubleValue []float64, pathRepeatedInt64Value []string, pathRepeatedUint64Value []string, pathRepeatedInt32Value []int32, pathRepeatedFixed64Value []string, pathRepeatedFixed32Value []int64, pathRepeatedBoolValue []bool, pathRepeatedStringValue []string, pathRepeatedBytesValue []string, pathRepeatedUint32Value []int64, pathRepeatedEnumValue []string, pathRepeatedSfixed32Value []int32, pathRepeatedSfixed64Value []string, pathRepeatedSint32Value []int32, pathRepeatedSint64Value []string) (ExamplepbABitOfEverythingRepeated, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverythingRepeated\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything_repeated/{pathRepeatedFloatValue}/{pathRepeatedDoubleValue}/{pathRepeatedInt64Value}/{pathRepeatedUint64Value}/{pathRepeatedInt32Value}/{pathRepeatedFixed64Value}/{pathRepeatedFixed32Value}/{pathRepeatedBoolValue}/{pathRepeatedStringValue}/{pathRepeatedBytesValue}/{pathRepeatedUint32Value}/{pathRepeatedEnumValue}/{pathRepeatedSfixed32Value}/{pathRepeatedSfixed64Value}/{pathRepeatedSint32Value}/{pathRepeatedSint64Value}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedFloatValue\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedFloatValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedDoubleValue\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedDoubleValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedInt64Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedInt64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedUint64Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedUint64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedInt32Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedInt32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedFixed64Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedFixed64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedFixed32Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedFixed32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedBoolValue\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedBoolValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedStringValue\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedStringValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedBytesValue\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedBytesValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedUint32Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedUint32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedEnumValue\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedEnumValue), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedSfixed32Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedSfixed32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedSfixed64Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedSfixed64Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedSint32Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedSint32Value), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"pathRepeatedSint64Value\"+\"}\", fmt.Sprintf(\"%v\", pathRepeatedSint64Value), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\tif len(pathRepeatedFloatValue) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedFloatValue must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedDoubleValue) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedDoubleValue must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedInt64Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedInt64Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedUint64Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedUint64Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedInt32Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedInt32Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedFixed64Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedFixed64Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedFixed32Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedFixed32Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedBoolValue) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedBoolValue must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedStringValue) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedStringValue must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedBytesValue) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedBytesValue must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedUint32Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedUint32Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedEnumValue) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedEnumValue must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedSfixed32Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedSfixed32Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedSfixed64Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedSfixed64Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedSint32Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedSint32Value must have at least 1 elements\")\n\t}\n\tif len(pathRepeatedSint64Value) < 1 {\n\t\treturn localVarReturnValue, nil, reportError(\"pathRepeatedSint64Value must have at least 1 elements\")\n\t}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverythingRepeated\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuid\n\n@return ExamplepbABitOfEverything\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceLookup(ctx context.Context, uuid string) (ExamplepbABitOfEverything, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbABitOfEverything\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{uuid}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuid\"+\"}\", fmt.Sprintf(\"%v\", uuid), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbABitOfEverything\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceOverwriteRequestContentType(ctx context.Context, body ExamplepbBody) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/overwriterequestcontenttype\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/x-bar-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n\n@return string\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceOverwriteResponseContentType(ctx context.Context) (string, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue string\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/overwriteresponsecontenttype\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/text\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param exampleEnum\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServicePostOneofEnum(ctx context.Context, exampleEnum OneofenumExampleEnum) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/oneofenum\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &exampleEnum\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServicePostRequiredMessageType(ctx context.Context, body ExamplepbRequiredMessageTypeRequest) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/requiredmessagetype\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param name\n * @param body\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServicePostWithEmptyBody(ctx context.Context, name string, body ABitOfEverythingServicePostWithEmptyBodyBody) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/postwithemptybody/{name}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"name\"+\"}\", fmt.Sprintf(\"%v\", name), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceTimeout(ctx context.Context) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/timeout\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param body\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdate(ctx context.Context, uuidName string, body ExamplepbABitOfEverythingServiceUpdateBody) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Put\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/{uuidName}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param bookName The resource name of the book.  Format: &#x60;publishers/{publisher}/books/{book}&#x60;  Example: &#x60;publishers/1257894000000000000/books/my-book&#x60;\n * @param book The book to update.  The book&#39;s &#x60;name&#x60; field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book}\n * @param optional nil or *ABitOfEverythingServiceUpdateBookOpts - Optional Parameters:\n     * @param \"AllowMissing\" (optional.Bool) -  If set to true, and the book is not found, a new book will be created. In this situation, &#x60;update_mask&#x60; is ignored.\n\n@return ExamplepbBook\n*/\n\ntype ABitOfEverythingServiceUpdateBookOpts struct { \n\tAllowMissing optional.Bool\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateBook(ctx context.Context, bookName string, book TheBookToUpdate_, localVarOptionals *ABitOfEverythingServiceUpdateBookOpts) (ExamplepbBook, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Patch\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbBook\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/{book.name}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"book.name\"+\"}\", fmt.Sprintf(\"%v\", bookName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.AllowMissing.IsSet() {\n\t\tlocalVarQueryParams.Add(\"allowMissing\", parameterToString(localVarOptionals.AllowMissing.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &book\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbBook\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param abe A bit of everything  Intentionally complicated message type to cover many features of Protobuf.\n * @param optional nil or *ABitOfEverythingServiceUpdateV2Opts - Optional Parameters:\n     * @param \"UpdateMask\" (optional.String) -  The paths to update.\n\n@return interface{}\n*/\n\ntype ABitOfEverythingServiceUpdateV2Opts struct { \n\tUpdateMask optional.String\n}\n\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateV2(ctx context.Context, uuidName string, abe ABitOfEverything, localVarOptionals *ABitOfEverythingServiceUpdateV2Opts) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Put\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/a_bit_of_everything/{uuidName}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.UpdateMask.IsSet() {\n\t\tlocalVarQueryParams.Add(\"updateMask\", parameterToString(localVarOptionals.UpdateMask.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &abe\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param abe A bit of everything  Intentionally complicated message type to cover many features of Protobuf.\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateV22(ctx context.Context, uuidName string, abe ABitOfEverything1) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Patch\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/a_bit_of_everything/{uuidName}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &abe\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nABitOfEverythingApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param uuidName\n * @param body\n\n@return interface{}\n*/\nfunc (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateV23(ctx context.Context, uuidName string, body ABitOfEverythingServiceUpdateV2Body) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Patch\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2a/example/a_bit_of_everything/{uuidName}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"uuidName\"+\"}\", fmt.Sprintf(\"%v\", uuidName), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/api_camel_case_service_name.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype CamelCaseServiceNameApiService service\n\n/* \nCamelCaseServiceNameApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n\n@return interface{}\n*/\nfunc (a *CamelCaseServiceNameApiService) CamelCaseServiceNameEmpty(ctx context.Context) (interface{}, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue interface{}\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/empty\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/api_echo_rpc.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"fmt\"\n\t\"github.com/antihax/optional\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype EchoRpcApiService service\n\n/* \nEchoRpcApiService Summary: Echo rpc\nDescription Echo\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param value\n\n@return SubStringMessage\n*/\nfunc (a *EchoRpcApiService) ABitOfEverythingServiceEcho(ctx context.Context, value string) (SubStringMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue SubStringMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/a_bit_of_everything/echo/{value}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"value\"+\"}\", fmt.Sprintf(\"%v\", value), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v SubStringMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v int32\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 503 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoRpcApiService Summary: Echo rpc\nDescription Echo\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param value\n\n@return SubStringMessage\n*/\nfunc (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.Context, value string) (SubStringMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue SubStringMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/echo\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &value\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v SubStringMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v int32\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 503 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoRpcApiService Summary: Echo rpc\nDescription Echo\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param optional nil or *ABitOfEverythingServiceEcho3Opts - Optional Parameters:\n     * @param \"Value\" (optional.String) - \n\n@return SubStringMessage\n*/\n\ntype ABitOfEverythingServiceEcho3Opts struct { \n\tValue optional.String\n}\n\nfunc (a *EchoRpcApiService) ABitOfEverythingServiceEcho3(ctx context.Context, localVarOptionals *ABitOfEverythingServiceEcho3Opts) (SubStringMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue SubStringMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v2/example/echo\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Value.IsSet() {\n\t\tlocalVarQueryParams.Add(\"value\", parameterToString(localVarOptionals.Value.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v SubStringMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v int32\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 503 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/api_snake_enum_service.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"fmt\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype SnakeEnumServiceApiService service\n\n/* \nSnakeEnumServiceApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param who\n * @param what\n * @param where\n\n@return ExamplepbSnakeEnumResponse\n*/\nfunc (a *SnakeEnumServiceApiService) SnakeEnumServiceSnakeEnum(ctx context.Context, who string, what string, where string) (ExamplepbSnakeEnumResponse, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSnakeEnumResponse\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/snake/{who}/{what}/{where}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"who\"+\"}\", fmt.Sprintf(\"%v\", who), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"what\"+\"}\", fmt.Sprintf(\"%v\", what), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"where\"+\"}\", fmt.Sprintf(\"%v\", where), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSnakeEnumResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 418 {\n\t\t\tvar v ExamplepbNumericEnum\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 500 {\n\t\t\tvar v ExamplepbErrorResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/client.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/oauth2\"\n)\n\nvar (\n\tjsonCheck = regexp.MustCompile(\"(?i:[application|text]/json)\")\n\txmlCheck  = regexp.MustCompile(\"(?i:[application|text]/xml)\")\n)\n\n// APIClient manages communication with the A Bit of Everything API v1.0\n// In most cases there should be only one, shared, APIClient.\ntype APIClient struct {\n\tcfg    *Configuration\n\tcommon service // Reuse a single struct instead of allocating one for each service on the heap.\n\n\t// API Services\n\n\tABitOfEverythingApi *ABitOfEverythingApiService\n\n\tCamelCaseServiceNameApi *CamelCaseServiceNameApiService\n\n\tEchoRpcApi *EchoRpcApiService\n\n\tSnakeEnumServiceApi *SnakeEnumServiceApiService\n}\n\ntype service struct {\n\tclient *APIClient\n}\n\n// NewAPIClient creates a new API client. Requires a userAgent string describing your application.\n// optionally a custom http.Client to allow for advanced features such as caching.\nfunc NewAPIClient(cfg *Configuration) *APIClient {\n\tif cfg.HTTPClient == nil {\n\t\tcfg.HTTPClient = http.DefaultClient\n\t}\n\n\tc := &APIClient{}\n\tc.cfg = cfg\n\tc.common.client = c\n\n\t// API Services\n\tc.ABitOfEverythingApi = (*ABitOfEverythingApiService)(&c.common)\n\tc.CamelCaseServiceNameApi = (*CamelCaseServiceNameApiService)(&c.common)\n\tc.EchoRpcApi = (*EchoRpcApiService)(&c.common)\n\tc.SnakeEnumServiceApi = (*SnakeEnumServiceApiService)(&c.common)\n\n\treturn c\n}\n\nfunc atoi(in string) (int, error) {\n\treturn strconv.Atoi(in)\n}\n\n// selectHeaderContentType select a content type from the available list.\nfunc selectHeaderContentType(contentTypes []string) string {\n\tif len(contentTypes) == 0 {\n\t\treturn \"\"\n\t}\n\tif contains(contentTypes, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\treturn contentTypes[0] // use the first content type specified in 'consumes'\n}\n\n// selectHeaderAccept join all accept types and return\nfunc selectHeaderAccept(accepts []string) string {\n\tif len(accepts) == 0 {\n\t\treturn \"\"\n\t}\n\n\tif contains(accepts, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\n\treturn strings.Join(accepts, \",\")\n}\n\n// contains is a case insenstive match, finding needle in a haystack\nfunc contains(haystack []string, needle string) bool {\n\tfor _, a := range haystack {\n\t\tif strings.ToLower(a) == strings.ToLower(needle) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Verify optional parameters are of the correct type.\nfunc typeCheckParameter(obj interface{}, expected string, name string) error {\n\t// Make sure there is an object.\n\tif obj == nil {\n\t\treturn nil\n\t}\n\n\t// Check the type is as expected.\n\tif reflect.TypeOf(obj).String() != expected {\n\t\treturn fmt.Errorf(\"Expected %s to be of type %s but received %s.\", name, expected, reflect.TypeOf(obj).String())\n\t}\n\treturn nil\n}\n\n// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.\nfunc parameterToString(obj interface{}, collectionFormat string) string {\n\tvar delimiter string\n\n\tswitch collectionFormat {\n\tcase \"pipes\":\n\t\tdelimiter = \"|\"\n\tcase \"ssv\":\n\t\tdelimiter = \" \"\n\tcase \"tsv\":\n\t\tdelimiter = \"\\t\"\n\tcase \"csv\":\n\t\tdelimiter = \",\"\n\t}\n\n\tif reflect.TypeOf(obj).Kind() == reflect.Slice {\n\t\treturn strings.Trim(strings.Replace(fmt.Sprint(obj), \" \", delimiter, -1), \"[]\")\n\t}\n\n\treturn fmt.Sprintf(\"%v\", obj)\n}\n\n// callAPI do the request.\nfunc (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {\n\treturn c.cfg.HTTPClient.Do(request)\n}\n\n// Change base path to allow switching to mocks\nfunc (c *APIClient) ChangeBasePath(path string) {\n\tc.cfg.BasePath = path\n}\n\n// prepareRequest build the request\nfunc (c *APIClient) prepareRequest(\n\tctx context.Context,\n\tpath string, method string,\n\tpostBody interface{},\n\theaderParams map[string]string,\n\tqueryParams url.Values,\n\tformParams url.Values,\n\tfileName string,\n\tfileBytes []byte) (localVarRequest *http.Request, err error) {\n\n\tvar body *bytes.Buffer\n\n\t// Detect postBody type and post.\n\tif postBody != nil {\n\t\tcontentType := headerParams[\"Content-Type\"]\n\t\tif contentType == \"\" {\n\t\t\tcontentType = detectContentType(postBody)\n\t\t\theaderParams[\"Content-Type\"] = contentType\n\t\t}\n\n\t\tbody, err = setBody(postBody, contentType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// add form parameters and file if available.\n\tif len(formParams) > 0 || (len(fileBytes) > 0 && fileName != \"\") {\n\t\tif body != nil {\n\t\t\treturn nil, errors.New(\"Cannot specify postBody and multipart form at the same time.\")\n\t\t}\n\t\tbody = &bytes.Buffer{}\n\t\tw := multipart.NewWriter(body)\n\n\t\tfor k, v := range formParams {\n\t\t\tfor _, iv := range v {\n\t\t\t\tif strings.HasPrefix(k, \"@\") { // file\n\t\t\t\t\terr = addFile(w, k[1:], iv)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t} else { // form value\n\t\t\t\t\tw.WriteField(k, iv)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(fileBytes) > 0 && fileName != \"\" {\n\t\t\tw.Boundary()\n\t\t\t//_, fileNm := filepath.Split(fileName)\n\t\t\tpart, err := w.CreateFormFile(\"file\", filepath.Base(fileName))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t_, err = part.Write(fileBytes)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// Set the Boundary in the Content-Type\n\t\t\theaderParams[\"Content-Type\"] = w.FormDataContentType()\n\t\t}\n\n\t\t// Set Content-Length\n\t\theaderParams[\"Content-Length\"] = fmt.Sprintf(\"%d\", body.Len())\n\t\tw.Close()\n\t}\n\n\t// Setup path and query parameters\n\turl, err := url.Parse(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Adding Query Param\n\tquery := url.Query()\n\tfor k, v := range queryParams {\n\t\tfor _, iv := range v {\n\t\t\tquery.Add(k, iv)\n\t\t}\n\t}\n\n\t// Encode the parameters.\n\turl.RawQuery = query.Encode()\n\n\t// Generate a new request\n\tif body != nil {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), body)\n\t} else {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), nil)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// add header parameters, if any\n\tif len(headerParams) > 0 {\n\t\theaders := http.Header{}\n\t\tfor h, v := range headerParams {\n\t\t\theaders.Set(h, v)\n\t\t}\n\t\tlocalVarRequest.Header = headers\n\t}\n\n\t// Override request host, if applicable\n\tif c.cfg.Host != \"\" {\n\t\tlocalVarRequest.Host = c.cfg.Host\n\t}\n\n\t// Add the user agent to the request.\n\tlocalVarRequest.Header.Add(\"User-Agent\", c.cfg.UserAgent)\n\n\tif ctx != nil {\n\t\t// add context to the request\n\t\tlocalVarRequest = localVarRequest.WithContext(ctx)\n\n\t\t// Walk through any authentication.\n\n\t\t// OAuth2 authentication\n\t\tif tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {\n\t\t\t// We were able to grab an oauth2 token from the context\n\t\t\tvar latestToken *oauth2.Token\n\t\t\tif latestToken, err = tok.Token(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tlatestToken.SetAuthHeader(localVarRequest)\n\t\t}\n\n\t\t// Basic HTTP Authentication\n\t\tif auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {\n\t\t\tlocalVarRequest.SetBasicAuth(auth.UserName, auth.Password)\n\t\t}\n\n\t\t// AccessToken Authentication\n\t\tif auth, ok := ctx.Value(ContextAccessToken).(string); ok {\n\t\t\tlocalVarRequest.Header.Add(\"Authorization\", \"Bearer \"+auth)\n\t\t}\n\t}\n\n\tfor header, value := range c.cfg.DefaultHeader {\n\t\tlocalVarRequest.Header.Add(header, value)\n\t}\n\n\treturn localVarRequest, nil\n}\n\nfunc (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {\n\t\tif strings.Contains(contentType, \"application/xml\") {\n\t\t\tif err = xml.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t} else if strings.Contains(contentType, \"application/json\") {\n\t\t\tif err = json.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\treturn errors.New(\"undefined response type\")\n}\n\n// Add a file to the multipart request\nfunc addFile(w *multipart.Writer, fieldName, path string) error {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\tpart, err := w.CreateFormFile(fieldName, filepath.Base(path))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(part, file)\n\n\treturn err\n}\n\n// Prevent trying to import \"fmt\"\nfunc reportError(format string, a ...interface{}) error {\n\treturn fmt.Errorf(format, a...)\n}\n\n// Set request body from an interface{}\nfunc setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {\n\tif bodyBuf == nil {\n\t\tbodyBuf = &bytes.Buffer{}\n\t}\n\n\tif reader, ok := body.(io.Reader); ok {\n\t\t_, err = bodyBuf.ReadFrom(reader)\n\t} else if b, ok := body.([]byte); ok {\n\t\t_, err = bodyBuf.Write(b)\n\t} else if s, ok := body.(string); ok {\n\t\t_, err = bodyBuf.WriteString(s)\n\t} else if s, ok := body.(*string); ok {\n\t\t_, err = bodyBuf.WriteString(*s)\n\t} else if jsonCheck.MatchString(contentType) {\n\t\terr = json.NewEncoder(bodyBuf).Encode(body)\n\t} else if xmlCheck.MatchString(contentType) {\n\t\txml.NewEncoder(bodyBuf).Encode(body)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif bodyBuf.Len() == 0 {\n\t\terr = fmt.Errorf(\"Invalid body type %s\\n\", contentType)\n\t\treturn nil, err\n\t}\n\treturn bodyBuf, nil\n}\n\n// detectContentType method is used to figure out `Request.Body` content type for request header\nfunc detectContentType(body interface{}) string {\n\tcontentType := \"text/plain; charset=utf-8\"\n\tkind := reflect.TypeOf(body).Kind()\n\n\tswitch kind {\n\tcase reflect.Struct, reflect.Map, reflect.Ptr:\n\t\tcontentType = \"application/json; charset=utf-8\"\n\tcase reflect.String:\n\t\tcontentType = \"text/plain; charset=utf-8\"\n\tdefault:\n\t\tif b, ok := body.([]byte); ok {\n\t\t\tcontentType = http.DetectContentType(b)\n\t\t} else if kind == reflect.Slice {\n\t\t\tcontentType = \"application/json; charset=utf-8\"\n\t\t}\n\t}\n\n\treturn contentType\n}\n\n// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go\ntype cacheControl map[string]string\n\nfunc parseCacheControl(headers http.Header) cacheControl {\n\tcc := cacheControl{}\n\tccHeader := headers.Get(\"Cache-Control\")\n\tfor _, part := range strings.Split(ccHeader, \",\") {\n\t\tpart = strings.Trim(part, \" \")\n\t\tif part == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.ContainsRune(part, '=') {\n\t\t\tkeyval := strings.Split(part, \"=\")\n\t\t\tcc[strings.Trim(keyval[0], \" \")] = strings.Trim(keyval[1], \",\")\n\t\t} else {\n\t\t\tcc[part] = \"\"\n\t\t}\n\t}\n\treturn cc\n}\n\n// CacheExpires helper function to determine remaining time before repeating a request.\nfunc CacheExpires(r *http.Response) time.Time {\n\t// Figure out when the cache expires.\n\tvar expires time.Time\n\tnow, err := time.Parse(time.RFC1123, r.Header.Get(\"date\"))\n\tif err != nil {\n\t\treturn time.Now()\n\t}\n\trespCacheControl := parseCacheControl(r.Header)\n\n\tif maxAge, ok := respCacheControl[\"max-age\"]; ok {\n\t\tlifetime, err := time.ParseDuration(maxAge + \"s\")\n\t\tif err != nil {\n\t\t\texpires = now\n\t\t}\n\t\texpires = now.Add(lifetime)\n\t} else {\n\t\texpiresHeader := r.Header.Get(\"Expires\")\n\t\tif expiresHeader != \"\" {\n\t\t\texpires, err = time.Parse(time.RFC1123, expiresHeader)\n\t\t\tif err != nil {\n\t\t\t\texpires = now\n\t\t\t}\n\t\t}\n\t}\n\treturn expires\n}\n\nfunc strlen(s string) int {\n\treturn utf8.RuneCountInString(s)\n}\n\n// GenericSwaggerError Provides access to the body, error and model on returned errors.\ntype GenericSwaggerError struct {\n\tbody  []byte\n\terror string\n\tmodel interface{}\n}\n\n// Error returns non-empty string if there was an error.\nfunc (e GenericSwaggerError) Error() string {\n\treturn e.error\n}\n\n// Body returns the raw bytes of the response\nfunc (e GenericSwaggerError) Body() []byte {\n\treturn e.body\n}\n\n// Model returns the unpacked model of the error\nfunc (e GenericSwaggerError) Model() interface{} {\n\treturn e.model\n}"
  },
  {
    "path": "examples/internal/clients/abe/configuration.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"net/http\"\n)\n\n// contextKeys are used to identify the type of value in the context.\n// Since these are string, it is possible to get a short description of the\n// context key for logging and debugging using key.String().\n\ntype contextKey string\n\nfunc (c contextKey) String() string {\n\treturn \"auth \" + string(c)\n}\n\nvar (\n\t// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.\n\tContextOAuth2 = contextKey(\"token\")\n\n\t// ContextBasicAuth takes BasicAuth as authentication for the request.\n\tContextBasicAuth = contextKey(\"basic\")\n\n\t// ContextAccessToken takes a string oauth2 access token as authentication for the request.\n\tContextAccessToken = contextKey(\"accesstoken\")\n\n\t// ContextAPIKey takes an APIKey as authentication for the request\n\tContextAPIKey = contextKey(\"apikey\")\n)\n\n// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth\ntype BasicAuth struct {\n\tUserName string `json:\"userName,omitempty\"`\n\tPassword string `json:\"password,omitempty\"`\n}\n\n// APIKey provides API key based authentication to a request passed via context using ContextAPIKey\ntype APIKey struct {\n\tKey    string\n\tPrefix string\n}\n\ntype Configuration struct {\n\tBasePath      string            `json:\"basePath,omitempty\"`\n\tHost          string            `json:\"host,omitempty\"`\n\tScheme        string            `json:\"scheme,omitempty\"`\n\tDefaultHeader map[string]string `json:\"defaultHeader,omitempty\"`\n\tUserAgent     string            `json:\"userAgent,omitempty\"`\n\tHTTPClient    *http.Client\n}\n\nfunc NewConfiguration() *Configuration {\n\tcfg := &Configuration{\n\t\tBasePath:      \"http://localhost\",\n\t\tDefaultHeader: make(map[string]string),\n\t\tUserAgent:     \"Swagger-Codegen/1.0.0/go\",\n\t}\n\treturn cfg\n}\n\nfunc (c *Configuration) AddDefaultHeader(key string, value string) {\n\tc.DefaultHeader[key] = value\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/enum_helper.go",
    "content": "package abe\n\nimport (\n\tpbexamplepb \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\tpbpathenum \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n)\n\n// String returns a string representation of \"NumericEnum\"\nfunc (e ExamplepbNumericEnum) String() string {\n\treturn pbexamplepb.NumericEnum_ONE.String()\n}\n\n// UnmarshalJSON does a no-op unmarshal to ExamplepbNumericEnum.\n// It just validates that the input is sane.\nfunc (e ExamplepbNumericEnum) UnmarshalJSON(b []byte) error {\n\treturn unmarshalJSONEnum(b, pbexamplepb.NumericEnum_value)\n}\n\n// String returns a string representation of \"MessagePathEnum\"\nfunc (e MessagePathEnumNestedPathEnum) String() string {\n\treturn pbpathenum.MessagePathEnum_JKL.String()\n}\n\n// UnmarshalJSON does a no-op unmarshal to MessagePathEnumNestedPathEnum.\n// It just validates that the input is sane.\nfunc (e MessagePathEnumNestedPathEnum) UnmarshalJSON(b []byte) error {\n\treturn unmarshalJSONEnum(b, pbpathenum.MessagePathEnum_NestedPathEnum_value)\n}\n\n// String returns a string representation of \"PathEnum\"\nfunc (e PathenumPathEnum) String() string {\n\treturn pbpathenum.PathEnum_DEF.String()\n}\n\n// UnmarshalJSON does a no-op unmarshal to PathenumPathEnum.\n// It just validates that the input is sane.\nfunc (e PathenumPathEnum) UnmarshalJSON(b []byte) error {\n\treturn unmarshalJSONEnum(b, pbpathenum.PathEnum_value)\n}\n\nfunc unmarshalJSONEnum(b []byte, enumValMap map[string]int32) error {\n\tval := string(b[1 : len(b)-1])\n\t_, err := runtime.Enum(val, enumValMap)\n\treturn err\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\t// Map of string description.\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_1.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything1 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\t// Map of string description.\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_2.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything2 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\t// Map of string description.\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_3.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything3 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_4.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything4 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue,omitempty\"`\n\tDoubleValue float64 `json:\"doubleValue,omitempty\"`\n\tInt64Value string `json:\"int64Value,omitempty\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1,omitempty\"`\n\tRequiredStringField2 string `json:\"requiredStringField2,omitempty\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom,omitempty\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom,omitempty\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_5.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\npackage abe\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything5 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_6.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\npackage abe\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything6 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_7.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\npackage abe\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything7 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_8.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\npackage abe\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything8 struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_nested.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\n// Nested is nested type.\ntype ABitOfEverythingNested struct {\n\t// name is nested field.\n\tName string `json:\"name,omitempty\"`\n\tAmount int64 `json:\"amount,omitempty\"`\n\t// DeepEnum description.\n\tOk *NestedDeepEnum `json:\"ok,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_service_deep_path_echo_body.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverythingServiceDeepPathEchoBody struct {\n\tSingleNested *ABitOfEverythingServiceDeepPathEchoBodySingleNested `json:\"singleNested,omitempty\"`\n\tUuid string `json:\"uuid\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\t// Map of string description.\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_service_deep_path_echo_body_single_nested.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\n// Nested is nested type.\ntype ABitOfEverythingServiceDeepPathEchoBodySingleNested struct {\n\tAmount int64 `json:\"amount,omitempty\"`\n\t// DeepEnum description.\n\tOk *NestedDeepEnum `json:\"ok,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_service_post_with_empty_body_body.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ABitOfEverythingServicePostWithEmptyBodyBody struct {\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_service_update_body.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverythingServiceUpdateBody struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_a_bit_of_everything_service_update_v2_body.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ABitOfEverythingServiceUpdateV2Body struct {\n\tAbe *ABitOfEverything2 `json:\"abe,omitempty\"`\n\t// The paths to update.\n\tUpdateMask string `json:\"updateMask,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_book.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// An example resource type from AIP-123 used to test the behavior described in the CreateBookRequest message.  See: https://google.aip.dev/123\ntype Book struct {\n\t// Output only. The book's ID.\n\tId string `json:\"id,omitempty\"`\n\t// Output only. Creation time of the book.\n\tCreateTime time.Time `json:\"createTime,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ExamplepbABitOfEverything struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tUuid string `json:\"uuid\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\t// Map of string description.\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbABitOfEverythingRepeated struct {\n\tPathRepeatedFloatValue []float32 `json:\"pathRepeatedFloatValue,omitempty\"`\n\tPathRepeatedDoubleValue []float64 `json:\"pathRepeatedDoubleValue,omitempty\"`\n\tPathRepeatedInt64Value []string `json:\"pathRepeatedInt64Value,omitempty\"`\n\tPathRepeatedUint64Value []string `json:\"pathRepeatedUint64Value,omitempty\"`\n\tPathRepeatedInt32Value []int32 `json:\"pathRepeatedInt32Value,omitempty\"`\n\tPathRepeatedFixed64Value []string `json:\"pathRepeatedFixed64Value,omitempty\"`\n\tPathRepeatedFixed32Value []int64 `json:\"pathRepeatedFixed32Value,omitempty\"`\n\tPathRepeatedBoolValue []bool `json:\"pathRepeatedBoolValue,omitempty\"`\n\tPathRepeatedStringValue []string `json:\"pathRepeatedStringValue,omitempty\"`\n\tPathRepeatedBytesValue []string `json:\"pathRepeatedBytesValue,omitempty\"`\n\tPathRepeatedUint32Value []int64 `json:\"pathRepeatedUint32Value,omitempty\"`\n\tPathRepeatedEnumValue []ExamplepbNumericEnum `json:\"pathRepeatedEnumValue,omitempty\"`\n\tPathRepeatedSfixed32Value []int32 `json:\"pathRepeatedSfixed32Value,omitempty\"`\n\tPathRepeatedSfixed64Value []string `json:\"pathRepeatedSfixed64Value,omitempty\"`\n\tPathRepeatedSint32Value []int32 `json:\"pathRepeatedSint32Value,omitempty\"`\n\tPathRepeatedSint64Value []string `json:\"pathRepeatedSint64Value,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_a_bit_of_everything_service_update_body.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ExamplepbABitOfEverythingServiceUpdateBody struct {\n\tSingleNested *ABitOfEverythingNested `json:\"singleNested,omitempty\"`\n\tNested []ABitOfEverythingNested `json:\"nested,omitempty\"`\n\t// Float value field\n\tFloatValue float32 `json:\"floatValue\"`\n\tDoubleValue float64 `json:\"doubleValue\"`\n\tInt64Value string `json:\"int64Value\"`\n\tUint64Value string `json:\"uint64Value,omitempty\"`\n\tInt32Value int32 `json:\"int32Value,omitempty\"`\n\tFixed64Value string `json:\"fixed64Value,omitempty\"`\n\tFixed32Value int64 `json:\"fixed32Value,omitempty\"`\n\tBoolValue bool `json:\"boolValue,omitempty\"`\n\tStringValue string `json:\"stringValue,omitempty\"`\n\tBytesValue string `json:\"bytesValue,omitempty\"`\n\tUint32Value int64 `json:\"uint32Value,omitempty\"`\n\tEnumValue *ExamplepbNumericEnum `json:\"enumValue,omitempty\"`\n\tPathEnumValue *PathenumPathEnum `json:\"pathEnumValue,omitempty\"`\n\tNestedPathEnumValue *MessagePathEnumNestedPathEnum `json:\"nestedPathEnumValue,omitempty\"`\n\tSfixed32Value int32 `json:\"sfixed32Value,omitempty\"`\n\tSfixed64Value string `json:\"sfixed64Value,omitempty\"`\n\tSint32Value int32 `json:\"sint32Value,omitempty\"`\n\tSint64Value string `json:\"sint64Value,omitempty\"`\n\tRepeatedStringValue []string `json:\"repeatedStringValue,omitempty\"`\n\tOneofEmpty *interface{} `json:\"oneofEmpty,omitempty\"`\n\tOneofString string `json:\"oneofString,omitempty\"`\n\tMapValue map[string]ExamplepbNumericEnum `json:\"mapValue,omitempty\"`\n\t// Map of string description.\n\tMappedStringValue map[string]string `json:\"mappedStringValue,omitempty\"`\n\tMappedNestedValue map[string]ABitOfEverythingNested `json:\"mappedNestedValue,omitempty\"`\n\tNonConventionalNameValue string `json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue time.Time `json:\"timestampValue,omitempty\"`\n\tRepeatedEnumValue []ExamplepbNumericEnum `json:\"repeatedEnumValue,omitempty\"`\n\t// Repeated numeric enum description.\n\tRepeatedEnumAnnotation []ExamplepbNumericEnum `json:\"repeatedEnumAnnotation,omitempty\"`\n\t// Numeric enum description.\n\tEnumValueAnnotation *ExamplepbNumericEnum `json:\"enumValueAnnotation,omitempty\"`\n\t// Repeated string description.\n\tRepeatedStringAnnotation []string `json:\"repeatedStringAnnotation,omitempty\"`\n\t// Repeated nested object description.\n\tRepeatedNestedAnnotation []ABitOfEverythingNested `json:\"repeatedNestedAnnotation,omitempty\"`\n\t// Nested object description.\n\tNestedAnnotation *ABitOfEverythingNested `json:\"nestedAnnotation,omitempty\"`\n\tInt64OverrideType int64 `json:\"int64OverrideType,omitempty\"`\n\tRequiredStringViaFieldBehaviorAnnotation string `json:\"requiredStringViaFieldBehaviorAnnotation\"`\n\tOutputOnlyStringViaFieldBehaviorAnnotation string `json:\"outputOnlyStringViaFieldBehaviorAnnotation,omitempty\"`\n\tOptionalStringValue string `json:\"optionalStringValue,omitempty\"`\n\t// Only digits are allowed.\n\tProductId []string `json:\"productId,omitempty\"`\n\tOptionalStringField string `json:\"optionalStringField,omitempty\"`\n\tRequiredStringField1 string `json:\"requiredStringField1\"`\n\tRequiredStringField2 string `json:\"requiredStringField2\"`\n\tRequiredFieldBehaviorJsonNameCustom string `json:\"required_field_behavior_json_name_custom\"`\n\tRequiredFieldSchemaJsonNameCustom string `json:\"required_field_schema_json_name_custom\"`\n\tTrailingOnly string `json:\"trailingOnly,omitempty\"`\n\t// Trailing only dot.\n\tTrailingOnlyDot string `json:\"trailingOnlyDot,omitempty\"`\n\t// Trailing both.\n\tTrailingBoth string `json:\"trailingBoth,omitempty\"`\n\t// This is an example of a multi-line comment.  Trailing multiline.\n\tTrailingMultiline string `json:\"trailingMultiline,omitempty\"`\n\tUuids []string `json:\"uuids,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_bar.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbBar struct {\n\tId string `json:\"id\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_body.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbBody struct {\n\tName string `json:\"name,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_book.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// An example resource type from AIP-123 used to test the behavior described in the CreateBookRequest message.  See: https://google.aip.dev/123\ntype ExamplepbBook struct {\n\t// The resource name of the book.  Format: `publishers/{publisher}/books/{book}`  Example: `publishers/1257894000000000000/books/my-book`\n\tName string `json:\"name,omitempty\"`\n\t// Output only. The book's ID.\n\tId string `json:\"id,omitempty\"`\n\t// Output only. Creation time of the book.\n\tCreateTime time.Time `json:\"createTime,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_check_status_response.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbCheckStatusResponse struct {\n\tStatus *GoogleRpcStatus `json:\"status,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_error_object.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbErrorObject struct {\n\t// Response code\n\tCode int32 `json:\"code,omitempty\"`\n\t// Response message\n\tMessage string `json:\"message,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_error_response.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbErrorResponse struct {\n\t// Unique event identifier for server requests\n\tCorrelationId string `json:\"correlationId,omitempty\"`\n\tError_ *ExamplepbErrorObject `json:\"error,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_numeric_enum.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n// ExamplepbNumericEnum : NumericEnum is one or zero.\ntype ExamplepbNumericEnum string\n\n// List of examplepbNumericEnum\nconst (\n\tZERO_ExamplepbNumericEnum ExamplepbNumericEnum = \"ZERO\"\n\tONE_ExamplepbNumericEnum ExamplepbNumericEnum = \"ONE\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_required_message_type_request.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbRequiredMessageTypeRequest struct {\n\tId string `json:\"id\"`\n\tFoo *ProtoExamplepbFoo `json:\"foo\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_snake_case_0_enum.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n// ExamplepbSnakeCase0Enum : - value_e: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE  - value_f: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\ntype ExamplepbSnakeCase0Enum string\n\n// List of examplepbSnake_case_0_enum\nconst (\n\tE_ExamplepbSnakeCase0Enum ExamplepbSnakeCase0Enum = \"value_e\"\n\tF_ExamplepbSnakeCase0Enum ExamplepbSnakeCase0Enum = \"value_f\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_snake_case_enum.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n// ExamplepbSnakeCaseEnum : - value_c: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE  - value_d: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\ntype ExamplepbSnakeCaseEnum string\n\n// List of examplepbSnake_case_enum\nconst (\n\tC_ExamplepbSnakeCaseEnum ExamplepbSnakeCaseEnum = \"value_c\"\n\tD_ExamplepbSnakeCaseEnum ExamplepbSnakeCaseEnum = \"value_d\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_examplepb_snake_enum_response.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ExamplepbSnakeEnumResponse struct {\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_google_rpc_status.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\n// The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details.  You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\ntype GoogleRpcStatus struct {\n\t// The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\n\tCode int32 `json:\"code,omitempty\"`\n\t// A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\n\tMessage string `json:\"message,omitempty\"`\n\t// A list of messages that carry the error details.  There is a common set of message types for APIs to use.\n\tDetails []ProtobufAny `json:\"details,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_message_path_enum_nested_path_enum.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype MessagePathEnumNestedPathEnum string\n\n// List of MessagePathEnumNestedPathEnum\nconst (\n\tGHI_MessagePathEnumNestedPathEnum MessagePathEnumNestedPathEnum = \"GHI\"\n\tJKL_MessagePathEnumNestedPathEnum MessagePathEnumNestedPathEnum = \"JKL\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_nested_deep_enum.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n// NestedDeepEnum : DeepEnum is one or zero.   - FALSE: FALSE is false.  - TRUE: TRUE is true.\ntype NestedDeepEnum string\n\n// List of NestedDeepEnum\nconst (\n\tFALSE_NestedDeepEnum NestedDeepEnum = \"FALSE\"\n\tTRUE_NestedDeepEnum NestedDeepEnum = \"TRUE\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_oneofenum_example_enum.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype OneofenumExampleEnum string\n\n// List of oneofenumExampleEnum\nconst (\n\tUNSPECIFIED_OneofenumExampleEnum OneofenumExampleEnum = \"EXAMPLE_ENUM_UNSPECIFIED\"\n\tFIRST_OneofenumExampleEnum OneofenumExampleEnum = \"EXAMPLE_ENUM_FIRST\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_pathenum_path_enum.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype PathenumPathEnum string\n\n// List of pathenumPathEnum\nconst (\n\tABC_PathenumPathEnum PathenumPathEnum = \"ABC\"\n\tDEF_PathenumPathEnum PathenumPathEnum = \"DEF\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_pathenum_snake_case_for_import.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n// PathenumSnakeCaseForImport : - value_x: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE  - value_y: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\ntype PathenumSnakeCaseForImport string\n\n// List of pathenumSnake_case_for_import\nconst (\n\tX_PathenumSnakeCaseForImport PathenumSnakeCaseForImport = \"value_x\"\n\tY_PathenumSnakeCaseForImport PathenumSnakeCaseForImport = \"value_y\"\n)\n"
  },
  {
    "path": "examples/internal/clients/abe/model_proto_examplepb_foo.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype ProtoExamplepbFoo struct {\n\tBar *ExamplepbBar `json:\"bar\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_protobuf_any.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\n// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message.  Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.  Example 1: Pack and unpack a message in C++.      Foo foo = ...;     Any any;     any.PackFrom(foo);     ...     if (any.UnpackTo(&foo)) {       ...     }  Example 2: Pack and unpack a message in Java.      Foo foo = ...;     Any any = Any.pack(foo);     ...     if (any.is(Foo.class)) {       foo = any.unpack(Foo.class);     }     // or ...     if (any.isSameTypeAs(Foo.getDefaultInstance())) {       foo = any.unpack(Foo.getDefaultInstance());     }   Example 3: Pack and unpack a message in Python.      foo = Foo(...)     any = Any()     any.Pack(foo)     ...     if any.Is(Foo.DESCRIPTOR):       any.Unpack(foo)       ...   Example 4: Pack and unpack a message in Go       foo := &pb.Foo{...}      any, err := anypb.New(foo)      if err != nil {        ...      }      ...      foo := &pb.Foo{}      if err := any.UnmarshalTo(foo); err != nil {        ...      }  The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type name \\\"y.z\\\".  JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example:      package google.profile;     message Person {       string first_name = 1;       string last_name = 2;     }      {       \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",       \\\"firstName\\\": <string>,       \\\"lastName\\\": <string>     }  If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]):      {       \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",       \\\"value\\\": \\\"1.212s\\\"     }\ntype ProtobufAny struct {\n\t// A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \\\"/\\\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \\\".\\\" is not accepted).  In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows:  * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][]   value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the   URL, or have them precompiled into a binary to avoid any   lookup. Therefore, binary compatibility needs to be preserved   on changes to types. (Use versioned type names to manage   breaking changes.)  Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.  Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics.\n\tType_ string `json:\"@type,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_sub_string_message.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype SubStringMessage struct {\n\tValue string `json:\"value,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_the_book_to_update_.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\n// The book's `name` field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book}\ntype TheBookToUpdate_ struct {\n\t// Output only. The book's ID.\n\tId string `json:\"id,omitempty\"`\n\t// Output only. Creation time of the book.\n\tCreateTime time.Time `json:\"createTime,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_the_book_to_update__1.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\npackage abe\nimport (\n\t\"time\"\n)\n\n// The book's `name` field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book}\ntype TheBookToUpdate1 struct {\n\t// Output only. The book's ID.\n\tId string `json:\"id,omitempty\"`\n\t// Output only. Creation time of the book.\n\tCreateTime time.Time `json:\"createTime,omitempty\"`\n}\n"
  },
  {
    "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",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"time\"\n)\n\ntype TheBookToUpdateTheBooksNameFieldIsUsedToIdentifyTheBookToBeUpdatedFormatPublisherspublisherbooksbook struct {\n\t// Output only. The book's ID.\n\tId string `json:\"id,omitempty\"`\n\t// Output only. Creation time of the book.\n\tCreateTime time.Time `json:\"createTime,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\ntype UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask struct {\n\tAbe *ABitOfEverything4 `json:\"abe,omitempty\"`\n\t// The paths to update.\n\tUpdateMask string `json:\"updateMask,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\npackage abe\n\ntype UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask1 struct {\n\tAbe *ABitOfEverything8 `json:\"abe,omitempty\"`\n\t// The paths to update.\n\tUpdateMask string `json:\"updateMask,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\n// Nested is nested type.\ntype V1exampledeepPathsingleNestedNameSingleNested struct {\n\tAmount int64 `json:\"amount,omitempty\"`\n\t// DeepEnum description.\n\tOk *NestedDeepEnum `json:\"ok,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/abe/response.go",
    "content": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage abe\n\nimport (\n\t\"net/http\"\n)\n\ntype APIResponse struct {\n\t*http.Response `json:\"-\"`\n\tMessage        string `json:\"message,omitempty\"`\n\t// Operation is the name of the swagger operation.\n\tOperation string `json:\"operation,omitempty\"`\n\t// RequestURL is the request URL. This value is always available, even if the\n\t// embedded *http.Response is nil.\n\tRequestURL string `json:\"url,omitempty\"`\n\t// Method is the HTTP method used for the request.  This value is always\n\t// available, even if the embedded *http.Response is nil.\n\tMethod string `json:\"method,omitempty\"`\n\t// Payload holds the contents of the response body (which may be nil or empty).\n\t// This is provided here as the raw response.Body() reader will have already\n\t// been drained.\n\tPayload []byte `json:\"-\"`\n}\n\nfunc NewAPIResponse(r *http.Response) *APIResponse {\n\n\tresponse := &APIResponse{Response: r}\n\treturn response\n}\n\nfunc NewAPIResponseWithError(errorMessage string) *APIResponse {\n\n\tresponse := &APIResponse{Message: errorMessage}\n\treturn response\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/.gitignore",
    "content": "/docs\n"
  },
  {
    "path": "examples/internal/clients/echo/.swagger-codegen/VERSION",
    "content": "2.4.8"
  },
  {
    "path": "examples/internal/clients/echo/.swagger-codegen-ignore",
    "content": ".gitignore\n"
  },
  {
    "path": "examples/internal/clients/echo/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"echo\",\n    srcs = [\n        \"api_echo_service.go\",\n        \"client.go\",\n        \"configuration.go\",\n        \"model_examplepb_dynamic_message.go\",\n        \"model_examplepb_dynamic_message_update.go\",\n        \"model_examplepb_embedded.go\",\n        \"model_examplepb_nested_message.go\",\n        \"model_examplepb_simple_message.go\",\n        \"model_examplepb_status_check_request.go\",\n        \"model_examplepb_status_check_response.go\",\n        \"model_google_rpc_status.go\",\n        \"model_proto_sub2_status.go\",\n        \"model_proto_sub_status.go\",\n        \"model_protobuf_any.go\",\n        \"model_protobuf_null_value.go\",\n        \"response.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/echo\",\n    deps = [\n        \"@com_github_antihax_optional//:optional\",\n        \"@org_golang_x_oauth2//:oauth2\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":echo\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/clients/echo/api/swagger.yaml",
    "content": "---\nswagger: \"2.0\"\ninfo:\n  description: \"Echo Service API consists of a single service which returns\\na message.\"\n  version: \"version not set\"\n  title: \"Echo Service\"\ntags:\n- name: \"EchoService\"\nconsumes:\n- \"application/json\"\nproduces:\n- \"application/json\"\npaths:\n  /v1/example/echo/nested/{nId.nId}:\n    get:\n      tags:\n      - \"EchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"EchoService_Echo7\"\n      parameters:\n      - name: \"nId.nId\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n      - name: \"id\"\n        in: \"query\"\n        description: \"Id represents the message identifier.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Id\"\n        x-optionalDataType: \"String\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo/resource/{resourceId}:\n    get:\n      tags:\n      - \"EchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"EchoService_Echo6\"\n      parameters:\n      - name: \"resourceId\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n      - name: \"id\"\n        in: \"query\"\n        description: \"Id represents the message identifier.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Id\"\n        x-optionalDataType: \"String\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo/{id}:\n    post:\n      tags:\n      - \"EchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"EchoService_Echo\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        description: \"Id represents the message identifier.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo/{id}/{num}:\n    get:\n      tags:\n      - \"EchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"EchoService_Echo2\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        description: \"Id represents the message identifier.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - name: \"num\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo/{id}/{num}/{lang}:\n    get:\n      tags:\n      - \"EchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"EchoService_Echo3\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        description: \"Id represents the message identifier.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - name: \"num\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n      - name: \"lang\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo1/{id}/{lineNum}/{status.note}:\n    get:\n      tags:\n      - \"EchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"EchoService_Echo4\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        description: \"Id represents the message identifier.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - name: \"lineNum\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n      - name: \"status.note\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo2/{no.note}:\n    get:\n      tags:\n      - \"EchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"EchoService_Echo5\"\n      parameters:\n      - name: \"no.note\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n      - name: \"id\"\n        in: \"query\"\n        description: \"Id represents the message identifier.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Id\"\n        x-optionalDataType: \"String\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo_body:\n    post:\n      tags:\n      - \"EchoService\"\n      summary: \"EchoBody method receives a simple message and returns it.\"\n      operationId: \"EchoService_EchoBody\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"SimpleMessage represents a simple message sent to the Echo service.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbSimpleMessage\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo_body/{id}:\n    put:\n      tags:\n      - \"EchoService\"\n      summary: \"EchoBody method receives a simple message and returns it.\"\n      operationId: \"EchoService_EchoBody2\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        description: \"Id represents the message identifier.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - in: \"body\"\n        name: \"no\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbEmbedded\"\n        x-exportParamName: \"No\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo_delete:\n    delete:\n      tags:\n      - \"EchoService\"\n      summary: \"EchoDelete method receives a simple message and returns it.\"\n      operationId: \"EchoService_EchoDelete\"\n      parameters:\n      - name: \"id\"\n        in: \"query\"\n        description: \"Id represents the message identifier.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Id\"\n        x-optionalDataType: \"String\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo_patch:\n    patch:\n      tags:\n      - \"EchoService\"\n      summary: \"EchoPatch method receives a NonStandardUpdateRequest and returns it.\"\n      operationId: \"EchoService_EchoPatch\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbDynamicMessage\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbDynamicMessageUpdate\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo_status:\n    post:\n      tags:\n      - \"EchoService\"\n      summary: \"EchoStatus demonstrates handling of name collisions.\\nIt uses Status\\\n        \\ types from both sub and sub2 packages which have the same name\\nbut different\\\n        \\ structures, demonstrating how the OpenAPI generator handles this scenario.\"\n      operationId: \"EchoService_EchoStatus\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"StatusCheckRequest demonstrates name collision handling.\\nIt\\\n          \\ uses Status message from both sub and sub2 packages.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbStatusCheckRequest\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbStatusCheckResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /v1/example/echo_unauthorized:\n    get:\n      tags:\n      - \"EchoService\"\n      summary: \"EchoUnauthorized method receives a simple message and returns it.\\\n        \\ It must\\nalways return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP\\\n        \\ Status code\\nof 401.\"\n      operationId: \"EchoService_EchoUnauthorized\"\n      parameters:\n      - name: \"id\"\n        in: \"query\"\n        description: \"Id represents the message identifier.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Id\"\n        x-optionalDataType: \"String\"\n      - name: \"num\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\ndefinitions:\n  examplepbDynamicMessage:\n    type: \"object\"\n    properties:\n      structField:\n        type: \"object\"\n        properties: {}\n      valueField: {}\n    description: \"DynamicMessage represents a message which can have its structure\\n\\\n      built dynamically using Struct and Values.\"\n    example:\n      structField: \"{}\"\n      valueField: \"\"\n  examplepbDynamicMessageUpdate:\n    type: \"object\"\n    properties:\n      body:\n        $ref: \"#/definitions/examplepbDynamicMessage\"\n      updateMask:\n        type: \"string\"\n    example:\n      body:\n        structField: \"{}\"\n        valueField: \"\"\n      updateMask: \"updateMask\"\n  examplepbEmbedded:\n    type: \"object\"\n    properties:\n      progress:\n        type: \"string\"\n        format: \"int64\"\n      note:\n        type: \"string\"\n    description: \"Embedded represents a message embedded in SimpleMessage.\"\n    example:\n      note: \"note\"\n      progress: \"progress\"\n  examplepbNestedMessage:\n    type: \"object\"\n    properties:\n      nId:\n        type: \"string\"\n      val:\n        type: \"string\"\n    example:\n      val: \"val\"\n      nId: \"nId\"\n  examplepbSimpleMessage:\n    type: \"object\"\n    properties:\n      id:\n        type: \"string\"\n        description: \"Id represents the message identifier.\"\n      num:\n        type: \"string\"\n        format: \"int64\"\n      lineNum:\n        type: \"string\"\n        format: \"int64\"\n      lang:\n        type: \"string\"\n      status:\n        $ref: \"#/definitions/examplepbEmbedded\"\n      en:\n        type: \"string\"\n        format: \"int64\"\n      \"no\":\n        $ref: \"#/definitions/examplepbEmbedded\"\n      resourceId:\n        type: \"string\"\n      nId:\n        $ref: \"#/definitions/examplepbNestedMessage\"\n    description: \"SimpleMessage represents a simple message sent to the Echo service.\"\n    example:\n      \"no\":\n        note: \"note\"\n        progress: \"progress\"\n      resourceId: \"resourceId\"\n      num: \"num\"\n      nId:\n        val: \"val\"\n        nId: \"nId\"\n      lineNum: \"lineNum\"\n      en: \"en\"\n      id: \"id\"\n      lang: \"lang\"\n      status:\n        note: \"note\"\n        progress: \"progress\"\n  examplepbStatusCheckRequest:\n    type: \"object\"\n    properties:\n      id:\n        type: \"string\"\n      subStatus:\n        title: \"Status from sub package\"\n        $ref: \"#/definitions/protoSubStatus\"\n      sub2Status:\n        title: \"Status from sub2 package (different type with same name)\"\n        $ref: \"#/definitions/protoSub2Status\"\n    description: \"StatusCheckRequest demonstrates name collision handling.\\nIt uses\\\n      \\ Status message from both sub and sub2 packages.\"\n  examplepbStatusCheckResponse:\n    type: \"object\"\n    properties:\n      result:\n        type: \"string\"\n      subStatus:\n        title: \"Both Status types used in response\"\n        $ref: \"#/definitions/protoSubStatus\"\n      sub2Status:\n        $ref: \"#/definitions/protoSub2Status\"\n    example:\n      result: \"result\"\n      sub2Status:\n        severity: 6\n        errorMessage: \"errorMessage\"\n        errorCode: \"errorCode\"\n      subStatus:\n        code: 0\n        message: \"message\"\n  googleRpcStatus:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n        format: \"int32\"\n        description: \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n      message:\n        type: \"string\"\n        description: \"A developer-facing error message, which should be in English.\\\n          \\ Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details]\\\n          \\ field, or localized by the client.\"\n      details:\n        type: \"array\"\n        description: \"A list of messages that carry the error details.  There is a\\\n          \\ common set of\\nmessage types for APIs to use.\"\n        items:\n          $ref: \"#/definitions/protobufAny\"\n    description: \"The `Status` type defines a logical error model that is suitable\\\n      \\ for\\ndifferent programming environments, including REST APIs and RPC APIs.\\\n      \\ It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\n\\\n      three pieces of data: error code, error message, and error details.\\n\\nYou can\\\n      \\ find out more about this error model and how to work with it in the\\n[API\\\n      \\ Design Guide](https://cloud.google.com/apis/design/errors).\"\n  protoSub2Status:\n    type: \"object\"\n    properties:\n      errorCode:\n        type: \"string\"\n      errorMessage:\n        type: \"string\"\n      severity:\n        type: \"integer\"\n        format: \"int32\"\n    title: \"Status message in sub2 package (different structure from sub.Status)\"\n    example:\n      severity: 6\n      errorMessage: \"errorMessage\"\n      errorCode: \"errorCode\"\n  protoSubStatus:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n        format: \"int32\"\n      message:\n        type: \"string\"\n    title: \"Status message in sub package\"\n    example:\n      code: 0\n      message: \"message\"\n  protobufAny:\n    type: \"object\"\n    properties:\n      '@type':\n        type: \"string\"\n        description: \"A URL/resource name that uniquely identifies the type of the\\\n          \\ serialized\\nprotocol buffer message. This string must contain at least\\n\\\n          one \\\"/\\\" character. The last segment of the URL's path must represent\\n\\\n          the fully qualified name of the type (as in\\n`path/google.protobuf.Duration`).\\\n          \\ The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\\n          \\nIn practice, teams usually precompile into the binary all types that they\\n\\\n          expect it to use in the context of Any. However, for URLs which use the\\n\\\n          scheme `http`, `https`, or no scheme, one can optionally set up a type\\n\\\n          server that maps type URLs to message definitions as follows:\\n\\n* If no\\\n          \\ scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must\\\n          \\ yield a [google.protobuf.Type][]\\n  value in binary format, or produce\\\n          \\ an error.\\n* Applications are allowed to cache lookup results based on\\\n          \\ the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup.\\\n          \\ Therefore, binary compatibility needs to be preserved\\n  on changes to\\\n          \\ types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote:\\\n          \\ this functionality is not currently available in the official\\nprotobuf\\\n          \\ release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\\n          \\ As of May 2023, there are no widely used type server\\nimplementations\\\n          \\ and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or\\\n          \\ the empty scheme) might be\\nused with implementation specific semantics.\"\n    description: \"`Any` contains an arbitrary serialized protocol buffer message along\\\n      \\ with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf\\\n      \\ library provides support to pack/unpack Any values in the form\\nof utility\\\n      \\ functions or additional generated methods of the Any type.\\n\\nExample 1: Pack\\\n      \\ and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n\\\n      \\    ...\\n    if (any.UnpackTo(&foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack\\\n      \\ and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n\\\n      \\    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n\\\n      \\    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n\\\n      \\      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack\\\n      \\ and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n \\\n      \\   any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n\\\n      \\      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := &pb.Foo{...}\\n\\\n      \\     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n\\\n      \\     ...\\n     foo := &pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err !=\\\n      \\ nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library\\\n      \\ will by default use\\n'type.googleapis.com/full.type.name' as the type URL\\\n      \\ and the unpack\\nmethods only use the fully qualified type name after the last\\\n      \\ '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\n\\\n      name \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses\\\n      \\ the regular\\nrepresentation of the deserialized, embedded message, with an\\n\\\n      additional field `@type` which contains the type URL. Example:\\n\\n    package\\\n      \\ google.profile;\\n    message Person {\\n      string first_name = 1;\\n    \\\n      \\  string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\"\\\n      ,\\n      \\\"firstName\\\": <string>,\\n      \\\"lastName\\\": <string>\\n    }\\n\\nIf\\\n      \\ the embedded message type is well-known and has a custom JSON\\nrepresentation,\\\n      \\ that representation will be embedded adding a field\\n`value` which holds the\\\n      \\ custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\\n      \\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n\\\n      \\      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    additionalProperties: {}\n  protobufNullValue:\n    type: \"string\"\n    description: \"`NullValue` is a singleton enumeration to represent the null value\\\n      \\ for the\\n`Value` type union.\\n\\nThe JSON representation for `NullValue` is\\\n      \\ JSON `null`.\\n\\n - NULL_VALUE: Null value.\"\n    enum:\n    - \"NULL_VALUE\"\n    default: \"NULL_VALUE\"\n"
  },
  {
    "path": "examples/internal/clients/echo/api_echo_service.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"fmt\"\n\t\"github.com/antihax/optional\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype EchoServiceApiService service\n\n/* \nEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id Id represents the message identifier.\n * @param optional nil or *EchoServiceEchoOpts - Optional Parameters:\n     * @param \"Num\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEchoOpts struct { \n\tNum optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEcho(ctx context.Context, id string, localVarOptionals *EchoServiceEchoOpts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo/{id}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id Id represents the message identifier.\n * @param num\n * @param optional nil or *EchoServiceEcho2Opts - Optional Parameters:\n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEcho2Opts struct { \n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEcho2(ctx context.Context, id string, num string, localVarOptionals *EchoServiceEcho2Opts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo/{id}/{num}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"num\"+\"}\", fmt.Sprintf(\"%v\", num), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id Id represents the message identifier.\n * @param num\n * @param lang\n * @param optional nil or *EchoServiceEcho3Opts - Optional Parameters:\n     * @param \"LineNum\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEcho3Opts struct { \n\tLineNum optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEcho3(ctx context.Context, id string, num string, lang string, localVarOptionals *EchoServiceEcho3Opts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo/{id}/{num}/{lang}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"num\"+\"}\", fmt.Sprintf(\"%v\", num), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"lang\"+\"}\", fmt.Sprintf(\"%v\", lang), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id Id represents the message identifier.\n * @param lineNum\n * @param statusNote\n * @param optional nil or *EchoServiceEcho4Opts - Optional Parameters:\n     * @param \"Num\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEcho4Opts struct { \n\tNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEcho4(ctx context.Context, id string, lineNum string, statusNote string, localVarOptionals *EchoServiceEcho4Opts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo1/{id}/{lineNum}/{status.note}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"lineNum\"+\"}\", fmt.Sprintf(\"%v\", lineNum), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"status.note\"+\"}\", fmt.Sprintf(\"%v\", statusNote), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param noNote\n * @param optional nil or *EchoServiceEcho5Opts - Optional Parameters:\n     * @param \"Id\" (optional.String) -  Id represents the message identifier.\n     * @param \"Num\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEcho5Opts struct { \n\tId optional.String\n\tNum optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEcho5(ctx context.Context, noNote string, localVarOptionals *EchoServiceEcho5Opts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo2/{no.note}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"no.note\"+\"}\", fmt.Sprintf(\"%v\", noNote), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Id.IsSet() {\n\t\tlocalVarQueryParams.Add(\"id\", parameterToString(localVarOptionals.Id.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param resourceId\n * @param optional nil or *EchoServiceEcho6Opts - Optional Parameters:\n     * @param \"Id\" (optional.String) -  Id represents the message identifier.\n     * @param \"Num\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEcho6Opts struct { \n\tId optional.String\n\tNum optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEcho6(ctx context.Context, resourceId string, localVarOptionals *EchoServiceEcho6Opts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo/resource/{resourceId}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"resourceId\"+\"}\", fmt.Sprintf(\"%v\", resourceId), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Id.IsSet() {\n\t\tlocalVarQueryParams.Add(\"id\", parameterToString(localVarOptionals.Id.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param nIdNId\n * @param optional nil or *EchoServiceEcho7Opts - Optional Parameters:\n     * @param \"Id\" (optional.String) -  Id represents the message identifier.\n     * @param \"Num\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEcho7Opts struct { \n\tId optional.String\n\tNum optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEcho7(ctx context.Context, nIdNId string, localVarOptionals *EchoServiceEcho7Opts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo/nested/{nId.nId}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"nId.nId\"+\"}\", fmt.Sprintf(\"%v\", nIdNId), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Id.IsSet() {\n\t\tlocalVarQueryParams.Add(\"id\", parameterToString(localVarOptionals.Id.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService EchoBody method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body SimpleMessage represents a simple message sent to the Echo service.\n\n@return ExamplepbSimpleMessage\n*/\nfunc (a *EchoServiceApiService) EchoServiceEchoBody(ctx context.Context, body ExamplepbSimpleMessage) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_body\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService EchoBody method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id Id represents the message identifier.\n * @param no\n * @param optional nil or *EchoServiceEchoBody2Opts - Optional Parameters:\n     * @param \"Num\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEchoBody2Opts struct { \n\tNum optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEchoBody2(ctx context.Context, id string, no ExamplepbEmbedded, localVarOptionals *EchoServiceEchoBody2Opts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Put\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_body/{id}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &no\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService EchoDelete method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param optional nil or *EchoServiceEchoDeleteOpts - Optional Parameters:\n     * @param \"Id\" (optional.String) -  Id represents the message identifier.\n     * @param \"Num\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEchoDeleteOpts struct { \n\tId optional.String\n\tNum optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEchoDelete(ctx context.Context, localVarOptionals *EchoServiceEchoDeleteOpts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Delete\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_delete\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Id.IsSet() {\n\t\tlocalVarQueryParams.Add(\"id\", parameterToString(localVarOptionals.Id.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService EchoPatch method receives a NonStandardUpdateRequest and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body\n\n@return ExamplepbDynamicMessageUpdate\n*/\nfunc (a *EchoServiceApiService) EchoServiceEchoPatch(ctx context.Context, body ExamplepbDynamicMessage) (ExamplepbDynamicMessageUpdate, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Patch\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbDynamicMessageUpdate\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_patch\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbDynamicMessageUpdate\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService EchoStatus demonstrates handling of name collisions. It uses Status types from both sub and sub2 packages which have the same name but different structures, demonstrating how the OpenAPI generator handles this scenario.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body StatusCheckRequest demonstrates name collision handling. It uses Status message from both sub and sub2 packages.\n\n@return ExamplepbStatusCheckResponse\n*/\nfunc (a *EchoServiceApiService) EchoServiceEchoStatus(ctx context.Context, body ExamplepbStatusCheckRequest) (ExamplepbStatusCheckResponse, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbStatusCheckResponse\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_status\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbStatusCheckResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nEchoServiceApiService EchoUnauthorized method receives a simple message and returns it. It must always return a google.rpc.Code of &#x60;UNAUTHENTICATED&#x60; and a HTTP Status code of 401.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param optional nil or *EchoServiceEchoUnauthorizedOpts - Optional Parameters:\n     * @param \"Id\" (optional.String) -  Id represents the message identifier.\n     * @param \"Num\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbSimpleMessage\n*/\n\ntype EchoServiceEchoUnauthorizedOpts struct { \n\tId optional.String\n\tNum optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *EchoServiceApiService) EchoServiceEchoUnauthorized(ctx context.Context, localVarOptionals *EchoServiceEchoUnauthorizedOpts) (ExamplepbSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_unauthorized\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Id.IsSet() {\n\t\tlocalVarQueryParams.Add(\"id\", parameterToString(localVarOptionals.Id.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Num.IsSet() {\n\t\tlocalVarQueryParams.Add(\"num\", parameterToString(localVarOptionals.Num.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/client.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/oauth2\"\n)\n\nvar (\n\tjsonCheck = regexp.MustCompile(\"(?i:[application|text]/json)\")\n\txmlCheck  = regexp.MustCompile(\"(?i:[application|text]/xml)\")\n)\n\n// APIClient manages communication with the Echo Service API vversion not set\n// In most cases there should be only one, shared, APIClient.\ntype APIClient struct {\n\tcfg    *Configuration\n\tcommon service // Reuse a single struct instead of allocating one for each service on the heap.\n\n\t// API Services\n\n\tEchoServiceApi *EchoServiceApiService\n}\n\ntype service struct {\n\tclient *APIClient\n}\n\n// NewAPIClient creates a new API client. Requires a userAgent string describing your application.\n// optionally a custom http.Client to allow for advanced features such as caching.\nfunc NewAPIClient(cfg *Configuration) *APIClient {\n\tif cfg.HTTPClient == nil {\n\t\tcfg.HTTPClient = http.DefaultClient\n\t}\n\n\tc := &APIClient{}\n\tc.cfg = cfg\n\tc.common.client = c\n\n\t// API Services\n\tc.EchoServiceApi = (*EchoServiceApiService)(&c.common)\n\n\treturn c\n}\n\nfunc atoi(in string) (int, error) {\n\treturn strconv.Atoi(in)\n}\n\n// selectHeaderContentType select a content type from the available list.\nfunc selectHeaderContentType(contentTypes []string) string {\n\tif len(contentTypes) == 0 {\n\t\treturn \"\"\n\t}\n\tif contains(contentTypes, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\treturn contentTypes[0] // use the first content type specified in 'consumes'\n}\n\n// selectHeaderAccept join all accept types and return\nfunc selectHeaderAccept(accepts []string) string {\n\tif len(accepts) == 0 {\n\t\treturn \"\"\n\t}\n\n\tif contains(accepts, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\n\treturn strings.Join(accepts, \",\")\n}\n\n// contains is a case insenstive match, finding needle in a haystack\nfunc contains(haystack []string, needle string) bool {\n\tfor _, a := range haystack {\n\t\tif strings.ToLower(a) == strings.ToLower(needle) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Verify optional parameters are of the correct type.\nfunc typeCheckParameter(obj interface{}, expected string, name string) error {\n\t// Make sure there is an object.\n\tif obj == nil {\n\t\treturn nil\n\t}\n\n\t// Check the type is as expected.\n\tif reflect.TypeOf(obj).String() != expected {\n\t\treturn fmt.Errorf(\"Expected %s to be of type %s but received %s.\", name, expected, reflect.TypeOf(obj).String())\n\t}\n\treturn nil\n}\n\n// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.\nfunc parameterToString(obj interface{}, collectionFormat string) string {\n\tvar delimiter string\n\n\tswitch collectionFormat {\n\tcase \"pipes\":\n\t\tdelimiter = \"|\"\n\tcase \"ssv\":\n\t\tdelimiter = \" \"\n\tcase \"tsv\":\n\t\tdelimiter = \"\\t\"\n\tcase \"csv\":\n\t\tdelimiter = \",\"\n\t}\n\n\tif reflect.TypeOf(obj).Kind() == reflect.Slice {\n\t\treturn strings.Trim(strings.Replace(fmt.Sprint(obj), \" \", delimiter, -1), \"[]\")\n\t}\n\n\treturn fmt.Sprintf(\"%v\", obj)\n}\n\n// callAPI do the request.\nfunc (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {\n\treturn c.cfg.HTTPClient.Do(request)\n}\n\n// Change base path to allow switching to mocks\nfunc (c *APIClient) ChangeBasePath(path string) {\n\tc.cfg.BasePath = path\n}\n\n// prepareRequest build the request\nfunc (c *APIClient) prepareRequest(\n\tctx context.Context,\n\tpath string, method string,\n\tpostBody interface{},\n\theaderParams map[string]string,\n\tqueryParams url.Values,\n\tformParams url.Values,\n\tfileName string,\n\tfileBytes []byte) (localVarRequest *http.Request, err error) {\n\n\tvar body *bytes.Buffer\n\n\t// Detect postBody type and post.\n\tif postBody != nil {\n\t\tcontentType := headerParams[\"Content-Type\"]\n\t\tif contentType == \"\" {\n\t\t\tcontentType = detectContentType(postBody)\n\t\t\theaderParams[\"Content-Type\"] = contentType\n\t\t}\n\n\t\tbody, err = setBody(postBody, contentType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// add form parameters and file if available.\n\tif len(formParams) > 0 || (len(fileBytes) > 0 && fileName != \"\") {\n\t\tif body != nil {\n\t\t\treturn nil, errors.New(\"Cannot specify postBody and multipart form at the same time.\")\n\t\t}\n\t\tbody = &bytes.Buffer{}\n\t\tw := multipart.NewWriter(body)\n\n\t\tfor k, v := range formParams {\n\t\t\tfor _, iv := range v {\n\t\t\t\tif strings.HasPrefix(k, \"@\") { // file\n\t\t\t\t\terr = addFile(w, k[1:], iv)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t} else { // form value\n\t\t\t\t\tw.WriteField(k, iv)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(fileBytes) > 0 && fileName != \"\" {\n\t\t\tw.Boundary()\n\t\t\t//_, fileNm := filepath.Split(fileName)\n\t\t\tpart, err := w.CreateFormFile(\"file\", filepath.Base(fileName))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t_, err = part.Write(fileBytes)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// Set the Boundary in the Content-Type\n\t\t\theaderParams[\"Content-Type\"] = w.FormDataContentType()\n\t\t}\n\n\t\t// Set Content-Length\n\t\theaderParams[\"Content-Length\"] = fmt.Sprintf(\"%d\", body.Len())\n\t\tw.Close()\n\t}\n\n\t// Setup path and query parameters\n\turl, err := url.Parse(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Adding Query Param\n\tquery := url.Query()\n\tfor k, v := range queryParams {\n\t\tfor _, iv := range v {\n\t\t\tquery.Add(k, iv)\n\t\t}\n\t}\n\n\t// Encode the parameters.\n\turl.RawQuery = query.Encode()\n\n\t// Generate a new request\n\tif body != nil {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), body)\n\t} else {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), nil)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// add header parameters, if any\n\tif len(headerParams) > 0 {\n\t\theaders := http.Header{}\n\t\tfor h, v := range headerParams {\n\t\t\theaders.Set(h, v)\n\t\t}\n\t\tlocalVarRequest.Header = headers\n\t}\n\n\t// Override request host, if applicable\n\tif c.cfg.Host != \"\" {\n\t\tlocalVarRequest.Host = c.cfg.Host\n\t}\n\n\t// Add the user agent to the request.\n\tlocalVarRequest.Header.Add(\"User-Agent\", c.cfg.UserAgent)\n\n\tif ctx != nil {\n\t\t// add context to the request\n\t\tlocalVarRequest = localVarRequest.WithContext(ctx)\n\n\t\t// Walk through any authentication.\n\n\t\t// OAuth2 authentication\n\t\tif tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {\n\t\t\t// We were able to grab an oauth2 token from the context\n\t\t\tvar latestToken *oauth2.Token\n\t\t\tif latestToken, err = tok.Token(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tlatestToken.SetAuthHeader(localVarRequest)\n\t\t}\n\n\t\t// Basic HTTP Authentication\n\t\tif auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {\n\t\t\tlocalVarRequest.SetBasicAuth(auth.UserName, auth.Password)\n\t\t}\n\n\t\t// AccessToken Authentication\n\t\tif auth, ok := ctx.Value(ContextAccessToken).(string); ok {\n\t\t\tlocalVarRequest.Header.Add(\"Authorization\", \"Bearer \"+auth)\n\t\t}\n\t}\n\n\tfor header, value := range c.cfg.DefaultHeader {\n\t\tlocalVarRequest.Header.Add(header, value)\n\t}\n\n\treturn localVarRequest, nil\n}\n\nfunc (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {\n\t\tif strings.Contains(contentType, \"application/xml\") {\n\t\t\tif err = xml.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t} else if strings.Contains(contentType, \"application/json\") {\n\t\t\tif err = json.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\treturn errors.New(\"undefined response type\")\n}\n\n// Add a file to the multipart request\nfunc addFile(w *multipart.Writer, fieldName, path string) error {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\tpart, err := w.CreateFormFile(fieldName, filepath.Base(path))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(part, file)\n\n\treturn err\n}\n\n// Prevent trying to import \"fmt\"\nfunc reportError(format string, a ...interface{}) error {\n\treturn fmt.Errorf(format, a...)\n}\n\n// Set request body from an interface{}\nfunc setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {\n\tif bodyBuf == nil {\n\t\tbodyBuf = &bytes.Buffer{}\n\t}\n\n\tif reader, ok := body.(io.Reader); ok {\n\t\t_, err = bodyBuf.ReadFrom(reader)\n\t} else if b, ok := body.([]byte); ok {\n\t\t_, err = bodyBuf.Write(b)\n\t} else if s, ok := body.(string); ok {\n\t\t_, err = bodyBuf.WriteString(s)\n\t} else if s, ok := body.(*string); ok {\n\t\t_, err = bodyBuf.WriteString(*s)\n\t} else if jsonCheck.MatchString(contentType) {\n\t\terr = json.NewEncoder(bodyBuf).Encode(body)\n\t} else if xmlCheck.MatchString(contentType) {\n\t\txml.NewEncoder(bodyBuf).Encode(body)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif bodyBuf.Len() == 0 {\n\t\terr = fmt.Errorf(\"Invalid body type %s\\n\", contentType)\n\t\treturn nil, err\n\t}\n\treturn bodyBuf, nil\n}\n\n// detectContentType method is used to figure out `Request.Body` content type for request header\nfunc detectContentType(body interface{}) string {\n\tcontentType := \"text/plain; charset=utf-8\"\n\tkind := reflect.TypeOf(body).Kind()\n\n\tswitch kind {\n\tcase reflect.Struct, reflect.Map, reflect.Ptr:\n\t\tcontentType = \"application/json; charset=utf-8\"\n\tcase reflect.String:\n\t\tcontentType = \"text/plain; charset=utf-8\"\n\tdefault:\n\t\tif b, ok := body.([]byte); ok {\n\t\t\tcontentType = http.DetectContentType(b)\n\t\t} else if kind == reflect.Slice {\n\t\t\tcontentType = \"application/json; charset=utf-8\"\n\t\t}\n\t}\n\n\treturn contentType\n}\n\n// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go\ntype cacheControl map[string]string\n\nfunc parseCacheControl(headers http.Header) cacheControl {\n\tcc := cacheControl{}\n\tccHeader := headers.Get(\"Cache-Control\")\n\tfor _, part := range strings.Split(ccHeader, \",\") {\n\t\tpart = strings.Trim(part, \" \")\n\t\tif part == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.ContainsRune(part, '=') {\n\t\t\tkeyval := strings.Split(part, \"=\")\n\t\t\tcc[strings.Trim(keyval[0], \" \")] = strings.Trim(keyval[1], \",\")\n\t\t} else {\n\t\t\tcc[part] = \"\"\n\t\t}\n\t}\n\treturn cc\n}\n\n// CacheExpires helper function to determine remaining time before repeating a request.\nfunc CacheExpires(r *http.Response) time.Time {\n\t// Figure out when the cache expires.\n\tvar expires time.Time\n\tnow, err := time.Parse(time.RFC1123, r.Header.Get(\"date\"))\n\tif err != nil {\n\t\treturn time.Now()\n\t}\n\trespCacheControl := parseCacheControl(r.Header)\n\n\tif maxAge, ok := respCacheControl[\"max-age\"]; ok {\n\t\tlifetime, err := time.ParseDuration(maxAge + \"s\")\n\t\tif err != nil {\n\t\t\texpires = now\n\t\t}\n\t\texpires = now.Add(lifetime)\n\t} else {\n\t\texpiresHeader := r.Header.Get(\"Expires\")\n\t\tif expiresHeader != \"\" {\n\t\t\texpires, err = time.Parse(time.RFC1123, expiresHeader)\n\t\t\tif err != nil {\n\t\t\t\texpires = now\n\t\t\t}\n\t\t}\n\t}\n\treturn expires\n}\n\nfunc strlen(s string) int {\n\treturn utf8.RuneCountInString(s)\n}\n\n// GenericSwaggerError Provides access to the body, error and model on returned errors.\ntype GenericSwaggerError struct {\n\tbody  []byte\n\terror string\n\tmodel interface{}\n}\n\n// Error returns non-empty string if there was an error.\nfunc (e GenericSwaggerError) Error() string {\n\treturn e.error\n}\n\n// Body returns the raw bytes of the response\nfunc (e GenericSwaggerError) Body() []byte {\n\treturn e.body\n}\n\n// Model returns the unpacked model of the error\nfunc (e GenericSwaggerError) Model() interface{} {\n\treturn e.model\n}"
  },
  {
    "path": "examples/internal/clients/echo/configuration.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\nimport (\n\t\"net/http\"\n)\n\n// contextKeys are used to identify the type of value in the context.\n// Since these are string, it is possible to get a short description of the\n// context key for logging and debugging using key.String().\n\ntype contextKey string\n\nfunc (c contextKey) String() string {\n\treturn \"auth \" + string(c)\n}\n\nvar (\n\t// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.\n\tContextOAuth2 = contextKey(\"token\")\n\n\t// ContextBasicAuth takes BasicAuth as authentication for the request.\n\tContextBasicAuth = contextKey(\"basic\")\n\n\t// ContextAccessToken takes a string oauth2 access token as authentication for the request.\n\tContextAccessToken = contextKey(\"accesstoken\")\n\n\t// ContextAPIKey takes an APIKey as authentication for the request\n\tContextAPIKey = contextKey(\"apikey\")\n)\n\n// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth\ntype BasicAuth struct {\n\tUserName string `json:\"userName,omitempty\"`\n\tPassword string `json:\"password,omitempty\"`\n}\n\n// APIKey provides API key based authentication to a request passed via context using ContextAPIKey\ntype APIKey struct {\n\tKey    string\n\tPrefix string\n}\n\ntype Configuration struct {\n\tBasePath      string            `json:\"basePath,omitempty\"`\n\tHost          string            `json:\"host,omitempty\"`\n\tScheme        string            `json:\"scheme,omitempty\"`\n\tDefaultHeader map[string]string `json:\"defaultHeader,omitempty\"`\n\tUserAgent     string            `json:\"userAgent,omitempty\"`\n\tHTTPClient    *http.Client\n}\n\nfunc NewConfiguration() *Configuration {\n\tcfg := &Configuration{\n\t\tBasePath:      \"https://localhost\",\n\t\tDefaultHeader: make(map[string]string),\n\t\tUserAgent:     \"Swagger-Codegen/1.0.0/go\",\n\t}\n\treturn cfg\n}\n\nfunc (c *Configuration) AddDefaultHeader(key string, value string) {\n\tc.DefaultHeader[key] = value\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_examplepb_dynamic_message.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\n// DynamicMessage represents a message which can have its structure built dynamically using Struct and Values.\ntype ExamplepbDynamicMessage struct {\n\tStructField *interface{} `json:\"structField,omitempty\"`\n\tValueField *interface{} `json:\"valueField,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_examplepb_dynamic_message_update.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\ntype ExamplepbDynamicMessageUpdate struct {\n\tBody *ExamplepbDynamicMessage `json:\"body,omitempty\"`\n\tUpdateMask string `json:\"updateMask,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_examplepb_embedded.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\n// Embedded represents a message embedded in SimpleMessage.\ntype ExamplepbEmbedded struct {\n\tProgress string `json:\"progress,omitempty\"`\n\tNote string `json:\"note,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_examplepb_nested_message.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\ntype ExamplepbNestedMessage struct {\n\tNId string `json:\"nId,omitempty\"`\n\tVal string `json:\"val,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_examplepb_simple_message.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\n// SimpleMessage represents a simple message sent to the Echo service.\ntype ExamplepbSimpleMessage struct {\n\t// Id represents the message identifier.\n\tId string `json:\"id,omitempty\"`\n\tNum string `json:\"num,omitempty\"`\n\tLineNum string `json:\"lineNum,omitempty\"`\n\tLang string `json:\"lang,omitempty\"`\n\tStatus *ExamplepbEmbedded `json:\"status,omitempty\"`\n\tEn string `json:\"en,omitempty\"`\n\tNo *ExamplepbEmbedded `json:\"no,omitempty\"`\n\tResourceId string `json:\"resourceId,omitempty\"`\n\tNId *ExamplepbNestedMessage `json:\"nId,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_examplepb_status_check_request.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\n// StatusCheckRequest demonstrates name collision handling. It uses Status message from both sub and sub2 packages.\ntype ExamplepbStatusCheckRequest struct {\n\tId string `json:\"id,omitempty\"`\n\tSubStatus *ProtoSubStatus `json:\"subStatus,omitempty\"`\n\tSub2Status *ProtoSub2Status `json:\"sub2Status,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_examplepb_status_check_response.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\ntype ExamplepbStatusCheckResponse struct {\n\tResult string `json:\"result,omitempty\"`\n\tSubStatus *ProtoSubStatus `json:\"subStatus,omitempty\"`\n\tSub2Status *ProtoSub2Status `json:\"sub2Status,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_google_rpc_status.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\n// The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details.  You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\ntype GoogleRpcStatus struct {\n\t// The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\n\tCode int32 `json:\"code,omitempty\"`\n\t// A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\n\tMessage string `json:\"message,omitempty\"`\n\t// A list of messages that carry the error details.  There is a common set of message types for APIs to use.\n\tDetails []ProtobufAny `json:\"details,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_proto_sub2_status.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\ntype ProtoSub2Status struct {\n\tErrorCode string `json:\"errorCode,omitempty\"`\n\tErrorMessage string `json:\"errorMessage,omitempty\"`\n\tSeverity int32 `json:\"severity,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_proto_sub_status.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\ntype ProtoSubStatus struct {\n\tCode int32 `json:\"code,omitempty\"`\n\tMessage string `json:\"message,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_protobuf_any.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\n// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message.  Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.  Example 1: Pack and unpack a message in C++.      Foo foo = ...;     Any any;     any.PackFrom(foo);     ...     if (any.UnpackTo(&foo)) {       ...     }  Example 2: Pack and unpack a message in Java.      Foo foo = ...;     Any any = Any.pack(foo);     ...     if (any.is(Foo.class)) {       foo = any.unpack(Foo.class);     }     // or ...     if (any.isSameTypeAs(Foo.getDefaultInstance())) {       foo = any.unpack(Foo.getDefaultInstance());     }   Example 3: Pack and unpack a message in Python.      foo = Foo(...)     any = Any()     any.Pack(foo)     ...     if any.Is(Foo.DESCRIPTOR):       any.Unpack(foo)       ...   Example 4: Pack and unpack a message in Go       foo := &pb.Foo{...}      any, err := anypb.New(foo)      if err != nil {        ...      }      ...      foo := &pb.Foo{}      if err := any.UnmarshalTo(foo); err != nil {        ...      }  The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type name \\\"y.z\\\".  JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example:      package google.profile;     message Person {       string first_name = 1;       string last_name = 2;     }      {       \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",       \\\"firstName\\\": <string>,       \\\"lastName\\\": <string>     }  If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]):      {       \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",       \\\"value\\\": \\\"1.212s\\\"     }\ntype ProtobufAny struct {\n\t// A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \\\"/\\\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \\\".\\\" is not accepted).  In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows:  * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][]   value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the   URL, or have them precompiled into a binary to avoid any   lookup. Therefore, binary compatibility needs to be preserved   on changes to types. (Use versioned type names to manage   breaking changes.)  Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.  Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics.\n\tType_ string `json:\"@type,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/echo/model_protobuf_null_value.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n// ProtobufNullValue : `NullValue` is a singleton enumeration to represent the null value for the `Value` type union.  The JSON representation for `NullValue` is JSON `null`.   - NULL_VALUE: Null value.\ntype ProtobufNullValue string\n\n// List of protobufNullValue\nconst (\n\tNULL_VALUE_ProtobufNullValue ProtobufNullValue = \"NULL_VALUE\"\n)\n"
  },
  {
    "path": "examples/internal/clients/echo/response.go",
    "content": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage echo\n\nimport (\n\t\"net/http\"\n)\n\ntype APIResponse struct {\n\t*http.Response `json:\"-\"`\n\tMessage        string `json:\"message,omitempty\"`\n\t// Operation is the name of the swagger operation.\n\tOperation string `json:\"operation,omitempty\"`\n\t// RequestURL is the request URL. This value is always available, even if the\n\t// embedded *http.Response is nil.\n\tRequestURL string `json:\"url,omitempty\"`\n\t// Method is the HTTP method used for the request.  This value is always\n\t// available, even if the embedded *http.Response is nil.\n\tMethod string `json:\"method,omitempty\"`\n\t// Payload holds the contents of the response body (which may be nil or empty).\n\t// This is provided here as the raw response.Body() reader will have already\n\t// been drained.\n\tPayload []byte `json:\"-\"`\n}\n\nfunc NewAPIResponse(r *http.Response) *APIResponse {\n\n\tresponse := &APIResponse{Response: r}\n\treturn response\n}\n\nfunc NewAPIResponseWithError(errorMessage string) *APIResponse {\n\n\tresponse := &APIResponse{Message: errorMessage}\n\treturn response\n}\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/.gitignore",
    "content": "/docs\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/.swagger-codegen/VERSION",
    "content": "2.4.8"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/.swagger-codegen-ignore",
    "content": ".gitignore\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\ngo_library(\n    name = \"generateunboundmethods\",\n    srcs = [\n        \"api_generate_unbound_methods_echo_service.go\",\n        \"client.go\",\n        \"configuration.go\",\n        \"model_examplepb_generate_unbound_methods_simple_message.go\",\n        \"model_protobuf_any.go\",\n        \"model_rpc_status.go\",\n        \"model_runtime_error.go\",\n        \"response.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/generateunboundmethods\",\n    visibility = [\"//examples:__subpackages__\"],\n    deps = [\"@org_golang_x_oauth2//:oauth2\"],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":generateunboundmethods\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/api/swagger.yaml",
    "content": "---\nswagger: \"2.0\"\ninfo:\n  description: \"Generate Unannotated Methods Echo Service\\nSimilar to echo_service.proto\\\n    \\ but without annotations and without external configuration.\\n\\nGenerate Unannotated\\\n    \\ Methods Echo Service API consists of a single service which returns\\na message.\"\n  version: \"version not set\"\n  title: \"examples/internal/proto/examplepb/generate_unbound_methods.proto\"\ntags:\n- name: \"GenerateUnboundMethodsEchoService\"\nconsumes:\n- \"application/json\"\nproduces:\n- \"application/json\"\npaths:\n  /grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo:\n    post:\n      tags:\n      - \"GenerateUnboundMethodsEchoService\"\n      summary: \"Echo method receives a simple message and returns it.\"\n      description: \"The message posted as the id parameter will also be\\nreturned.\"\n      operationId: \"GenerateUnboundMethodsEchoService_Echo\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"GenerateUnboundMethodsSimpleMessage represents a simple message\\\n          \\ sent to the unannotated GenerateUnboundMethodsEchoService service.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\n  /grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody:\n    post:\n      tags:\n      - \"GenerateUnboundMethodsEchoService\"\n      summary: \"EchoBody method receives a simple message and returns it.\"\n      operationId: \"GenerateUnboundMethodsEchoService_EchoBody\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"GenerateUnboundMethodsSimpleMessage represents a simple message\\\n          \\ sent to the unannotated GenerateUnboundMethodsEchoService service.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\n  /grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete:\n    post:\n      tags:\n      - \"GenerateUnboundMethodsEchoService\"\n      summary: \"EchoDelete method receives a simple message and returns it.\"\n      operationId: \"GenerateUnboundMethodsEchoService_EchoDelete\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"GenerateUnboundMethodsSimpleMessage represents a simple message\\\n          \\ sent to the unannotated GenerateUnboundMethodsEchoService service.\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\ndefinitions:\n  examplepbGenerateUnboundMethodsSimpleMessage:\n    type: \"object\"\n    properties:\n      id:\n        type: \"string\"\n        description: \"Id represents the message identifier.\"\n      num:\n        type: \"string\"\n        format: \"int64\"\n      duration:\n        type: \"string\"\n    description: \"GenerateUnboundMethodsSimpleMessage represents a simple message\\\n      \\ sent to the unannotated GenerateUnboundMethodsEchoService service.\"\n    example:\n      duration: \"duration\"\n      num: \"num\"\n      id: \"id\"\n  protobufAny:\n    type: \"object\"\n    properties:\n      '@type':\n        type: \"string\"\n    additionalProperties: {}\n  rpcStatus:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n        format: \"int32\"\n      message:\n        type: \"string\"\n      details:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/protobufAny\"\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/api_generate_unbound_methods_echo_service.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype GenerateUnboundMethodsEchoServiceApiService service\n\n/* \nGenerateUnboundMethodsEchoServiceApiService Echo method receives a simple message and returns it.\nThe message posted as the id parameter will also be returned.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\n\n@return ExamplepbGenerateUnboundMethodsSimpleMessage\n*/\nfunc (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundMethodsEchoServiceEcho(ctx context.Context, body ExamplepbGenerateUnboundMethodsSimpleMessage) (ExamplepbGenerateUnboundMethodsSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbGenerateUnboundMethodsSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbGenerateUnboundMethodsSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nGenerateUnboundMethodsEchoServiceApiService EchoBody method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\n\n@return ExamplepbGenerateUnboundMethodsSimpleMessage\n*/\nfunc (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundMethodsEchoServiceEchoBody(ctx context.Context, body ExamplepbGenerateUnboundMethodsSimpleMessage) (ExamplepbGenerateUnboundMethodsSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbGenerateUnboundMethodsSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbGenerateUnboundMethodsSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nGenerateUnboundMethodsEchoServiceApiService EchoDelete method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\n\n@return ExamplepbGenerateUnboundMethodsSimpleMessage\n*/\nfunc (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundMethodsEchoServiceEchoDelete(ctx context.Context, body ExamplepbGenerateUnboundMethodsSimpleMessage) (ExamplepbGenerateUnboundMethodsSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbGenerateUnboundMethodsSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbGenerateUnboundMethodsSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/client.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/oauth2\"\n)\n\nvar (\n\tjsonCheck = regexp.MustCompile(\"(?i:[application|text]/json)\")\n\txmlCheck  = regexp.MustCompile(\"(?i:[application|text]/xml)\")\n)\n\n// APIClient manages communication with the examples/internal/proto/examplepb/generate_unbound_methods.proto API vversion not set\n// In most cases there should be only one, shared, APIClient.\ntype APIClient struct {\n\tcfg    *Configuration\n\tcommon service // Reuse a single struct instead of allocating one for each service on the heap.\n\n\t// API Services\n\n\tGenerateUnboundMethodsEchoServiceApi *GenerateUnboundMethodsEchoServiceApiService\n}\n\ntype service struct {\n\tclient *APIClient\n}\n\n// NewAPIClient creates a new API client. Requires a userAgent string describing your application.\n// optionally a custom http.Client to allow for advanced features such as caching.\nfunc NewAPIClient(cfg *Configuration) *APIClient {\n\tif cfg.HTTPClient == nil {\n\t\tcfg.HTTPClient = http.DefaultClient\n\t}\n\n\tc := &APIClient{}\n\tc.cfg = cfg\n\tc.common.client = c\n\n\t// API Services\n\tc.GenerateUnboundMethodsEchoServiceApi = (*GenerateUnboundMethodsEchoServiceApiService)(&c.common)\n\n\treturn c\n}\n\nfunc atoi(in string) (int, error) {\n\treturn strconv.Atoi(in)\n}\n\n// selectHeaderContentType select a content type from the available list.\nfunc selectHeaderContentType(contentTypes []string) string {\n\tif len(contentTypes) == 0 {\n\t\treturn \"\"\n\t}\n\tif contains(contentTypes, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\treturn contentTypes[0] // use the first content type specified in 'consumes'\n}\n\n// selectHeaderAccept join all accept types and return\nfunc selectHeaderAccept(accepts []string) string {\n\tif len(accepts) == 0 {\n\t\treturn \"\"\n\t}\n\n\tif contains(accepts, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\n\treturn strings.Join(accepts, \",\")\n}\n\n// contains is a case insenstive match, finding needle in a haystack\nfunc contains(haystack []string, needle string) bool {\n\tfor _, a := range haystack {\n\t\tif strings.ToLower(a) == strings.ToLower(needle) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Verify optional parameters are of the correct type.\nfunc typeCheckParameter(obj interface{}, expected string, name string) error {\n\t// Make sure there is an object.\n\tif obj == nil {\n\t\treturn nil\n\t}\n\n\t// Check the type is as expected.\n\tif reflect.TypeOf(obj).String() != expected {\n\t\treturn fmt.Errorf(\"Expected %s to be of type %s but received %s.\", name, expected, reflect.TypeOf(obj).String())\n\t}\n\treturn nil\n}\n\n// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.\nfunc parameterToString(obj interface{}, collectionFormat string) string {\n\tvar delimiter string\n\n\tswitch collectionFormat {\n\tcase \"pipes\":\n\t\tdelimiter = \"|\"\n\tcase \"ssv\":\n\t\tdelimiter = \" \"\n\tcase \"tsv\":\n\t\tdelimiter = \"\\t\"\n\tcase \"csv\":\n\t\tdelimiter = \",\"\n\t}\n\n\tif reflect.TypeOf(obj).Kind() == reflect.Slice {\n\t\treturn strings.Trim(strings.Replace(fmt.Sprint(obj), \" \", delimiter, -1), \"[]\")\n\t}\n\n\treturn fmt.Sprintf(\"%v\", obj)\n}\n\n// callAPI do the request.\nfunc (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {\n\treturn c.cfg.HTTPClient.Do(request)\n}\n\n// Change base path to allow switching to mocks\nfunc (c *APIClient) ChangeBasePath(path string) {\n\tc.cfg.BasePath = path\n}\n\n// prepareRequest build the request\nfunc (c *APIClient) prepareRequest(\n\tctx context.Context,\n\tpath string, method string,\n\tpostBody interface{},\n\theaderParams map[string]string,\n\tqueryParams url.Values,\n\tformParams url.Values,\n\tfileName string,\n\tfileBytes []byte) (localVarRequest *http.Request, err error) {\n\n\tvar body *bytes.Buffer\n\n\t// Detect postBody type and post.\n\tif postBody != nil {\n\t\tcontentType := headerParams[\"Content-Type\"]\n\t\tif contentType == \"\" {\n\t\t\tcontentType = detectContentType(postBody)\n\t\t\theaderParams[\"Content-Type\"] = contentType\n\t\t}\n\n\t\tbody, err = setBody(postBody, contentType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// add form parameters and file if available.\n\tif len(formParams) > 0 || (len(fileBytes) > 0 && fileName != \"\") {\n\t\tif body != nil {\n\t\t\treturn nil, errors.New(\"Cannot specify postBody and multipart form at the same time.\")\n\t\t}\n\t\tbody = &bytes.Buffer{}\n\t\tw := multipart.NewWriter(body)\n\n\t\tfor k, v := range formParams {\n\t\t\tfor _, iv := range v {\n\t\t\t\tif strings.HasPrefix(k, \"@\") { // file\n\t\t\t\t\terr = addFile(w, k[1:], iv)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t} else { // form value\n\t\t\t\t\tw.WriteField(k, iv)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(fileBytes) > 0 && fileName != \"\" {\n\t\t\tw.Boundary()\n\t\t\t//_, fileNm := filepath.Split(fileName)\n\t\t\tpart, err := w.CreateFormFile(\"file\", filepath.Base(fileName))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t_, err = part.Write(fileBytes)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// Set the Boundary in the Content-Type\n\t\t\theaderParams[\"Content-Type\"] = w.FormDataContentType()\n\t\t}\n\n\t\t// Set Content-Length\n\t\theaderParams[\"Content-Length\"] = fmt.Sprintf(\"%d\", body.Len())\n\t\tw.Close()\n\t}\n\n\t// Setup path and query parameters\n\turl, err := url.Parse(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Adding Query Param\n\tquery := url.Query()\n\tfor k, v := range queryParams {\n\t\tfor _, iv := range v {\n\t\t\tquery.Add(k, iv)\n\t\t}\n\t}\n\n\t// Encode the parameters.\n\turl.RawQuery = query.Encode()\n\n\t// Generate a new request\n\tif body != nil {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), body)\n\t} else {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), nil)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// add header parameters, if any\n\tif len(headerParams) > 0 {\n\t\theaders := http.Header{}\n\t\tfor h, v := range headerParams {\n\t\t\theaders.Set(h, v)\n\t\t}\n\t\tlocalVarRequest.Header = headers\n\t}\n\n\t// Override request host, if applicable\n\tif c.cfg.Host != \"\" {\n\t\tlocalVarRequest.Host = c.cfg.Host\n\t}\n\n\t// Add the user agent to the request.\n\tlocalVarRequest.Header.Add(\"User-Agent\", c.cfg.UserAgent)\n\n\tif ctx != nil {\n\t\t// add context to the request\n\t\tlocalVarRequest = localVarRequest.WithContext(ctx)\n\n\t\t// Walk through any authentication.\n\n\t\t// OAuth2 authentication\n\t\tif tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {\n\t\t\t// We were able to grab an oauth2 token from the context\n\t\t\tvar latestToken *oauth2.Token\n\t\t\tif latestToken, err = tok.Token(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tlatestToken.SetAuthHeader(localVarRequest)\n\t\t}\n\n\t\t// Basic HTTP Authentication\n\t\tif auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {\n\t\t\tlocalVarRequest.SetBasicAuth(auth.UserName, auth.Password)\n\t\t}\n\n\t\t// AccessToken Authentication\n\t\tif auth, ok := ctx.Value(ContextAccessToken).(string); ok {\n\t\t\tlocalVarRequest.Header.Add(\"Authorization\", \"Bearer \"+auth)\n\t\t}\n\t}\n\n\tfor header, value := range c.cfg.DefaultHeader {\n\t\tlocalVarRequest.Header.Add(header, value)\n\t}\n\n\treturn localVarRequest, nil\n}\n\nfunc (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {\n\t\tif strings.Contains(contentType, \"application/xml\") {\n\t\t\tif err = xml.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t} else if strings.Contains(contentType, \"application/json\") {\n\t\t\tif err = json.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\treturn errors.New(\"undefined response type\")\n}\n\n// Add a file to the multipart request\nfunc addFile(w *multipart.Writer, fieldName, path string) error {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\tpart, err := w.CreateFormFile(fieldName, filepath.Base(path))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(part, file)\n\n\treturn err\n}\n\n// Prevent trying to import \"fmt\"\nfunc reportError(format string, a ...interface{}) error {\n\treturn fmt.Errorf(format, a...)\n}\n\n// Set request body from an interface{}\nfunc setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {\n\tif bodyBuf == nil {\n\t\tbodyBuf = &bytes.Buffer{}\n\t}\n\n\tif reader, ok := body.(io.Reader); ok {\n\t\t_, err = bodyBuf.ReadFrom(reader)\n\t} else if b, ok := body.([]byte); ok {\n\t\t_, err = bodyBuf.Write(b)\n\t} else if s, ok := body.(string); ok {\n\t\t_, err = bodyBuf.WriteString(s)\n\t} else if s, ok := body.(*string); ok {\n\t\t_, err = bodyBuf.WriteString(*s)\n\t} else if jsonCheck.MatchString(contentType) {\n\t\terr = json.NewEncoder(bodyBuf).Encode(body)\n\t} else if xmlCheck.MatchString(contentType) {\n\t\txml.NewEncoder(bodyBuf).Encode(body)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif bodyBuf.Len() == 0 {\n\t\terr = fmt.Errorf(\"Invalid body type %s\\n\", contentType)\n\t\treturn nil, err\n\t}\n\treturn bodyBuf, nil\n}\n\n// detectContentType method is used to figure out `Request.Body` content type for request header\nfunc detectContentType(body interface{}) string {\n\tcontentType := \"text/plain; charset=utf-8\"\n\tkind := reflect.TypeOf(body).Kind()\n\n\tswitch kind {\n\tcase reflect.Struct, reflect.Map, reflect.Ptr:\n\t\tcontentType = \"application/json; charset=utf-8\"\n\tcase reflect.String:\n\t\tcontentType = \"text/plain; charset=utf-8\"\n\tdefault:\n\t\tif b, ok := body.([]byte); ok {\n\t\t\tcontentType = http.DetectContentType(b)\n\t\t} else if kind == reflect.Slice {\n\t\t\tcontentType = \"application/json; charset=utf-8\"\n\t\t}\n\t}\n\n\treturn contentType\n}\n\n// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go\ntype cacheControl map[string]string\n\nfunc parseCacheControl(headers http.Header) cacheControl {\n\tcc := cacheControl{}\n\tccHeader := headers.Get(\"Cache-Control\")\n\tfor _, part := range strings.Split(ccHeader, \",\") {\n\t\tpart = strings.Trim(part, \" \")\n\t\tif part == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.ContainsRune(part, '=') {\n\t\t\tkeyval := strings.Split(part, \"=\")\n\t\t\tcc[strings.Trim(keyval[0], \" \")] = strings.Trim(keyval[1], \",\")\n\t\t} else {\n\t\t\tcc[part] = \"\"\n\t\t}\n\t}\n\treturn cc\n}\n\n// CacheExpires helper function to determine remaining time before repeating a request.\nfunc CacheExpires(r *http.Response) time.Time {\n\t// Figure out when the cache expires.\n\tvar expires time.Time\n\tnow, err := time.Parse(time.RFC1123, r.Header.Get(\"date\"))\n\tif err != nil {\n\t\treturn time.Now()\n\t}\n\trespCacheControl := parseCacheControl(r.Header)\n\n\tif maxAge, ok := respCacheControl[\"max-age\"]; ok {\n\t\tlifetime, err := time.ParseDuration(maxAge + \"s\")\n\t\tif err != nil {\n\t\t\texpires = now\n\t\t}\n\t\texpires = now.Add(lifetime)\n\t} else {\n\t\texpiresHeader := r.Header.Get(\"Expires\")\n\t\tif expiresHeader != \"\" {\n\t\t\texpires, err = time.Parse(time.RFC1123, expiresHeader)\n\t\t\tif err != nil {\n\t\t\t\texpires = now\n\t\t\t}\n\t\t}\n\t}\n\treturn expires\n}\n\nfunc strlen(s string) int {\n\treturn utf8.RuneCountInString(s)\n}\n\n// GenericSwaggerError Provides access to the body, error and model on returned errors.\ntype GenericSwaggerError struct {\n\tbody  []byte\n\terror string\n\tmodel interface{}\n}\n\n// Error returns non-empty string if there was an error.\nfunc (e GenericSwaggerError) Error() string {\n\treturn e.error\n}\n\n// Body returns the raw bytes of the response\nfunc (e GenericSwaggerError) Body() []byte {\n\treturn e.body\n}\n\n// Model returns the unpacked model of the error\nfunc (e GenericSwaggerError) Model() interface{} {\n\treturn e.model\n}"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/configuration.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\nimport (\n\t\"net/http\"\n)\n\n// contextKeys are used to identify the type of value in the context.\n// Since these are string, it is possible to get a short description of the\n// context key for logging and debugging using key.String().\n\ntype contextKey string\n\nfunc (c contextKey) String() string {\n\treturn \"auth \" + string(c)\n}\n\nvar (\n\t// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.\n\tContextOAuth2 = contextKey(\"token\")\n\n\t// ContextBasicAuth takes BasicAuth as authentication for the request.\n\tContextBasicAuth = contextKey(\"basic\")\n\n\t// ContextAccessToken takes a string oauth2 access token as authentication for the request.\n\tContextAccessToken = contextKey(\"accesstoken\")\n\n\t// ContextAPIKey takes an APIKey as authentication for the request\n\tContextAPIKey = contextKey(\"apikey\")\n)\n\n// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth\ntype BasicAuth struct {\n\tUserName string `json:\"userName,omitempty\"`\n\tPassword string `json:\"password,omitempty\"`\n}\n\n// APIKey provides API key based authentication to a request passed via context using ContextAPIKey\ntype APIKey struct {\n\tKey    string\n\tPrefix string\n}\n\ntype Configuration struct {\n\tBasePath      string            `json:\"basePath,omitempty\"`\n\tHost          string            `json:\"host,omitempty\"`\n\tScheme        string            `json:\"scheme,omitempty\"`\n\tDefaultHeader map[string]string `json:\"defaultHeader,omitempty\"`\n\tUserAgent     string            `json:\"userAgent,omitempty\"`\n\tHTTPClient    *http.Client\n}\n\nfunc NewConfiguration() *Configuration {\n\tcfg := &Configuration{\n\t\tBasePath:      \"https://localhost\",\n\t\tDefaultHeader: make(map[string]string),\n\t\tUserAgent:     \"Swagger-Codegen/1.0.0/go\",\n\t}\n\treturn cfg\n}\n\nfunc (c *Configuration) AddDefaultHeader(key string, value string) {\n\tc.DefaultHeader[key] = value\n}\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/docs/ExamplepbGenerateUnboundMethodsSimpleMessage.md",
    "content": "# ExamplepbGenerateUnboundMethodsSimpleMessage\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Id** | **string** | Id represents the message identifier. | [optional] [default to null]\n**Num** | **string** |  | [optional] [default to null]\n**Duration** | **string** |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/docs/GenerateUnboundMethodsEchoServiceApi.md",
    "content": "# \\GenerateUnboundMethodsEchoServiceApi\n\nAll URIs are relative to *https://localhost*\n\nMethod | HTTP request | Description\n------------- | ------------- | -------------\n[**GenerateUnboundMethodsEchoServiceEcho**](GenerateUnboundMethodsEchoServiceApi.md#GenerateUnboundMethodsEchoServiceEcho) | **Post** /grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo | Echo method receives a simple message and returns it.\n[**GenerateUnboundMethodsEchoServiceEchoBody**](GenerateUnboundMethodsEchoServiceApi.md#GenerateUnboundMethodsEchoServiceEchoBody) | **Post** /grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody | EchoBody method receives a simple message and returns it.\n[**GenerateUnboundMethodsEchoServiceEchoDelete**](GenerateUnboundMethodsEchoServiceApi.md#GenerateUnboundMethodsEchoServiceEchoDelete) | **Post** /grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete | EchoDelete method receives a simple message and returns it.\n\n\n# **GenerateUnboundMethodsEchoServiceEcho**\n> ExamplepbGenerateUnboundMethodsSimpleMessage GenerateUnboundMethodsEchoServiceEcho(ctx, body)\nEcho method receives a simple message and returns it.\n\nThe message posted as the id parameter will also be returned.\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. | \n\n### Return type\n\n[**ExamplepbGenerateUnboundMethodsSimpleMessage**](examplepbGenerateUnboundMethodsSimpleMessage.md)\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n# **GenerateUnboundMethodsEchoServiceEchoBody**\n> ExamplepbGenerateUnboundMethodsSimpleMessage GenerateUnboundMethodsEchoServiceEchoBody(ctx, body)\nEchoBody method receives a simple message and returns it.\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. | \n\n### Return type\n\n[**ExamplepbGenerateUnboundMethodsSimpleMessage**](examplepbGenerateUnboundMethodsSimpleMessage.md)\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n# **GenerateUnboundMethodsEchoServiceEchoDelete**\n> ExamplepbGenerateUnboundMethodsSimpleMessage GenerateUnboundMethodsEchoServiceEchoDelete(ctx, body)\nEchoDelete method receives a simple message and returns it.\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. | \n\n### Return type\n\n[**ExamplepbGenerateUnboundMethodsSimpleMessage**](examplepbGenerateUnboundMethodsSimpleMessage.md)\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/docs/ProtobufAny.md",
    "content": "# ProtobufAny\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Type_** | **string** |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/docs/RuntimeError.md",
    "content": "# RuntimeError\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Error_** | **string** |  | [optional] [default to null]\n**Code** | **int32** |  | [optional] [default to null]\n**Message** | **string** |  | [optional] [default to null]\n**Details** | [**[]ProtobufAny**](protobufAny.md) |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/model_examplepb_generate_unbound_methods_simple_message.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\n// GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\ntype ExamplepbGenerateUnboundMethodsSimpleMessage struct {\n\t// Id represents the message identifier.\n\tId string `json:\"id,omitempty\"`\n\tNum string `json:\"num,omitempty\"`\n\tDuration string `json:\"duration,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/model_protobuf_any.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\ntype ProtobufAny struct {\n\tType_ string `json:\"@type,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/model_rpc_status.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\ntype RpcStatus struct {\n\tCode int32 `json:\"code,omitempty\"`\n\tMessage string `json:\"message,omitempty\"`\n\tDetails []ProtobufAny `json:\"details,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/model_runtime_error.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\ntype RuntimeError struct {\n\tError_ string `json:\"error,omitempty\"`\n\tCode int32 `json:\"code,omitempty\"`\n\tMessage string `json:\"message,omitempty\"`\n\tDetails []ProtobufAny `json:\"details,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/generateunboundmethods/response.go",
    "content": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service Similar to echo_service.proto but without annotations and without external configuration.  Generate Unannotated Methods Echo Service API consists of a single service which returns a message.\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage generateunboundmethods\n\nimport (\n\t\"net/http\"\n)\n\ntype APIResponse struct {\n\t*http.Response `json:\"-\"`\n\tMessage        string `json:\"message,omitempty\"`\n\t// Operation is the name of the swagger operation.\n\tOperation string `json:\"operation,omitempty\"`\n\t// RequestURL is the request URL. This value is always available, even if the\n\t// embedded *http.Response is nil.\n\tRequestURL string `json:\"url,omitempty\"`\n\t// Method is the HTTP method used for the request.  This value is always\n\t// available, even if the embedded *http.Response is nil.\n\tMethod string `json:\"method,omitempty\"`\n\t// Payload holds the contents of the response body (which may be nil or empty).\n\t// This is provided here as the raw response.Body() reader will have already\n\t// been drained.\n\tPayload []byte `json:\"-\"`\n}\n\nfunc NewAPIResponse(r *http.Response) *APIResponse {\n\n\tresponse := &APIResponse{Response: r}\n\treturn response\n}\n\nfunc NewAPIResponseWithError(errorMessage string) *APIResponse {\n\n\tresponse := &APIResponse{Message: errorMessage}\n\treturn response\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/.gitignore",
    "content": "# 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 specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n"
  },
  {
    "path": "examples/internal/clients/responsebody/.swagger-codegen/VERSION",
    "content": "2.4.8"
  },
  {
    "path": "examples/internal/clients/responsebody/.swagger-codegen-ignore",
    "content": "# Swagger Codegen Ignore\n# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen\n\n# Use this file to prevent files from being overwritten by the generator.\n# The patterns follow closely to .gitignore or .dockerignore.\n\n# As an example, the C# client generator defines ApiClient.cs.\n# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:\n#ApiClient.cs\n\n# You can match any string of characters against a directory, file or extension with a single asterisk (*):\n#foo/*/qux\n# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux\n\n# You can recursively match patterns against a directory, file or extension with a double asterisk (**):\n#foo/**/qux\n# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux\n\n# You can also negate patterns with an exclamation (!).\n# For example, you can ignore all files in a docs folder with the file extension .md:\n#docs/*.md\n# Then explicitly reverse the ignore rule for a single file:\n#!docs/README.md\n"
  },
  {
    "path": "examples/internal/clients/responsebody/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\ngo_library(\n    name = \"responsebody\",\n    srcs = [\n        \"api_response_body_service.go\",\n        \"client.go\",\n        \"configuration.go\",\n        \"model_examplepb_repeated_response_body_out.go\",\n        \"model_examplepb_repeated_response_body_out_response.go\",\n        \"model_examplepb_repeated_response_strings.go\",\n        \"model_examplepb_response_body_out.go\",\n        \"model_examplepb_response_body_out_response.go\",\n        \"model_examplepb_response_body_value.go\",\n        \"model_google_rpc_status.go\",\n        \"model_protobuf_any.go\",\n        \"model_response_response_type.go\",\n        \"model_stream_result_of_examplepb_response_body_out.go\",\n        \"response.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/responsebody\",\n    visibility = [\"//visibility:public\"],\n    deps = [\"@org_golang_x_oauth2//:oauth2\"],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":responsebody\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/clients/responsebody/api/swagger.yaml",
    "content": "---\nswagger: \"2.0\"\ninfo:\n  version: \"version not set\"\n  title: \"examples/internal/proto/examplepb/response_body_service.proto\"\ntags:\n- name: \"ResponseBodyService\"\nconsumes:\n- \"application/json\"\nproduces:\n- \"application/json\"\npaths:\n  /responsebodies/{data}:\n    get:\n      tags:\n      - \"ResponseBodyService\"\n      operationId: \"ResponseBodyService_ListResponseBodies\"\n      parameters:\n      - name: \"data\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Data\"\n      responses:\n        200:\n          description: \"\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/examplepbRepeatedResponseBodyOutResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /responsebody/samename/{data}:\n    get:\n      tags:\n      - \"ResponseBodyService\"\n      operationId: \"ResponseBodyService_GetResponseBodySameName\"\n      parameters:\n      - name: \"data\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Data\"\n      responses:\n        200:\n          description: \"\"\n          schema:\n            type: \"string\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /responsebody/stream/{data}:\n    get:\n      tags:\n      - \"ResponseBodyService\"\n      operationId: \"ResponseBodyService_GetResponseBodyStream\"\n      parameters:\n      - name: \"data\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Data\"\n      responses:\n        200:\n          description: \"(streaming responses)\"\n          schema:\n            type: \"object\"\n            properties:\n              result:\n                $ref: \"#/definitions/examplepbResponseBodyOutResponse\"\n              error:\n                $ref: \"#/definitions/googleRpcStatus\"\n            title: \"Stream result of examplepbResponseBodyOut\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /responsebody/{data}:\n    get:\n      tags:\n      - \"ResponseBodyService\"\n      operationId: \"ResponseBodyService_GetResponseBody\"\n      parameters:\n      - name: \"data\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Data\"\n      responses:\n        200:\n          description: \"\"\n          schema:\n            $ref: \"#/definitions/examplepbResponseBodyOutResponse\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\n  /responsestrings/{data}:\n    get:\n      tags:\n      - \"ResponseBodyService\"\n      operationId: \"ResponseBodyService_ListResponseStrings\"\n      parameters:\n      - name: \"data\"\n        in: \"path\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Data\"\n      responses:\n        200:\n          description: \"\"\n          schema:\n            type: \"array\"\n            items:\n              type: \"string\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/googleRpcStatus\"\ndefinitions:\n  ResponseResponseType:\n    type: \"string\"\n    title: \"- UNKNOWN: UNKNOWN\\n - A: A is 1\\n - B: B is 2\"\n    enum:\n    - \"UNKNOWN\"\n    - \"A\"\n    - \"B\"\n    default: \"UNKNOWN\"\n  examplepbRepeatedResponseBodyOut:\n    type: \"object\"\n    properties:\n      response:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/examplepbRepeatedResponseBodyOutResponse\"\n  examplepbRepeatedResponseBodyOutResponse:\n    type: \"object\"\n    properties:\n      data:\n        type: \"string\"\n      type:\n        $ref: \"#/definitions/ResponseResponseType\"\n    example:\n      data: \"data\"\n      type: {}\n  examplepbRepeatedResponseStrings:\n    type: \"object\"\n    properties:\n      values:\n        type: \"array\"\n        items:\n          type: \"string\"\n  examplepbResponseBodyOut:\n    type: \"object\"\n    properties:\n      response:\n        $ref: \"#/definitions/examplepbResponseBodyOutResponse\"\n  examplepbResponseBodyOutResponse:\n    type: \"object\"\n    properties:\n      data:\n        type: \"string\"\n    example:\n      data: \"data\"\n  examplepbResponseBodyValue:\n    type: \"object\"\n    properties:\n      responseBodyValue:\n        type: \"string\"\n  googleRpcStatus:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n        format: \"int32\"\n        description: \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n      message:\n        type: \"string\"\n        description: \"A developer-facing error message, which should be in English.\\\n          \\ Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details]\\\n          \\ field, or localized by the client.\"\n      details:\n        type: \"array\"\n        description: \"A list of messages that carry the error details.  There is a\\\n          \\ common set of\\nmessage types for APIs to use.\"\n        items:\n          $ref: \"#/definitions/protobufAny\"\n    description: \"The `Status` type defines a logical error model that is suitable\\\n      \\ for\\ndifferent programming environments, including REST APIs and RPC APIs.\\\n      \\ It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\n\\\n      three pieces of data: error code, error message, and error details.\\n\\nYou can\\\n      \\ find out more about this error model and how to work with it in the\\n[API\\\n      \\ Design Guide](https://cloud.google.com/apis/design/errors).\"\n    example:\n      code: 0\n      details:\n      - '@type': \"@type\"\n      - '@type': \"@type\"\n      message: \"message\"\n  protobufAny:\n    type: \"object\"\n    properties:\n      '@type':\n        type: \"string\"\n        description: \"A URL/resource name that uniquely identifies the type of the\\\n          \\ serialized\\nprotocol buffer message. This string must contain at least\\n\\\n          one \\\"/\\\" character. The last segment of the URL's path must represent\\n\\\n          the fully qualified name of the type (as in\\n`path/google.protobuf.Duration`).\\\n          \\ The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\\n          \\nIn practice, teams usually precompile into the binary all types that they\\n\\\n          expect it to use in the context of Any. However, for URLs which use the\\n\\\n          scheme `http`, `https`, or no scheme, one can optionally set up a type\\n\\\n          server that maps type URLs to message definitions as follows:\\n\\n* If no\\\n          \\ scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must\\\n          \\ yield a [google.protobuf.Type][]\\n  value in binary format, or produce\\\n          \\ an error.\\n* Applications are allowed to cache lookup results based on\\\n          \\ the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup.\\\n          \\ Therefore, binary compatibility needs to be preserved\\n  on changes to\\\n          \\ types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote:\\\n          \\ this functionality is not currently available in the official\\nprotobuf\\\n          \\ release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\\n          \\ As of May 2023, there are no widely used type server\\nimplementations\\\n          \\ and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or\\\n          \\ the empty scheme) might be\\nused with implementation specific semantics.\"\n    description: \"`Any` contains an arbitrary serialized protocol buffer message along\\\n      \\ with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf\\\n      \\ library provides support to pack/unpack Any values in the form\\nof utility\\\n      \\ functions or additional generated methods of the Any type.\\n\\nExample 1: Pack\\\n      \\ and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n\\\n      \\    ...\\n    if (any.UnpackTo(&foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack\\\n      \\ and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n\\\n      \\    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n\\\n      \\    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n\\\n      \\      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack\\\n      \\ and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n \\\n      \\   any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n\\\n      \\      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := &pb.Foo{...}\\n\\\n      \\     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n\\\n      \\     ...\\n     foo := &pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err !=\\\n      \\ nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library\\\n      \\ will by default use\\n'type.googleapis.com/full.type.name' as the type URL\\\n      \\ and the unpack\\nmethods only use the fully qualified type name after the last\\\n      \\ '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\n\\\n      name \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses\\\n      \\ the regular\\nrepresentation of the deserialized, embedded message, with an\\n\\\n      additional field `@type` which contains the type URL. Example:\\n\\n    package\\\n      \\ google.profile;\\n    message Person {\\n      string first_name = 1;\\n    \\\n      \\  string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\"\\\n      ,\\n      \\\"firstName\\\": <string>,\\n      \\\"lastName\\\": <string>\\n    }\\n\\nIf\\\n      \\ the embedded message type is well-known and has a custom JSON\\nrepresentation,\\\n      \\ that representation will be embedded adding a field\\n`value` which holds the\\\n      \\ custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\\n      \\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n\\\n      \\      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    example:\n      '@type': \"@type\"\n    additionalProperties: {}\n  Stream result of examplepbResponseBodyOut:\n    properties:\n      result:\n        $ref: \"#/definitions/examplepbResponseBodyOutResponse\"\n      error:\n        $ref: \"#/definitions/googleRpcStatus\"\n    example:\n      result:\n        data: \"data\"\n      error:\n        code: 0\n        details:\n        - '@type': \"@type\"\n        - '@type': \"@type\"\n        message: \"message\"\n"
  },
  {
    "path": "examples/internal/clients/responsebody/api_response_body_service.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"fmt\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype ResponseBodyServiceApiService service\n\n/* \nResponseBodyServiceApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param data\n\n@return ExamplepbResponseBodyOutResponse\n*/\nfunc (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBody(ctx context.Context, data string) (ExamplepbResponseBodyOutResponse, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbResponseBodyOutResponse\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/responsebody/{data}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"data\"+\"}\", fmt.Sprintf(\"%v\", data), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbResponseBodyOutResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nResponseBodyServiceApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param data\n\n@return string\n*/\nfunc (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBodySameName(ctx context.Context, data string) (string, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue string\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/responsebody/samename/{data}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"data\"+\"}\", fmt.Sprintf(\"%v\", data), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nResponseBodyServiceApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param data\n\n@return StreamResultOfExamplepbResponseBodyOut\n*/\nfunc (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBodyStream(ctx context.Context, data string) (StreamResultOfExamplepbResponseBodyOut, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue StreamResultOfExamplepbResponseBodyOut\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/responsebody/stream/{data}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"data\"+\"}\", fmt.Sprintf(\"%v\", data), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v StreamResultOfExamplepbResponseBodyOut\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nResponseBodyServiceApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param data\n\n@return []ExamplepbRepeatedResponseBodyOutResponse\n*/\nfunc (a *ResponseBodyServiceApiService) ResponseBodyServiceListResponseBodies(ctx context.Context, data string) ([]ExamplepbRepeatedResponseBodyOutResponse, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue []ExamplepbRepeatedResponseBodyOutResponse\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/responsebodies/{data}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"data\"+\"}\", fmt.Sprintf(\"%v\", data), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v []ExamplepbRepeatedResponseBodyOutResponse\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nResponseBodyServiceApiService\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param data\n\n@return []string\n*/\nfunc (a *ResponseBodyServiceApiService) ResponseBodyServiceListResponseStrings(ctx context.Context, data string) ([]string, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue []string\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/responsestrings/{data}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"data\"+\"}\", fmt.Sprintf(\"%v\", data), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v []string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v GoogleRpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/client.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/oauth2\"\n)\n\nvar (\n\tjsonCheck = regexp.MustCompile(\"(?i:[application|text]/json)\")\n\txmlCheck  = regexp.MustCompile(\"(?i:[application|text]/xml)\")\n)\n\n// APIClient manages communication with the examples/internal/proto/examplepb/response_body_service.proto API vversion not set\n// In most cases there should be only one, shared, APIClient.\ntype APIClient struct {\n\tcfg    *Configuration\n\tcommon service // Reuse a single struct instead of allocating one for each service on the heap.\n\n\t// API Services\n\n\tResponseBodyServiceApi *ResponseBodyServiceApiService\n}\n\ntype service struct {\n\tclient *APIClient\n}\n\n// NewAPIClient creates a new API client. Requires a userAgent string describing your application.\n// optionally a custom http.Client to allow for advanced features such as caching.\nfunc NewAPIClient(cfg *Configuration) *APIClient {\n\tif cfg.HTTPClient == nil {\n\t\tcfg.HTTPClient = http.DefaultClient\n\t}\n\n\tc := &APIClient{}\n\tc.cfg = cfg\n\tc.common.client = c\n\n\t// API Services\n\tc.ResponseBodyServiceApi = (*ResponseBodyServiceApiService)(&c.common)\n\n\treturn c\n}\n\nfunc atoi(in string) (int, error) {\n\treturn strconv.Atoi(in)\n}\n\n// selectHeaderContentType select a content type from the available list.\nfunc selectHeaderContentType(contentTypes []string) string {\n\tif len(contentTypes) == 0 {\n\t\treturn \"\"\n\t}\n\tif contains(contentTypes, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\treturn contentTypes[0] // use the first content type specified in 'consumes'\n}\n\n// selectHeaderAccept join all accept types and return\nfunc selectHeaderAccept(accepts []string) string {\n\tif len(accepts) == 0 {\n\t\treturn \"\"\n\t}\n\n\tif contains(accepts, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\n\treturn strings.Join(accepts, \",\")\n}\n\n// contains is a case insenstive match, finding needle in a haystack\nfunc contains(haystack []string, needle string) bool {\n\tfor _, a := range haystack {\n\t\tif strings.ToLower(a) == strings.ToLower(needle) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Verify optional parameters are of the correct type.\nfunc typeCheckParameter(obj interface{}, expected string, name string) error {\n\t// Make sure there is an object.\n\tif obj == nil {\n\t\treturn nil\n\t}\n\n\t// Check the type is as expected.\n\tif reflect.TypeOf(obj).String() != expected {\n\t\treturn fmt.Errorf(\"Expected %s to be of type %s but received %s.\", name, expected, reflect.TypeOf(obj).String())\n\t}\n\treturn nil\n}\n\n// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.\nfunc parameterToString(obj interface{}, collectionFormat string) string {\n\tvar delimiter string\n\n\tswitch collectionFormat {\n\tcase \"pipes\":\n\t\tdelimiter = \"|\"\n\tcase \"ssv\":\n\t\tdelimiter = \" \"\n\tcase \"tsv\":\n\t\tdelimiter = \"\\t\"\n\tcase \"csv\":\n\t\tdelimiter = \",\"\n\t}\n\n\tif reflect.TypeOf(obj).Kind() == reflect.Slice {\n\t\treturn strings.Trim(strings.Replace(fmt.Sprint(obj), \" \", delimiter, -1), \"[]\")\n\t}\n\n\treturn fmt.Sprintf(\"%v\", obj)\n}\n\n// callAPI do the request.\nfunc (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {\n\treturn c.cfg.HTTPClient.Do(request)\n}\n\n// Change base path to allow switching to mocks\nfunc (c *APIClient) ChangeBasePath(path string) {\n\tc.cfg.BasePath = path\n}\n\n// prepareRequest build the request\nfunc (c *APIClient) prepareRequest(\n\tctx context.Context,\n\tpath string, method string,\n\tpostBody interface{},\n\theaderParams map[string]string,\n\tqueryParams url.Values,\n\tformParams url.Values,\n\tfileName string,\n\tfileBytes []byte) (localVarRequest *http.Request, err error) {\n\n\tvar body *bytes.Buffer\n\n\t// Detect postBody type and post.\n\tif postBody != nil {\n\t\tcontentType := headerParams[\"Content-Type\"]\n\t\tif contentType == \"\" {\n\t\t\tcontentType = detectContentType(postBody)\n\t\t\theaderParams[\"Content-Type\"] = contentType\n\t\t}\n\n\t\tbody, err = setBody(postBody, contentType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// add form parameters and file if available.\n\tif len(formParams) > 0 || (len(fileBytes) > 0 && fileName != \"\") {\n\t\tif body != nil {\n\t\t\treturn nil, errors.New(\"Cannot specify postBody and multipart form at the same time.\")\n\t\t}\n\t\tbody = &bytes.Buffer{}\n\t\tw := multipart.NewWriter(body)\n\n\t\tfor k, v := range formParams {\n\t\t\tfor _, iv := range v {\n\t\t\t\tif strings.HasPrefix(k, \"@\") { // file\n\t\t\t\t\terr = addFile(w, k[1:], iv)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t} else { // form value\n\t\t\t\t\tw.WriteField(k, iv)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(fileBytes) > 0 && fileName != \"\" {\n\t\t\tw.Boundary()\n\t\t\t//_, fileNm := filepath.Split(fileName)\n\t\t\tpart, err := w.CreateFormFile(\"file\", filepath.Base(fileName))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t_, err = part.Write(fileBytes)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// Set the Boundary in the Content-Type\n\t\t\theaderParams[\"Content-Type\"] = w.FormDataContentType()\n\t\t}\n\n\t\t// Set Content-Length\n\t\theaderParams[\"Content-Length\"] = fmt.Sprintf(\"%d\", body.Len())\n\t\tw.Close()\n\t}\n\n\t// Setup path and query parameters\n\turl, err := url.Parse(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Adding Query Param\n\tquery := url.Query()\n\tfor k, v := range queryParams {\n\t\tfor _, iv := range v {\n\t\t\tquery.Add(k, iv)\n\t\t}\n\t}\n\n\t// Encode the parameters.\n\turl.RawQuery = query.Encode()\n\n\t// Generate a new request\n\tif body != nil {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), body)\n\t} else {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), nil)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// add header parameters, if any\n\tif len(headerParams) > 0 {\n\t\theaders := http.Header{}\n\t\tfor h, v := range headerParams {\n\t\t\theaders.Set(h, v)\n\t\t}\n\t\tlocalVarRequest.Header = headers\n\t}\n\n\t// Override request host, if applicable\n\tif c.cfg.Host != \"\" {\n\t\tlocalVarRequest.Host = c.cfg.Host\n\t}\n\n\t// Add the user agent to the request.\n\tlocalVarRequest.Header.Add(\"User-Agent\", c.cfg.UserAgent)\n\n\tif ctx != nil {\n\t\t// add context to the request\n\t\tlocalVarRequest = localVarRequest.WithContext(ctx)\n\n\t\t// Walk through any authentication.\n\n\t\t// OAuth2 authentication\n\t\tif tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {\n\t\t\t// We were able to grab an oauth2 token from the context\n\t\t\tvar latestToken *oauth2.Token\n\t\t\tif latestToken, err = tok.Token(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tlatestToken.SetAuthHeader(localVarRequest)\n\t\t}\n\n\t\t// Basic HTTP Authentication\n\t\tif auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {\n\t\t\tlocalVarRequest.SetBasicAuth(auth.UserName, auth.Password)\n\t\t}\n\n\t\t// AccessToken Authentication\n\t\tif auth, ok := ctx.Value(ContextAccessToken).(string); ok {\n\t\t\tlocalVarRequest.Header.Add(\"Authorization\", \"Bearer \"+auth)\n\t\t}\n\t}\n\n\tfor header, value := range c.cfg.DefaultHeader {\n\t\tlocalVarRequest.Header.Add(header, value)\n\t}\n\n\treturn localVarRequest, nil\n}\n\nfunc (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {\n\t\tif strings.Contains(contentType, \"application/xml\") {\n\t\t\tif err = xml.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t} else if strings.Contains(contentType, \"application/json\") {\n\t\t\tif err = json.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\treturn errors.New(\"undefined response type\")\n}\n\n// Add a file to the multipart request\nfunc addFile(w *multipart.Writer, fieldName, path string) error {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\tpart, err := w.CreateFormFile(fieldName, filepath.Base(path))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(part, file)\n\n\treturn err\n}\n\n// Prevent trying to import \"fmt\"\nfunc reportError(format string, a ...interface{}) error {\n\treturn fmt.Errorf(format, a...)\n}\n\n// Set request body from an interface{}\nfunc setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {\n\tif bodyBuf == nil {\n\t\tbodyBuf = &bytes.Buffer{}\n\t}\n\n\tif reader, ok := body.(io.Reader); ok {\n\t\t_, err = bodyBuf.ReadFrom(reader)\n\t} else if b, ok := body.([]byte); ok {\n\t\t_, err = bodyBuf.Write(b)\n\t} else if s, ok := body.(string); ok {\n\t\t_, err = bodyBuf.WriteString(s)\n\t} else if s, ok := body.(*string); ok {\n\t\t_, err = bodyBuf.WriteString(*s)\n\t} else if jsonCheck.MatchString(contentType) {\n\t\terr = json.NewEncoder(bodyBuf).Encode(body)\n\t} else if xmlCheck.MatchString(contentType) {\n\t\txml.NewEncoder(bodyBuf).Encode(body)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif bodyBuf.Len() == 0 {\n\t\terr = fmt.Errorf(\"Invalid body type %s\\n\", contentType)\n\t\treturn nil, err\n\t}\n\treturn bodyBuf, nil\n}\n\n// detectContentType method is used to figure out `Request.Body` content type for request header\nfunc detectContentType(body interface{}) string {\n\tcontentType := \"text/plain; charset=utf-8\"\n\tkind := reflect.TypeOf(body).Kind()\n\n\tswitch kind {\n\tcase reflect.Struct, reflect.Map, reflect.Ptr:\n\t\tcontentType = \"application/json; charset=utf-8\"\n\tcase reflect.String:\n\t\tcontentType = \"text/plain; charset=utf-8\"\n\tdefault:\n\t\tif b, ok := body.([]byte); ok {\n\t\t\tcontentType = http.DetectContentType(b)\n\t\t} else if kind == reflect.Slice {\n\t\t\tcontentType = \"application/json; charset=utf-8\"\n\t\t}\n\t}\n\n\treturn contentType\n}\n\n// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go\ntype cacheControl map[string]string\n\nfunc parseCacheControl(headers http.Header) cacheControl {\n\tcc := cacheControl{}\n\tccHeader := headers.Get(\"Cache-Control\")\n\tfor _, part := range strings.Split(ccHeader, \",\") {\n\t\tpart = strings.Trim(part, \" \")\n\t\tif part == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.ContainsRune(part, '=') {\n\t\t\tkeyval := strings.Split(part, \"=\")\n\t\t\tcc[strings.Trim(keyval[0], \" \")] = strings.Trim(keyval[1], \",\")\n\t\t} else {\n\t\t\tcc[part] = \"\"\n\t\t}\n\t}\n\treturn cc\n}\n\n// CacheExpires helper function to determine remaining time before repeating a request.\nfunc CacheExpires(r *http.Response) time.Time {\n\t// Figure out when the cache expires.\n\tvar expires time.Time\n\tnow, err := time.Parse(time.RFC1123, r.Header.Get(\"date\"))\n\tif err != nil {\n\t\treturn time.Now()\n\t}\n\trespCacheControl := parseCacheControl(r.Header)\n\n\tif maxAge, ok := respCacheControl[\"max-age\"]; ok {\n\t\tlifetime, err := time.ParseDuration(maxAge + \"s\")\n\t\tif err != nil {\n\t\t\texpires = now\n\t\t}\n\t\texpires = now.Add(lifetime)\n\t} else {\n\t\texpiresHeader := r.Header.Get(\"Expires\")\n\t\tif expiresHeader != \"\" {\n\t\t\texpires, err = time.Parse(time.RFC1123, expiresHeader)\n\t\t\tif err != nil {\n\t\t\t\texpires = now\n\t\t\t}\n\t\t}\n\t}\n\treturn expires\n}\n\nfunc strlen(s string) int {\n\treturn utf8.RuneCountInString(s)\n}\n\n// GenericSwaggerError Provides access to the body, error and model on returned errors.\ntype GenericSwaggerError struct {\n\tbody  []byte\n\terror string\n\tmodel interface{}\n}\n\n// Error returns non-empty string if there was an error.\nfunc (e GenericSwaggerError) Error() string {\n\treturn e.error\n}\n\n// Body returns the raw bytes of the response\nfunc (e GenericSwaggerError) Body() []byte {\n\treturn e.body\n}\n\n// Model returns the unpacked model of the error\nfunc (e GenericSwaggerError) Model() interface{} {\n\treturn e.model\n}"
  },
  {
    "path": "examples/internal/clients/responsebody/configuration.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\nimport (\n\t\"net/http\"\n)\n\n// contextKeys are used to identify the type of value in the context.\n// Since these are string, it is possible to get a short description of the\n// context key for logging and debugging using key.String().\n\ntype contextKey string\n\nfunc (c contextKey) String() string {\n\treturn \"auth \" + string(c)\n}\n\nvar (\n\t// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.\n\tContextOAuth2 = contextKey(\"token\")\n\n\t// ContextBasicAuth takes BasicAuth as authentication for the request.\n\tContextBasicAuth = contextKey(\"basic\")\n\n\t// ContextAccessToken takes a string oauth2 access token as authentication for the request.\n\tContextAccessToken = contextKey(\"accesstoken\")\n\n\t// ContextAPIKey takes an APIKey as authentication for the request\n\tContextAPIKey = contextKey(\"apikey\")\n)\n\n// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth\ntype BasicAuth struct {\n\tUserName string `json:\"userName,omitempty\"`\n\tPassword string `json:\"password,omitempty\"`\n}\n\n// APIKey provides API key based authentication to a request passed via context using ContextAPIKey\ntype APIKey struct {\n\tKey    string\n\tPrefix string\n}\n\ntype Configuration struct {\n\tBasePath      string            `json:\"basePath,omitempty\"`\n\tHost          string            `json:\"host,omitempty\"`\n\tScheme        string            `json:\"scheme,omitempty\"`\n\tDefaultHeader map[string]string `json:\"defaultHeader,omitempty\"`\n\tUserAgent     string            `json:\"userAgent,omitempty\"`\n\tHTTPClient    *http.Client\n}\n\nfunc NewConfiguration() *Configuration {\n\tcfg := &Configuration{\n\t\tBasePath:      \"https://localhost\",\n\t\tDefaultHeader: make(map[string]string),\n\t\tUserAgent:     \"Swagger-Codegen/1.0.0/go\",\n\t}\n\treturn cfg\n}\n\nfunc (c *Configuration) AddDefaultHeader(key string, value string) {\n\tc.DefaultHeader[key] = value\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md",
    "content": "# ExamplepbRepeatedResponseBodyOut\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Response** | [**[]ExamplepbRepeatedResponseBodyOutResponse**](examplepbRepeatedResponseBodyOutResponse.md) |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md",
    "content": "# ExamplepbRepeatedResponseBodyOutResponse\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Data** | **string** |  | [optional] [default to null]\n**Type_** | [***ResponseResponseType**](ResponseResponseType.md) |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md",
    "content": "# ExamplepbRepeatedResponseStrings\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Values** | **[]string** |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessage.md",
    "content": "# ExamplepbResponseBodyMessage\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Request** | **string** |  | [optional] [default to null]\n**Response** | [**ExamplepbResponseBodyMessageResponse**](examplepbResponseBodyMessageResponse.md) |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md",
    "content": "# ExamplepbResponseBodyMessageResponse\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Data** | **string** |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOut.md",
    "content": "# ExamplepbResponseBodyOut\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Response** | [***ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md",
    "content": "# ExamplepbResponseBodyOutResponse\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Data** | **string** |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyReq.md",
    "content": "# ExamplepbResponseBodyReq\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Data** | **string** |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyValue.md",
    "content": "# ExamplepbResponseBodyValue\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**ResponseBodyValue** | **string** |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/GoogleRpcStatus.md",
    "content": "# GoogleRpcStatus\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Code** | **int32** | The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. | [optional] [default to null]\n**Message** | **string** | A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. | [optional] [default to null]\n**Details** | [**[]ProtobufAny**](protobufAny.md) | A list of messages that carry the error details.  There is a common set of message types for APIs to use. | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ProtobufAny.md",
    "content": "# ProtobufAny\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Type_** | **string** | A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \\&quot;/\\&quot; character. The last segment of the URL&#39;s path must represent the fully qualified name of the type (as in &#x60;path/google.protobuf.Duration&#x60;). The name should be in a canonical form (e.g., leading \\&quot;.\\&quot; is not accepted).  In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme &#x60;http&#x60;, &#x60;https&#x60;, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows:  * If no scheme is provided, &#x60;https&#x60; is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][]   value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the   URL, or have them precompiled into a binary to avoid any   lookup. Therefore, binary compatibility needs to be preserved   on changes to types. (Use versioned type names to manage   breaking changes.)  Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.  Schemes other than &#x60;http&#x60;, &#x60;https&#x60; (or the empty scheme) might be used with implementation specific semantics. | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md",
    "content": "# \\ResponseBodyServiceApi\n\nAll URIs are relative to *https://localhost*\n\nMethod | HTTP request | Description\n------------- | ------------- | -------------\n[**ResponseBodyServiceGetResponseBody**](ResponseBodyServiceApi.md#ResponseBodyServiceGetResponseBody) | **Get** /responsebody/{data} | \n[**ResponseBodyServiceGetResponseBodySameName**](ResponseBodyServiceApi.md#ResponseBodyServiceGetResponseBodySameName) | **Get** /responsebody/samename/{data} | \n[**ResponseBodyServiceGetResponseBodyStream**](ResponseBodyServiceApi.md#ResponseBodyServiceGetResponseBodyStream) | **Get** /responsebody/stream/{data} | \n[**ResponseBodyServiceListResponseBodies**](ResponseBodyServiceApi.md#ResponseBodyServiceListResponseBodies) | **Get** /responsebodies/{data} | \n[**ResponseBodyServiceListResponseStrings**](ResponseBodyServiceApi.md#ResponseBodyServiceListResponseStrings) | **Get** /responsestrings/{data} | \n\n\n# **ResponseBodyServiceGetResponseBody**\n> ExamplepbResponseBodyOutResponse ResponseBodyServiceGetResponseBody(ctx, data)\n\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **data** | **string**|  | \n\n### Return type\n\n[**ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md)\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n# **ResponseBodyServiceGetResponseBodySameName**\n> string ResponseBodyServiceGetResponseBodySameName(ctx, data)\n\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **data** | **string**|  | \n\n### Return type\n\n**string**\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n# **ResponseBodyServiceGetResponseBodyStream**\n> StreamResultOfExamplepbResponseBodyOut ResponseBodyServiceGetResponseBodyStream(ctx, data)\n\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **data** | **string**|  | \n\n### Return type\n\n[**StreamResultOfExamplepbResponseBodyOut**](Stream result of examplepbResponseBodyOut.md)\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n# **ResponseBodyServiceListResponseBodies**\n> []ExamplepbRepeatedResponseBodyOutResponse ResponseBodyServiceListResponseBodies(ctx, data)\n\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **data** | **string**|  | \n\n### Return type\n\n[**[]ExamplepbRepeatedResponseBodyOutResponse**](examplepbRepeatedResponseBodyOutResponse.md)\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n# **ResponseBodyServiceListResponseStrings**\n> []string ResponseBodyServiceListResponseStrings(ctx, data)\n\n\n### Required Parameters\n\nName | Type | Description  | Notes\n------------- | ------------- | ------------- | -------------\n **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.\n  **data** | **string**|  | \n\n### Return type\n\n**[]string**\n\n### Authorization\n\nNo authorization required\n\n### HTTP request headers\n\n - **Content-Type**: application/json\n - **Accept**: application/json\n\n[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/ResponseResponseType.md",
    "content": "# ResponseResponseType\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/RpcStatus.md",
    "content": "# RpcStatus\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Code** | **int32** | The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. | [optional] [default to null]\n**Message** | **string** | A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. | [optional] [default to null]\n**Details** | [**[]ProtobufAny**](protobufAny.md) | A list of messages that carry the error details.  There is a common set of message types for APIs to use. | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/RuntimeError.md",
    "content": "# RuntimeError\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Error_** | **string** |  | [optional] [default to null]\n**Code** | **int32** |  | [optional] [default to null]\n**Message** | **string** |  | [optional] [default to null]\n**Details** | [**[]ProtobufAny**](protobufAny.md) |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md",
    "content": "# StreamResultOfExamplepbResponseBodyOut\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | -------------\n**Result** | [***ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) |  | [optional] [default to null]\n**Error_** | [***GoogleRpcStatus**](googleRpcStatus.md) |  | [optional] [default to null]\n\n[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)\n\n\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype ExamplepbRepeatedResponseBodyOut struct {\n\tResponse []ExamplepbRepeatedResponseBodyOutResponse `json:\"response,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out_response.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype ExamplepbRepeatedResponseBodyOutResponse struct {\n\tData string `json:\"data,omitempty\"`\n\tType_ *ResponseResponseType `json:\"type,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_examplepb_repeated_response_strings.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype ExamplepbRepeatedResponseStrings struct {\n\tValues []string `json:\"values,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_examplepb_response_body_out.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype ExamplepbResponseBodyOut struct {\n\tResponse *ExamplepbResponseBodyOutResponse `json:\"response,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_examplepb_response_body_out_response.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype ExamplepbResponseBodyOutResponse struct {\n\tData string `json:\"data,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_examplepb_response_body_value.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype ExamplepbResponseBodyValue struct {\n\tResponseBodyValue string `json:\"responseBodyValue,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_google_rpc_status.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\n// The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details.  You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\ntype GoogleRpcStatus struct {\n\t// The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\n\tCode int32 `json:\"code,omitempty\"`\n\t// A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\n\tMessage string `json:\"message,omitempty\"`\n\t// A list of messages that carry the error details.  There is a common set of message types for APIs to use.\n\tDetails []ProtobufAny `json:\"details,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_protobuf_any.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\n// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message.  Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.  Example 1: Pack and unpack a message in C++.      Foo foo = ...;     Any any;     any.PackFrom(foo);     ...     if (any.UnpackTo(&foo)) {       ...     }  Example 2: Pack and unpack a message in Java.      Foo foo = ...;     Any any = Any.pack(foo);     ...     if (any.is(Foo.class)) {       foo = any.unpack(Foo.class);     }     // or ...     if (any.isSameTypeAs(Foo.getDefaultInstance())) {       foo = any.unpack(Foo.getDefaultInstance());     }   Example 3: Pack and unpack a message in Python.      foo = Foo(...)     any = Any()     any.Pack(foo)     ...     if any.Is(Foo.DESCRIPTOR):       any.Unpack(foo)       ...   Example 4: Pack and unpack a message in Go       foo := &pb.Foo{...}      any, err := anypb.New(foo)      if err != nil {        ...      }      ...      foo := &pb.Foo{}      if err := any.UnmarshalTo(foo); err != nil {        ...      }  The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type name \\\"y.z\\\".  JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example:      package google.profile;     message Person {       string first_name = 1;       string last_name = 2;     }      {       \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",       \\\"firstName\\\": <string>,       \\\"lastName\\\": <string>     }  If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]):      {       \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",       \\\"value\\\": \\\"1.212s\\\"     }\ntype ProtobufAny struct {\n\t// A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \\\"/\\\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \\\".\\\" is not accepted).  In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows:  * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][]   value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the   URL, or have them precompiled into a binary to avoid any   lookup. Therefore, binary compatibility needs to be preserved   on changes to types. (Use versioned type names to manage   breaking changes.)  Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.  Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics.\n\tType_ string `json:\"@type,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_response_response_type.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype ResponseResponseType string\n\n// List of ResponseResponseType\nconst (\n\tUNKNOWN_ResponseResponseType ResponseResponseType = \"UNKNOWN\"\n\tA_ResponseResponseType ResponseResponseType = \"A\"\n\tB_ResponseResponseType ResponseResponseType = \"B\"\n)\n"
  },
  {
    "path": "examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\ntype StreamResultOfExamplepbResponseBodyOut struct {\n\tResult *ExamplepbResponseBodyOutResponse `json:\"result,omitempty\"`\n\tError_ *GoogleRpcStatus `json:\"error,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/responsebody/response.go",
    "content": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * API version: version not set\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage responsebody\n\nimport (\n\t\"net/http\"\n)\n\ntype APIResponse struct {\n\t*http.Response `json:\"-\"`\n\tMessage        string `json:\"message,omitempty\"`\n\t// Operation is the name of the swagger operation.\n\tOperation string `json:\"operation,omitempty\"`\n\t// RequestURL is the request URL. This value is always available, even if the\n\t// embedded *http.Response is nil.\n\tRequestURL string `json:\"url,omitempty\"`\n\t// Method is the HTTP method used for the request.  This value is always\n\t// available, even if the embedded *http.Response is nil.\n\tMethod string `json:\"method,omitempty\"`\n\t// Payload holds the contents of the response body (which may be nil or empty).\n\t// This is provided here as the raw response.Body() reader will have already\n\t// been drained.\n\tPayload []byte `json:\"-\"`\n}\n\nfunc NewAPIResponse(r *http.Response) *APIResponse {\n\n\tresponse := &APIResponse{Response: r}\n\treturn response\n}\n\nfunc NewAPIResponseWithError(errorMessage string) *APIResponse {\n\n\tresponse := &APIResponse{Message: errorMessage}\n\treturn response\n}\n"
  },
  {
    "path": "examples/internal/clients/staticcheck.conf",
    "content": "checks = [\"-all\"]\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/.gitignore",
    "content": "/docs\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/.swagger-codegen/VERSION",
    "content": "2.4.8"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/.swagger-codegen-ignore",
    "content": ".gitignore\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"unannotatedecho\",\n    srcs = [\n        \"api_unannotated_echo_service.go\",\n        \"client.go\",\n        \"configuration.go\",\n        \"model_examplepb_numeric_enum.go\",\n        \"model_examplepb_unannotated_embedded.go\",\n        \"model_examplepb_unannotated_nested_message.go\",\n        \"model_examplepb_unannotated_simple_message.go\",\n        \"model_protobuf_any.go\",\n        \"model_rpc_status.go\",\n        \"response.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/unannotatedecho\",\n    deps = [\n        \"@com_github_antihax_optional//:optional\",\n        \"@org_golang_x_oauth2//:oauth2\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":unannotatedecho\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/api/swagger.yaml",
    "content": "---\nswagger: \"2.0\"\ninfo:\n  description: \"Unannotated Echo Service\\nSimilar to echo_service.proto but without\\\n    \\ annotations. See\\nunannotated_echo_service.yaml for the equivalent of the annotations\\\n    \\ in\\ngRPC API configuration format.\\n\\nEcho Service API consists of a single\\\n    \\ service which returns\\na message.\"\n  version: \"1.0\"\n  title: \"Unannotated Echo\"\n  contact:\n    name: \"gRPC-Gateway project\"\n    url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    email: \"none@example.com\"\n  license:\n    name: \"BSD 3-Clause License\"\n    url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\"\n  x-something-something: \"yadda\"\ntags:\n- name: \"Echo\"\n  description: \"Echo description\"\n- name: \"Internal\"\n  description: \"Internal description\"\n  x-traitTag: true\n- name: \"UnannotatedEchoService\"\n  description: \"UnannotatedEchoService description -- which should not be used in\\\n    \\ place of the documentation comment!\"\n  externalDocs:\n    description: \"Find out more about UnannotatedEchoService\"\n    url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\nschemes:\n- \"http\"\n- \"https\"\n- \"wss\"\nconsumes:\n- \"application/json\"\n- \"application/x-foo-mime\"\nproduces:\n- \"application/json\"\n- \"application/x-foo-mime\"\nsecurity:\n- ApiKeyAuth: []\n  BasicAuth: []\n- ApiKeyAuth: []\n  OAuth2:\n  - \"read\"\n  - \"write\"\npaths:\n  /v1/example/echo/{id}:\n    post:\n      tags:\n      - \"UnannotatedEchoService\"\n      summary: \"Summary: Echo rpc\"\n      description: \"Description Echo\"\n      operationId: \"UnannotatedEchoService_Echo\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        description: \"Id represents the message identifier.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - name: \"num\"\n        in: \"query\"\n        description: \"Int value field\"\n        required: true\n        type: \"string\"\n        default: \"42\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n      - name: \"duration\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Duration\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          examples:\n            application/json:\n              value: \"the input value\"\n          schema:\n            $ref: \"#/definitions/examplepbUnannotatedSimpleMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"integer\"\n            format: \"integer\"\n        503:\n          description: \"Returned when the resource is temporarily unavailable.\"\n          schema: {}\n          x-number: 100\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\n      externalDocs:\n        description: \"Find out more Echo\"\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n  /v1/example/echo/{id}/{num}:\n    get:\n      tags:\n      - \"UnannotatedEchoService\"\n      summary: \"Summary: Echo rpc\"\n      description: \"Description Echo\"\n      operationId: \"UnannotatedEchoService_Echo2\"\n      parameters:\n      - name: \"id\"\n        in: \"path\"\n        description: \"Id represents the message identifier.\"\n        required: true\n        type: \"string\"\n        x-exportParamName: \"Id\"\n      - name: \"num\"\n        in: \"path\"\n        description: \"Int value field\"\n        required: true\n        type: \"string\"\n        default: \"42\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n      - name: \"duration\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Duration\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          examples:\n            application/json:\n              value: \"the input value\"\n          schema:\n            $ref: \"#/definitions/examplepbUnannotatedSimpleMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"integer\"\n            format: \"integer\"\n        503:\n          description: \"Returned when the resource is temporarily unavailable.\"\n          schema: {}\n          x-number: 100\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\n      externalDocs:\n        description: \"Find out more Echo\"\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n  /v1/example/echo_body:\n    post:\n      tags:\n      - \"UnannotatedEchoService\"\n      summary: \"EchoBody method receives a simple message and returns it.\"\n      operationId: \"UnannotatedEchoService_EchoBody\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"A simple message with many types\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbUnannotatedSimpleMessage\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbUnannotatedSimpleMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\n  /v1/example/echo_delete:\n    delete:\n      tags:\n      - \"UnannotatedEchoService\"\n      summary: \"EchoDelete method receives a simple message and returns it.\"\n      operationId: \"UnannotatedEchoService_EchoDelete\"\n      parameters:\n      - name: \"id\"\n        in: \"query\"\n        description: \"Id represents the message identifier.\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Id\"\n        x-optionalDataType: \"String\"\n      - name: \"num\"\n        in: \"query\"\n        description: \"Int value field\"\n        required: true\n        type: \"string\"\n        default: \"42\"\n        format: \"int64\"\n        x-exportParamName: \"Num\"\n      - name: \"duration\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Duration\"\n        x-optionalDataType: \"String\"\n      - name: \"lineNum\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"LineNum\"\n        x-optionalDataType: \"String\"\n      - name: \"lang\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"Lang\"\n        x-optionalDataType: \"String\"\n      - name: \"status.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"StatusProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"status.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"StatusNote\"\n        x-optionalDataType: \"String\"\n      - name: \"en\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"En\"\n        x-optionalDataType: \"String\"\n      - name: \"no.progress\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        format: \"int64\"\n        x-exportParamName: \"NoProgress\"\n        x-optionalDataType: \"String\"\n      - name: \"no.note\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NoNote\"\n        x-optionalDataType: \"String\"\n      - name: \"resourceId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"ResourceId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.nId\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdNId\"\n        x-optionalDataType: \"String\"\n      - name: \"nId.val\"\n        in: \"query\"\n        required: false\n        type: \"string\"\n        x-exportParamName: \"NIdVal\"\n        x-optionalDataType: \"String\"\n      responses:\n        200:\n          description: \"A successful response.\"\n          schema:\n            $ref: \"#/definitions/examplepbUnannotatedSimpleMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\n  /v1/example/echo_nested:\n    put:\n      tags:\n      - \"UnannotatedEchoService\"\n      summary: \"EchoNested method receives a simple message and returns it.\"\n      operationId: \"UnannotatedEchoService_EchoNested\"\n      parameters:\n      - in: \"body\"\n        name: \"body\"\n        description: \"A simple message with many types\"\n        required: true\n        schema:\n          $ref: \"#/definitions/examplepbUnannotatedSimpleMessage\"\n        x-exportParamName: \"Body\"\n      responses:\n        200:\n          description: \"\"\n          schema:\n            $ref: \"#/definitions/examplepbUnannotatedNestedMessage\"\n        403:\n          description: \"Returned when the user does not have permission to access\\\n            \\ the resource.\"\n          schema: {}\n        404:\n          description: \"Returned when the resource does not exist.\"\n          schema:\n            type: \"string\"\n            format: \"string\"\n        default:\n          description: \"An unexpected error response.\"\n          schema:\n            $ref: \"#/definitions/rpcStatus\"\nsecurityDefinitions:\n  ApiKeyAuth:\n    type: \"apiKey\"\n    name: \"X-API-Key\"\n    in: \"header\"\n    x-amazon-apigateway-authorizer:\n      authorizerResultTtlInSeconds: 60\n      type: \"token\"\n    x-amazon-apigateway-authtype: \"oauth2\"\n  BasicAuth:\n    type: \"basic\"\ndefinitions:\n  examplepbUnannotatedEmbedded:\n    type: \"object\"\n    properties:\n      progress:\n        type: \"string\"\n        format: \"int64\"\n      note:\n        type: \"string\"\n    description: \"Embedded represents a message embedded in SimpleMessage.\"\n    x-go-type:\n      import:\n        package: \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n      type: \"UnannotatedEmbedded\"\n  examplepbUnannotatedNestedMessage:\n    type: \"object\"\n    properties:\n      nId:\n        type: \"string\"\n      val:\n        type: \"string\"\n    example:\n      val: \"val\"\n      nId: \"nId\"\n    x-go-type:\n      import:\n        package: \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n      type: \"UnannotatedNestedMessage\"\n  examplepbUnannotatedSimpleMessage:\n    type: \"object\"\n    required:\n    - \"id\"\n    - \"num\"\n    properties:\n      id:\n        type: \"string\"\n        description: \"Id represents the message identifier.\"\n      num:\n        type: \"string\"\n        format: \"int64\"\n        description: \"Int value field\"\n        default: \"42\"\n      duration:\n        type: \"string\"\n      lineNum:\n        type: \"string\"\n        format: \"int64\"\n      lang:\n        type: \"string\"\n      status:\n        $ref: \"#/definitions/examplepbUnannotatedEmbedded\"\n      en:\n        type: \"string\"\n        format: \"int64\"\n      \"no\":\n        $ref: \"#/definitions/examplepbUnannotatedEmbedded\"\n      resourceId:\n        type: \"string\"\n      nId:\n        $ref: \"#/definitions/examplepbUnannotatedNestedMessage\"\n    externalDocs:\n      description: \"Find out more about UnannotatedSimpleMessage\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    title: \"A bit of everything\"\n    description: \"A simple message with many types\"\n    example:\n      id: \"myid\"\n  protobufAny:\n    type: \"object\"\n    properties:\n      '@type':\n        type: \"string\"\n    additionalProperties: {}\n    x-go-type:\n      import:\n        package: \"google.golang.org/protobuf/types/known/anypb\"\n      type: \"Any\"\n  rpcStatus:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n        format: \"int32\"\n      message:\n        type: \"string\"\n      details:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/protobufAny\"\n    x-go-type:\n      import:\n        package: \"google.golang.org/genproto/googleapis/rpc/status\"\n      type: \"Status\"\nexternalDocs:\n  description: \"More about gRPC-Gateway\"\n  url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\nx-grpc-gateway-baz-list:\n- \"one\"\n- true\nx-grpc-gateway-foo: \"bar\"\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\nimport (\n\t\"context\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"fmt\"\n\t\"github.com/antihax/optional\"\n)\n\n// Linger please\nvar (\n\t_ context.Context\n)\n\ntype UnannotatedEchoServiceApiService service\n\n/* \nUnannotatedEchoServiceApiService Summary: Echo rpc\nDescription Echo\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id Id represents the message identifier.\n * @param num Int value field\n * @param optional nil or *UnannotatedEchoServiceEchoOpts - Optional Parameters:\n     * @param \"Duration\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbUnannotatedSimpleMessage\n*/\n\ntype UnannotatedEchoServiceEchoOpts struct { \n\tDuration optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(ctx context.Context, id string, num string, localVarOptionals *UnannotatedEchoServiceEchoOpts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbUnannotatedSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo/{id}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tlocalVarQueryParams.Add(\"num\", parameterToString(num, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Duration.IsSet() {\n\t\tlocalVarQueryParams.Add(\"duration\", parameterToString(localVarOptionals.Duration.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbUnannotatedSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v int32\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 503 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nUnannotatedEchoServiceApiService Summary: Echo rpc\nDescription Echo\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param id Id represents the message identifier.\n * @param num Int value field\n * @param optional nil or *UnannotatedEchoServiceEcho2Opts - Optional Parameters:\n     * @param \"Duration\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbUnannotatedSimpleMessage\n*/\n\ntype UnannotatedEchoServiceEcho2Opts struct { \n\tDuration optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx context.Context, id string, num string, localVarOptionals *UnannotatedEchoServiceEcho2Opts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Get\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbUnannotatedSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo/{id}/{num}\"\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"id\"+\"}\", fmt.Sprintf(\"%v\", id), -1)\n\tlocalVarPath = strings.Replace(localVarPath, \"{\"+\"num\"+\"}\", fmt.Sprintf(\"%v\", num), -1)\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Duration.IsSet() {\n\t\tlocalVarQueryParams.Add(\"duration\", parameterToString(localVarOptionals.Duration.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbUnannotatedSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v int32\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 503 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nUnannotatedEchoServiceApiService EchoBody method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body A simple message with many types\n\n@return ExamplepbUnannotatedSimpleMessage\n*/\nfunc (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoBody(ctx context.Context, body ExamplepbUnannotatedSimpleMessage) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Post\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbUnannotatedSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_body\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbUnannotatedSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nUnannotatedEchoServiceApiService EchoDelete method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param num Int value field\n * @param optional nil or *UnannotatedEchoServiceEchoDeleteOpts - Optional Parameters:\n     * @param \"Id\" (optional.String) -  Id represents the message identifier.\n     * @param \"Duration\" (optional.String) - \n     * @param \"LineNum\" (optional.String) - \n     * @param \"Lang\" (optional.String) - \n     * @param \"StatusProgress\" (optional.String) - \n     * @param \"StatusNote\" (optional.String) - \n     * @param \"En\" (optional.String) - \n     * @param \"NoProgress\" (optional.String) - \n     * @param \"NoNote\" (optional.String) - \n     * @param \"ResourceId\" (optional.String) - \n     * @param \"NIdNId\" (optional.String) - \n     * @param \"NIdVal\" (optional.String) - \n\n@return ExamplepbUnannotatedSimpleMessage\n*/\n\ntype UnannotatedEchoServiceEchoDeleteOpts struct { \n\tId optional.String\n\tDuration optional.String\n\tLineNum optional.String\n\tLang optional.String\n\tStatusProgress optional.String\n\tStatusNote optional.String\n\tEn optional.String\n\tNoProgress optional.String\n\tNoNote optional.String\n\tResourceId optional.String\n\tNIdNId optional.String\n\tNIdVal optional.String\n}\n\nfunc (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoDelete(ctx context.Context, num string, localVarOptionals *UnannotatedEchoServiceEchoDeleteOpts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Delete\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbUnannotatedSimpleMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_delete\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\tif localVarOptionals != nil && localVarOptionals.Id.IsSet() {\n\t\tlocalVarQueryParams.Add(\"id\", parameterToString(localVarOptionals.Id.Value(), \"\"))\n\t}\n\tlocalVarQueryParams.Add(\"num\", parameterToString(num, \"\"))\n\tif localVarOptionals != nil && localVarOptionals.Duration.IsSet() {\n\t\tlocalVarQueryParams.Add(\"duration\", parameterToString(localVarOptionals.Duration.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.LineNum.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lineNum\", parameterToString(localVarOptionals.LineNum.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.Lang.IsSet() {\n\t\tlocalVarQueryParams.Add(\"lang\", parameterToString(localVarOptionals.Lang.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.progress\", parameterToString(localVarOptionals.StatusProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"status.note\", parameterToString(localVarOptionals.StatusNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.En.IsSet() {\n\t\tlocalVarQueryParams.Add(\"en\", parameterToString(localVarOptionals.En.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.progress\", parameterToString(localVarOptionals.NoProgress.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NoNote.IsSet() {\n\t\tlocalVarQueryParams.Add(\"no.note\", parameterToString(localVarOptionals.NoNote.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.ResourceId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"resourceId\", parameterToString(localVarOptionals.ResourceId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdNId.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.nId\", parameterToString(localVarOptionals.NIdNId.Value(), \"\"))\n\t}\n\tif localVarOptionals != nil && localVarOptionals.NIdVal.IsSet() {\n\t\tlocalVarQueryParams.Add(\"nId.val\", parameterToString(localVarOptionals.NIdVal.Value(), \"\"))\n\t}\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbUnannotatedSimpleMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n\n/* \nUnannotatedEchoServiceApiService EchoNested method receives a simple message and returns it.\n * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().\n * @param body A simple message with many types\n\n@return ExamplepbUnannotatedNestedMessage\n*/\nfunc (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoNested(ctx context.Context, body ExamplepbUnannotatedSimpleMessage) (ExamplepbUnannotatedNestedMessage, *http.Response, error) {\n\tvar (\n\t\tlocalVarHttpMethod = strings.ToUpper(\"Put\")\n\t\tlocalVarPostBody   interface{}\n\t\tlocalVarFileName   string\n\t\tlocalVarFileBytes  []byte\n\t\tlocalVarReturnValue ExamplepbUnannotatedNestedMessage\n\t)\n\n\t// create path and map variables\n\tlocalVarPath := a.client.cfg.BasePath + \"/v1/example/echo_nested\"\n\n\tlocalVarHeaderParams := make(map[string]string)\n\tlocalVarQueryParams := url.Values{}\n\tlocalVarFormParams := url.Values{}\n\n\t// to determine the Content-Type header\n\tlocalVarHttpContentTypes := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Content-Type header\n\tlocalVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)\n\tif localVarHttpContentType != \"\" {\n\t\tlocalVarHeaderParams[\"Content-Type\"] = localVarHttpContentType\n\t}\n\n\t// to determine the Accept header\n\tlocalVarHttpHeaderAccepts := []string{\"application/json\", \"application/x-foo-mime\"}\n\n\t// set Accept header\n\tlocalVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)\n\tif localVarHttpHeaderAccept != \"\" {\n\t\tlocalVarHeaderParams[\"Accept\"] = localVarHttpHeaderAccept\n\t}\n\t// body params\n\tlocalVarPostBody = &body\n\tif ctx != nil {\n\t\t// API Key Authentication\n\t\tif auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok {\n\t\t\tvar key string\n\t\t\tif auth.Prefix != \"\" {\n\t\t\t\tkey = auth.Prefix + \" \" + auth.Key\n\t\t\t} else {\n\t\t\t\tkey = auth.Key\n\t\t\t}\n\t\t\tlocalVarHeaderParams[\"X-API-Key\"] = key\n\t\t\t\n\t\t}\n\t}\n\tr, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)\n\tif err != nil {\n\t\treturn localVarReturnValue, nil, err\n\t}\n\n\tlocalVarHttpResponse, err := a.client.callAPI(r)\n\tif err != nil || localVarHttpResponse == nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tlocalVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)\n\tlocalVarHttpResponse.Body.Close()\n\tif err != nil {\n\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t}\n\n\tif localVarHttpResponse.StatusCode < 300 {\n\t\t// If we succeed, return the data, otherwise pass on to decode error.\n\t\terr = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\tif err == nil { \n\t\t\treturn localVarReturnValue, localVarHttpResponse, err\n\t\t}\n\t}\n\n\tif localVarHttpResponse.StatusCode >= 300 {\n\t\tnewErr := GenericSwaggerError{\n\t\t\tbody: localVarBody,\n\t\t\terror: localVarHttpResponse.Status,\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 200 {\n\t\t\tvar v ExamplepbUnannotatedNestedMessage\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 403 {\n\t\t\tvar v interface{}\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 404 {\n\t\t\tvar v string\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\tif localVarHttpResponse.StatusCode == 0 {\n\t\t\tvar v RpcStatus\n\t\t\terr = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get(\"Content-Type\"));\n\t\t\t\tif err != nil {\n\t\t\t\t\tnewErr.error = err.Error()\n\t\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t\t\t}\n\t\t\t\tnewErr.model = v\n\t\t\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t\t}\n\t\t\n\t\treturn localVarReturnValue, localVarHttpResponse, newErr\n\t}\n\n\treturn localVarReturnValue, localVarHttpResponse, nil\n}\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/client.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/oauth2\"\n)\n\nvar (\n\tjsonCheck = regexp.MustCompile(\"(?i:[application|text]/json)\")\n\txmlCheck  = regexp.MustCompile(\"(?i:[application|text]/xml)\")\n)\n\n// APIClient manages communication with the Unannotated Echo API v1.0\n// In most cases there should be only one, shared, APIClient.\ntype APIClient struct {\n\tcfg    *Configuration\n\tcommon service // Reuse a single struct instead of allocating one for each service on the heap.\n\n\t// API Services\n\n\tUnannotatedEchoServiceApi *UnannotatedEchoServiceApiService\n}\n\ntype service struct {\n\tclient *APIClient\n}\n\n// NewAPIClient creates a new API client. Requires a userAgent string describing your application.\n// optionally a custom http.Client to allow for advanced features such as caching.\nfunc NewAPIClient(cfg *Configuration) *APIClient {\n\tif cfg.HTTPClient == nil {\n\t\tcfg.HTTPClient = http.DefaultClient\n\t}\n\n\tc := &APIClient{}\n\tc.cfg = cfg\n\tc.common.client = c\n\n\t// API Services\n\tc.UnannotatedEchoServiceApi = (*UnannotatedEchoServiceApiService)(&c.common)\n\n\treturn c\n}\n\nfunc atoi(in string) (int, error) {\n\treturn strconv.Atoi(in)\n}\n\n// selectHeaderContentType select a content type from the available list.\nfunc selectHeaderContentType(contentTypes []string) string {\n\tif len(contentTypes) == 0 {\n\t\treturn \"\"\n\t}\n\tif contains(contentTypes, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\treturn contentTypes[0] // use the first content type specified in 'consumes'\n}\n\n// selectHeaderAccept join all accept types and return\nfunc selectHeaderAccept(accepts []string) string {\n\tif len(accepts) == 0 {\n\t\treturn \"\"\n\t}\n\n\tif contains(accepts, \"application/json\") {\n\t\treturn \"application/json\"\n\t}\n\n\treturn strings.Join(accepts, \",\")\n}\n\n// contains is a case insenstive match, finding needle in a haystack\nfunc contains(haystack []string, needle string) bool {\n\tfor _, a := range haystack {\n\t\tif strings.ToLower(a) == strings.ToLower(needle) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Verify optional parameters are of the correct type.\nfunc typeCheckParameter(obj interface{}, expected string, name string) error {\n\t// Make sure there is an object.\n\tif obj == nil {\n\t\treturn nil\n\t}\n\n\t// Check the type is as expected.\n\tif reflect.TypeOf(obj).String() != expected {\n\t\treturn fmt.Errorf(\"Expected %s to be of type %s but received %s.\", name, expected, reflect.TypeOf(obj).String())\n\t}\n\treturn nil\n}\n\n// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.\nfunc parameterToString(obj interface{}, collectionFormat string) string {\n\tvar delimiter string\n\n\tswitch collectionFormat {\n\tcase \"pipes\":\n\t\tdelimiter = \"|\"\n\tcase \"ssv\":\n\t\tdelimiter = \" \"\n\tcase \"tsv\":\n\t\tdelimiter = \"\\t\"\n\tcase \"csv\":\n\t\tdelimiter = \",\"\n\t}\n\n\tif reflect.TypeOf(obj).Kind() == reflect.Slice {\n\t\treturn strings.Trim(strings.Replace(fmt.Sprint(obj), \" \", delimiter, -1), \"[]\")\n\t}\n\n\treturn fmt.Sprintf(\"%v\", obj)\n}\n\n// callAPI do the request.\nfunc (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {\n\treturn c.cfg.HTTPClient.Do(request)\n}\n\n// Change base path to allow switching to mocks\nfunc (c *APIClient) ChangeBasePath(path string) {\n\tc.cfg.BasePath = path\n}\n\n// prepareRequest build the request\nfunc (c *APIClient) prepareRequest(\n\tctx context.Context,\n\tpath string, method string,\n\tpostBody interface{},\n\theaderParams map[string]string,\n\tqueryParams url.Values,\n\tformParams url.Values,\n\tfileName string,\n\tfileBytes []byte) (localVarRequest *http.Request, err error) {\n\n\tvar body *bytes.Buffer\n\n\t// Detect postBody type and post.\n\tif postBody != nil {\n\t\tcontentType := headerParams[\"Content-Type\"]\n\t\tif contentType == \"\" {\n\t\t\tcontentType = detectContentType(postBody)\n\t\t\theaderParams[\"Content-Type\"] = contentType\n\t\t}\n\n\t\tbody, err = setBody(postBody, contentType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// add form parameters and file if available.\n\tif len(formParams) > 0 || (len(fileBytes) > 0 && fileName != \"\") {\n\t\tif body != nil {\n\t\t\treturn nil, errors.New(\"Cannot specify postBody and multipart form at the same time.\")\n\t\t}\n\t\tbody = &bytes.Buffer{}\n\t\tw := multipart.NewWriter(body)\n\n\t\tfor k, v := range formParams {\n\t\t\tfor _, iv := range v {\n\t\t\t\tif strings.HasPrefix(k, \"@\") { // file\n\t\t\t\t\terr = addFile(w, k[1:], iv)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t} else { // form value\n\t\t\t\t\tw.WriteField(k, iv)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(fileBytes) > 0 && fileName != \"\" {\n\t\t\tw.Boundary()\n\t\t\t//_, fileNm := filepath.Split(fileName)\n\t\t\tpart, err := w.CreateFormFile(\"file\", filepath.Base(fileName))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t_, err = part.Write(fileBytes)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// Set the Boundary in the Content-Type\n\t\t\theaderParams[\"Content-Type\"] = w.FormDataContentType()\n\t\t}\n\n\t\t// Set Content-Length\n\t\theaderParams[\"Content-Length\"] = fmt.Sprintf(\"%d\", body.Len())\n\t\tw.Close()\n\t}\n\n\t// Setup path and query parameters\n\turl, err := url.Parse(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Adding Query Param\n\tquery := url.Query()\n\tfor k, v := range queryParams {\n\t\tfor _, iv := range v {\n\t\t\tquery.Add(k, iv)\n\t\t}\n\t}\n\n\t// Encode the parameters.\n\turl.RawQuery = query.Encode()\n\n\t// Generate a new request\n\tif body != nil {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), body)\n\t} else {\n\t\tlocalVarRequest, err = http.NewRequest(method, url.String(), nil)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// add header parameters, if any\n\tif len(headerParams) > 0 {\n\t\theaders := http.Header{}\n\t\tfor h, v := range headerParams {\n\t\t\theaders.Set(h, v)\n\t\t}\n\t\tlocalVarRequest.Header = headers\n\t}\n\n\t// Override request host, if applicable\n\tif c.cfg.Host != \"\" {\n\t\tlocalVarRequest.Host = c.cfg.Host\n\t}\n\n\t// Add the user agent to the request.\n\tlocalVarRequest.Header.Add(\"User-Agent\", c.cfg.UserAgent)\n\n\tif ctx != nil {\n\t\t// add context to the request\n\t\tlocalVarRequest = localVarRequest.WithContext(ctx)\n\n\t\t// Walk through any authentication.\n\n\t\t// OAuth2 authentication\n\t\tif tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {\n\t\t\t// We were able to grab an oauth2 token from the context\n\t\t\tvar latestToken *oauth2.Token\n\t\t\tif latestToken, err = tok.Token(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tlatestToken.SetAuthHeader(localVarRequest)\n\t\t}\n\n\t\t// Basic HTTP Authentication\n\t\tif auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {\n\t\t\tlocalVarRequest.SetBasicAuth(auth.UserName, auth.Password)\n\t\t}\n\n\t\t// AccessToken Authentication\n\t\tif auth, ok := ctx.Value(ContextAccessToken).(string); ok {\n\t\t\tlocalVarRequest.Header.Add(\"Authorization\", \"Bearer \"+auth)\n\t\t}\n\t}\n\n\tfor header, value := range c.cfg.DefaultHeader {\n\t\tlocalVarRequest.Header.Add(header, value)\n\t}\n\n\treturn localVarRequest, nil\n}\n\nfunc (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {\n\t\tif strings.Contains(contentType, \"application/xml\") {\n\t\t\tif err = xml.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t} else if strings.Contains(contentType, \"application/json\") {\n\t\t\tif err = json.Unmarshal(b, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\treturn errors.New(\"undefined response type\")\n}\n\n// Add a file to the multipart request\nfunc addFile(w *multipart.Writer, fieldName, path string) error {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\tpart, err := w.CreateFormFile(fieldName, filepath.Base(path))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(part, file)\n\n\treturn err\n}\n\n// Prevent trying to import \"fmt\"\nfunc reportError(format string, a ...interface{}) error {\n\treturn fmt.Errorf(format, a...)\n}\n\n// Set request body from an interface{}\nfunc setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {\n\tif bodyBuf == nil {\n\t\tbodyBuf = &bytes.Buffer{}\n\t}\n\n\tif reader, ok := body.(io.Reader); ok {\n\t\t_, err = bodyBuf.ReadFrom(reader)\n\t} else if b, ok := body.([]byte); ok {\n\t\t_, err = bodyBuf.Write(b)\n\t} else if s, ok := body.(string); ok {\n\t\t_, err = bodyBuf.WriteString(s)\n\t} else if s, ok := body.(*string); ok {\n\t\t_, err = bodyBuf.WriteString(*s)\n\t} else if jsonCheck.MatchString(contentType) {\n\t\terr = json.NewEncoder(bodyBuf).Encode(body)\n\t} else if xmlCheck.MatchString(contentType) {\n\t\txml.NewEncoder(bodyBuf).Encode(body)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif bodyBuf.Len() == 0 {\n\t\terr = fmt.Errorf(\"Invalid body type %s\\n\", contentType)\n\t\treturn nil, err\n\t}\n\treturn bodyBuf, nil\n}\n\n// detectContentType method is used to figure out `Request.Body` content type for request header\nfunc detectContentType(body interface{}) string {\n\tcontentType := \"text/plain; charset=utf-8\"\n\tkind := reflect.TypeOf(body).Kind()\n\n\tswitch kind {\n\tcase reflect.Struct, reflect.Map, reflect.Ptr:\n\t\tcontentType = \"application/json; charset=utf-8\"\n\tcase reflect.String:\n\t\tcontentType = \"text/plain; charset=utf-8\"\n\tdefault:\n\t\tif b, ok := body.([]byte); ok {\n\t\t\tcontentType = http.DetectContentType(b)\n\t\t} else if kind == reflect.Slice {\n\t\t\tcontentType = \"application/json; charset=utf-8\"\n\t\t}\n\t}\n\n\treturn contentType\n}\n\n// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go\ntype cacheControl map[string]string\n\nfunc parseCacheControl(headers http.Header) cacheControl {\n\tcc := cacheControl{}\n\tccHeader := headers.Get(\"Cache-Control\")\n\tfor _, part := range strings.Split(ccHeader, \",\") {\n\t\tpart = strings.Trim(part, \" \")\n\t\tif part == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.ContainsRune(part, '=') {\n\t\t\tkeyval := strings.Split(part, \"=\")\n\t\t\tcc[strings.Trim(keyval[0], \" \")] = strings.Trim(keyval[1], \",\")\n\t\t} else {\n\t\t\tcc[part] = \"\"\n\t\t}\n\t}\n\treturn cc\n}\n\n// CacheExpires helper function to determine remaining time before repeating a request.\nfunc CacheExpires(r *http.Response) time.Time {\n\t// Figure out when the cache expires.\n\tvar expires time.Time\n\tnow, err := time.Parse(time.RFC1123, r.Header.Get(\"date\"))\n\tif err != nil {\n\t\treturn time.Now()\n\t}\n\trespCacheControl := parseCacheControl(r.Header)\n\n\tif maxAge, ok := respCacheControl[\"max-age\"]; ok {\n\t\tlifetime, err := time.ParseDuration(maxAge + \"s\")\n\t\tif err != nil {\n\t\t\texpires = now\n\t\t}\n\t\texpires = now.Add(lifetime)\n\t} else {\n\t\texpiresHeader := r.Header.Get(\"Expires\")\n\t\tif expiresHeader != \"\" {\n\t\t\texpires, err = time.Parse(time.RFC1123, expiresHeader)\n\t\t\tif err != nil {\n\t\t\t\texpires = now\n\t\t\t}\n\t\t}\n\t}\n\treturn expires\n}\n\nfunc strlen(s string) int {\n\treturn utf8.RuneCountInString(s)\n}\n\n// GenericSwaggerError Provides access to the body, error and model on returned errors.\ntype GenericSwaggerError struct {\n\tbody  []byte\n\terror string\n\tmodel interface{}\n}\n\n// Error returns non-empty string if there was an error.\nfunc (e GenericSwaggerError) Error() string {\n\treturn e.error\n}\n\n// Body returns the raw bytes of the response\nfunc (e GenericSwaggerError) Body() []byte {\n\treturn e.body\n}\n\n// Model returns the unpacked model of the error\nfunc (e GenericSwaggerError) Model() interface{} {\n\treturn e.model\n}"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/configuration.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\nimport (\n\t\"net/http\"\n)\n\n// contextKeys are used to identify the type of value in the context.\n// Since these are string, it is possible to get a short description of the\n// context key for logging and debugging using key.String().\n\ntype contextKey string\n\nfunc (c contextKey) String() string {\n\treturn \"auth \" + string(c)\n}\n\nvar (\n\t// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.\n\tContextOAuth2 = contextKey(\"token\")\n\n\t// ContextBasicAuth takes BasicAuth as authentication for the request.\n\tContextBasicAuth = contextKey(\"basic\")\n\n\t// ContextAccessToken takes a string oauth2 access token as authentication for the request.\n\tContextAccessToken = contextKey(\"accesstoken\")\n\n\t// ContextAPIKey takes an APIKey as authentication for the request\n\tContextAPIKey = contextKey(\"apikey\")\n)\n\n// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth\ntype BasicAuth struct {\n\tUserName string `json:\"userName,omitempty\"`\n\tPassword string `json:\"password,omitempty\"`\n}\n\n// APIKey provides API key based authentication to a request passed via context using ContextAPIKey\ntype APIKey struct {\n\tKey    string\n\tPrefix string\n}\n\ntype Configuration struct {\n\tBasePath      string            `json:\"basePath,omitempty\"`\n\tHost          string            `json:\"host,omitempty\"`\n\tScheme        string            `json:\"scheme,omitempty\"`\n\tDefaultHeader map[string]string `json:\"defaultHeader,omitempty\"`\n\tUserAgent     string            `json:\"userAgent,omitempty\"`\n\tHTTPClient    *http.Client\n}\n\nfunc NewConfiguration() *Configuration {\n\tcfg := &Configuration{\n\t\tBasePath:      \"http://localhost\",\n\t\tDefaultHeader: make(map[string]string),\n\t\tUserAgent:     \"Swagger-Codegen/1.0.0/go\",\n\t}\n\treturn cfg\n}\n\nfunc (c *Configuration) AddDefaultHeader(key string, value string) {\n\tc.DefaultHeader[key] = value\n}\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/model_examplepb_numeric_enum.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n// ExamplepbNumericEnum : NumericEnum is one or zero.   - ZERO: ZERO means 0  - ONE: ONE means 1\ntype ExamplepbNumericEnum string\n\n// List of examplepbNumericEnum\nconst (\n\tZERO_ExamplepbNumericEnum ExamplepbNumericEnum = \"ZERO\"\n\tONE_ExamplepbNumericEnum ExamplepbNumericEnum = \"ONE\"\n)\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/model_examplepb_unannotated_embedded.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\n// Embedded represents a message embedded in SimpleMessage.\ntype ExamplepbUnannotatedEmbedded struct {\n\tProgress string `json:\"progress,omitempty\"`\n\tNote string `json:\"note,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/model_examplepb_unannotated_nested_message.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\ntype ExamplepbUnannotatedNestedMessage struct {\n\tNId string `json:\"nId,omitempty\"`\n\tVal string `json:\"val,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\n// A simple message with many types\ntype ExamplepbUnannotatedSimpleMessage struct {\n\t// Id represents the message identifier.\n\tId string `json:\"id\"`\n\t// Int value field\n\tNum string `json:\"num\"`\n\tDuration string `json:\"duration,omitempty\"`\n\tLineNum string `json:\"lineNum,omitempty\"`\n\tLang string `json:\"lang,omitempty\"`\n\tStatus *ExamplepbUnannotatedEmbedded `json:\"status,omitempty\"`\n\tEn string `json:\"en,omitempty\"`\n\tNo *ExamplepbUnannotatedEmbedded `json:\"no,omitempty\"`\n\tResourceId string `json:\"resourceId,omitempty\"`\n\tNId *ExamplepbUnannotatedNestedMessage `json:\"nId,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/model_protobuf_any.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\ntype ProtobufAny struct {\n\tType_ string `json:\"@type,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/model_rpc_status.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\ntype RpcStatus struct {\n\tCode int32 `json:\"code,omitempty\"`\n\tMessage string `json:\"message,omitempty\"`\n\tDetails []ProtobufAny `json:\"details,omitempty\"`\n}\n"
  },
  {
    "path": "examples/internal/clients/unannotatedecho/response.go",
    "content": "/*\n * Unannotated Echo\n *\n * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format.  Echo Service API consists of a single service which returns a message.\n *\n * API version: 1.0\n * Contact: none@example.com\n * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)\n */\n\npackage unannotatedecho\n\nimport (\n\t\"net/http\"\n)\n\ntype APIResponse struct {\n\t*http.Response `json:\"-\"`\n\tMessage        string `json:\"message,omitempty\"`\n\t// Operation is the name of the swagger operation.\n\tOperation string `json:\"operation,omitempty\"`\n\t// RequestURL is the request URL. This value is always available, even if the\n\t// embedded *http.Response is nil.\n\tRequestURL string `json:\"url,omitempty\"`\n\t// Method is the HTTP method used for the request.  This value is always\n\t// available, even if the embedded *http.Response is nil.\n\tMethod string `json:\"method,omitempty\"`\n\t// Payload holds the contents of the response body (which may be nil or empty).\n\t// This is provided here as the raw response.Body() reader will have already\n\t// been drained.\n\tPayload []byte `json:\"-\"`\n}\n\nfunc NewAPIResponse(r *http.Response) *APIResponse {\n\n\tresponse := &APIResponse{Response: r}\n\treturn response\n}\n\nfunc NewAPIResponseWithError(errorMessage string) *APIResponse {\n\n\tresponse := &APIResponse{Message: errorMessage}\n\treturn response\n}\n"
  },
  {
    "path": "examples/internal/cmd/example-gateway-server/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_binary\", \"go_library\")\n\ngo_library(\n    name = \"example-gateway-server_lib\",\n    srcs = [\"main.go\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-gateway-server\",\n    visibility = [\"//visibility:private\"],\n    deps = [\n        \"//examples/internal/gateway\",\n        \"@org_golang_google_grpc//grpclog\",\n    ],\n)\n\ngo_binary(\n    name = \"example-gateway-server\",\n    embed = [\":example-gateway-server_lib\"],\n    visibility = [\"//visibility:public\"],\n)\n"
  },
  {
    "path": "examples/internal/cmd/example-gateway-server/main.go",
    "content": "/*\nCommand example-gateway-server is an example reverse-proxy implementation\nwhose HTTP handler is generated by grpc-gateway.\n*/\npackage main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/gateway\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nvar (\n\tendpoint   = flag.String(\"endpoint\", \"localhost:9090\", \"endpoint of the gRPC service\")\n\tnetwork    = flag.String(\"network\", \"tcp\", `one of \"tcp\" or \"unix\". Must be consistent to -endpoint`)\n\topenAPIDir = flag.String(\"openapi_dir\", \"examples/internal/proto/examplepb\", \"path to the directory which contains OpenAPI definitions\")\n)\n\nfunc main() {\n\tflag.Parse()\n\n\tctx := context.Background()\n\topts := gateway.Options{\n\t\tAddr: \":8080\",\n\t\tGRPCServer: gateway.Endpoint{\n\t\t\tNetwork: *network,\n\t\t\tAddr:    *endpoint,\n\t\t},\n\t\tOpenAPIDir: *openAPIDir,\n\t}\n\tif err := gateway.Run(ctx, opts); err != nil {\n\t\tgrpclog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "examples/internal/cmd/example-grpc-server/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_binary\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:private\"])\n\ngo_library(\n    name = \"example-grpc-server_lib\",\n    srcs = [\"main.go\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-grpc-server\",\n    deps = [\n        \"//examples/internal/server\",\n        \"@org_golang_google_grpc//grpclog\",\n    ],\n)\n\ngo_binary(\n    name = \"example-server\",\n    embed = [\":example-grpc-server_lib\"],\n    visibility = [\"//visibility:public\"],\n)\n"
  },
  {
    "path": "examples/internal/cmd/example-grpc-server/main.go",
    "content": "/*\nCommand example-grpc-server is an example grpc server\nto be called by example-gateway-server.\n*/\npackage main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nvar (\n\taddr    = flag.String(\"addr\", \":9090\", \"endpoint of the gRPC service\")\n\tnetwork = flag.String(\"network\", \"tcp\", \"a valid network type which is consistent to -addr\")\n)\n\nfunc main() {\n\tflag.Parse()\n\n\tctx := context.Background()\n\tif err := server.Run(ctx, *network, *addr); err != nil {\n\t\tgrpclog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "examples/internal/gateway/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\ngo_library(\n    name = \"gateway\",\n    srcs = [\n        \"doc.go\",\n        \"gateway.go\",\n        \"handlers.go\",\n        \"main.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/gateway\",\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"//examples/internal/proto/examplepb\",\n        \"//examples/internal/proto/standalone\",\n        \"//runtime\",\n        \"@org_golang_google_genproto_googleapis_rpc//errdetails\",\n        \"@org_golang_google_grpc//:grpc\",\n        \"@org_golang_google_grpc//connectivity\",\n        \"@org_golang_google_grpc//credentials/insecure\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_protobuf//types/known/emptypb\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":gateway\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/gateway/doc.go",
    "content": "// Package gateway is an example of gRPC-Gateway server\npackage gateway\n"
  },
  {
    "path": "examples/internal/gateway/gateway.go",
    "content": "package gateway\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\n\t\"google.golang.org/grpc/credentials/insecure\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\tstandalone \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone\"\n\tgwruntime \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t_ \"google.golang.org/genproto/googleapis/rpc/errdetails\"\n\t\"google.golang.org/grpc\"\n)\n\n// newGateway returns a new gateway server which translates HTTP into gRPC.\nfunc newGateway(ctx context.Context, conn *grpc.ClientConn, opts []gwruntime.ServeMuxOption) (http.Handler, error) {\n\tmux := gwruntime.NewServeMux(opts...)\n\n\tfor _, f := range []func(context.Context, *gwruntime.ServeMux, *grpc.ClientConn) error{\n\t\texamplepb.RegisterEchoServiceHandler,\n\t\tstandalone.RegisterUnannotatedEchoServiceHandler,\n\t\texamplepb.RegisterStreamServiceHandler,\n\t\texamplepb.RegisterABitOfEverythingServiceHandler,\n\t\texamplepb.RegisterFlowCombinationHandler,\n\t\texamplepb.RegisterExcessBodyServiceHandler,\n\t\texamplepb.RegisterNonStandardServiceHandler,\n\t\texamplepb.RegisterResponseBodyServiceHandler,\n\t} {\n\t\tif err := f(ctx, mux, conn); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn mux, nil\n}\n\nfunc dial(network, addr string) (*grpc.ClientConn, error) {\n\tswitch network {\n\tcase \"tcp\":\n\t\treturn dialTCP(addr)\n\tcase \"unix\":\n\t\treturn dialUnix(addr)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unsupported network type %q\", network)\n\t}\n}\n\n// dialTCP creates a client connection via TCP.\n// \"addr\" must be a valid TCP address with a port number.\nfunc dialTCP(addr string) (*grpc.ClientConn, error) {\n\treturn grpc.NewClient(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))\n}\n\n// dialUnix creates a client connection via a unix domain socket.\n// \"addr\" must be a valid path to the socket.\nfunc dialUnix(addr string) (*grpc.ClientConn, error) {\n\td := func(ctx context.Context, addr string) (net.Conn, error) {\n\t\treturn (&net.Dialer{}).DialContext(ctx, \"unix\", addr)\n\t}\n\treturn grpc.NewClient(addr, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(d))\n}\n"
  },
  {
    "path": "examples/internal/gateway/handlers.go",
    "content": "package gateway\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"path\"\n\t\"strings\"\n\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n)\n\n// openAPIServer returns OpenAPI specification files located under \"/openapiv2/\"\nfunc openAPIServer(dir string) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tif !strings.HasSuffix(r.URL.Path, \".swagger.json\") {\n\t\t\tgrpclog.Errorf(\"Not Found: %s\", r.URL.Path)\n\t\t\thttp.NotFound(w, r)\n\t\t\treturn\n\t\t}\n\n\t\tgrpclog.Infof(\"Serving %s\", r.URL.Path)\n\t\tp := strings.TrimPrefix(r.URL.Path, \"/openapiv2/\")\n\t\tp = path.Join(dir, p)\n\t\thttp.ServeFile(w, r, p)\n\t}\n}\n\n// allowCORS allows Cross Origin Resource Sharing from any origin.\n// Don't do this without consideration in production systems.\nfunc allowCORS(h http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tif origin := r.Header.Get(\"Origin\"); origin != \"\" {\n\t\t\tw.Header().Set(\"Access-Control-Allow-Origin\", origin)\n\t\t\tif r.Method == \"OPTIONS\" && r.Header.Get(\"Access-Control-Request-Method\") != \"\" {\n\t\t\t\tpreflightHandler(w, r)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\th.ServeHTTP(w, r)\n\t})\n}\n\n// preflightHandler adds the necessary headers in order to serve\n// CORS from any origin using the methods \"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\"\n// We insist, don't do this without consideration in production systems.\nfunc preflightHandler(w http.ResponseWriter, r *http.Request) {\n\theaders := []string{\"Content-Type\", \"Accept\", \"Authorization\"}\n\tw.Header().Set(\"Access-Control-Allow-Headers\", strings.Join(headers, \",\"))\n\tmethods := []string{\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\"}\n\tw.Header().Set(\"Access-Control-Allow-Methods\", strings.Join(methods, \",\"))\n\tgrpclog.Infof(\"Preflight request for %s\", r.URL.Path)\n}\n\n// healthzServer returns a simple health handler which returns ok.\nfunc healthzServer(conn *grpc.ClientConn) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"Content-Type\", \"text/plain\")\n\t\tif s := conn.GetState(); s == connectivity.Idle {\n\t\t\t// Invoke method to move connection from Idle to Ready\n\t\t\tconn.Invoke(r.Context(), \"/grpc.health.v1.Health/Check\", &emptypb.Empty{}, &emptypb.Empty{})\n\t\t}\n\t\tif s := conn.GetState(); s != connectivity.Ready {\n\t\t\thttp.Error(w, fmt.Sprintf(\"grpc server is %s\", s), http.StatusBadGateway)\n\t\t\treturn\n\t\t}\n\t\tfmt.Fprintln(w, \"ok\")\n\t}\n}\n\ntype logResponseWriter struct {\n\thttp.ResponseWriter\n\tstatusCode int\n}\n\nfunc (rsp *logResponseWriter) WriteHeader(code int) {\n\trsp.statusCode = code\n\trsp.ResponseWriter.WriteHeader(code)\n}\n\n// Unwrap returns the original http.ResponseWriter. This is necessary\n// to expose Flush() and Push() on the underlying response writer.\nfunc (rsp *logResponseWriter) Unwrap() http.ResponseWriter {\n\treturn rsp.ResponseWriter\n}\n\nfunc newLogResponseWriter(w http.ResponseWriter) *logResponseWriter {\n\treturn &logResponseWriter{w, http.StatusOK}\n}\n\n// logRequestBody logs the request body when the response status code is not 200.\n// This addresses the issue of being unable to retrieve the request body in the customErrorHandler middleware.\nfunc logRequestBody(h http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tlw := newLogResponseWriter(w)\n\t\tbody, err := io.ReadAll(r.Body)\n\t\tif err != nil {\n\t\t\thttp.Error(w, fmt.Sprintf(\"grpc server read request body err %+v\", err), http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\tclonedR := r.Clone(r.Context())\n\t\tclonedR.Body = io.NopCloser(bytes.NewReader(body))\n\n\t\th.ServeHTTP(lw, clonedR)\n\n\t\tif lw.statusCode != http.StatusOK {\n\t\t\tgrpclog.Errorf(\"http error %+v request body %+v\", lw.statusCode, string(body))\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "examples/internal/gateway/main.go",
    "content": "package gateway\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\n\tgwruntime \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// Endpoint describes a gRPC endpoint\ntype Endpoint struct {\n\tNetwork, Addr string\n}\n\n// Options is a set of options to be passed to Run\ntype Options struct {\n\t// Addr is the address to listen\n\tAddr string\n\n\t// GRPCServer defines an endpoint of a gRPC service\n\tGRPCServer Endpoint\n\n\t// OpenAPIDir is a path to a directory from which the server\n\t// serves OpenAPI specs.\n\tOpenAPIDir string\n\n\t// Mux is a list of options to be passed to the gRPC-Gateway multiplexer\n\tMux []gwruntime.ServeMuxOption\n}\n\n// Run starts a HTTP server and blocks while running if successful.\n// The server will be shutdown when \"ctx\" is canceled.\nfunc Run(ctx context.Context, opts Options) error {\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tconn, err := dial(opts.GRPCServer.Network, opts.GRPCServer.Addr)\n\tif err != nil {\n\t\treturn err\n\t}\n\tgo func() {\n\t\t<-ctx.Done()\n\t\tif err := conn.Close(); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to close a client connection to the gRPC server: %v\", err)\n\t\t}\n\t}()\n\n\tmux := http.NewServeMux()\n\tmux.HandleFunc(\"/openapiv2/\", openAPIServer(opts.OpenAPIDir))\n\tmux.HandleFunc(\"/healthz\", healthzServer(conn))\n\n\tgw, err := newGateway(ctx, conn, opts.Mux)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmux.Handle(\"/\", gw)\n\n\t// Do not use logRequestBody for ExcessBodyServer because it will perform\n\t// io.ReadAll and mask the issue:\n\t// https://github.com/grpc-ecosystem/grpc-gateway/issues/5236\n\thmux := http.NewServeMux()\n\thmux.Handle(\"/rpc/excess-body/\", allowCORS(mux))\n\thmux.Handle(\"/\", logRequestBody(allowCORS(mux)))\n\n\ts := &http.Server{\n\t\tAddr:    opts.Addr,\n\t\tHandler: hmux,\n\t}\n\tgo func() {\n\t\t<-ctx.Done()\n\t\tgrpclog.Infof(\"Shutting down the http server\")\n\t\tif err := s.Shutdown(context.Background()); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to shutdown http server: %v\", err)\n\t\t}\n\t}()\n\n\tgrpclog.Infof(\"Starting listening at %s\", opts.Addr)\n\tif err := s.ListenAndServe(); err != http.ErrServerClosed {\n\t\tgrpclog.Errorf(\"Failed to listen and serve: %v\", err)\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "examples/internal/helloworld/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\n# gazelle:exclude helloworld.pb.gw.go\n# gazelle:exclude helloworld_grpc.pb.go\n# gazelle:go_grpc_compilers //:go_apiv2, //:go_grpc, //protoc-gen-grpc-gateway:go_gen_grpc_gateway\n\nproto_library(\n    name = \"helloworld_proto\",\n    srcs = [\"helloworld.proto\"],\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"@com_google_protobuf//:wrappers_proto\",\n        \"@googleapis//google/api:annotations_proto\",\n    ],\n)\n\ngo_proto_library(\n    name = \"helloworld_go_proto\",\n    compilers = [\n        \"//:go_apiv2\",\n        \"//:go_grpc\",\n        \"//protoc-gen-grpc-gateway:go_gen_grpc_gateway\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld\",\n    proto = \":helloworld_proto\",\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n    ],\n)\n\ngo_library(\n    name = \"helloworld\",\n    embed = [\":helloworld_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":helloworld\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/helloworld/helloworld.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/helloworld/helloworld.proto\n\npackage helloworld\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\twrapperspb \"google.golang.org/protobuf/types/known/wrapperspb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype HelloRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tName      string                  `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tStrVal    *wrapperspb.StringValue `protobuf:\"bytes,2,opt,name=strVal,proto3\" json:\"strVal,omitempty\"`\n\tFloatVal  *wrapperspb.FloatValue  `protobuf:\"bytes,3,opt,name=floatVal,proto3\" json:\"floatVal,omitempty\"`\n\tDoubleVal *wrapperspb.DoubleValue `protobuf:\"bytes,4,opt,name=doubleVal,proto3\" json:\"doubleVal,omitempty\"`\n\tBoolVal   *wrapperspb.BoolValue   `protobuf:\"bytes,5,opt,name=boolVal,proto3\" json:\"boolVal,omitempty\"`\n\tBytesVal  *wrapperspb.BytesValue  `protobuf:\"bytes,6,opt,name=bytesVal,proto3\" json:\"bytesVal,omitempty\"`\n\tInt32Val  *wrapperspb.Int32Value  `protobuf:\"bytes,7,opt,name=int32Val,proto3\" json:\"int32Val,omitempty\"`\n\tUint32Val *wrapperspb.UInt32Value `protobuf:\"bytes,8,opt,name=uint32Val,proto3\" json:\"uint32Val,omitempty\"`\n\tInt64Val  *wrapperspb.Int64Value  `protobuf:\"bytes,9,opt,name=int64Val,proto3\" json:\"int64Val,omitempty\"`\n\tUint64Val *wrapperspb.UInt64Value `protobuf:\"bytes,10,opt,name=uint64Val,proto3\" json:\"uint64Val,omitempty\"`\n}\n\nfunc (x *HelloRequest) Reset() {\n\t*x = HelloRequest{}\n\tmi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *HelloRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*HelloRequest) ProtoMessage() {}\n\nfunc (x *HelloRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use HelloRequest.ProtoReflect.Descriptor instead.\nfunc (*HelloRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_helloworld_helloworld_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *HelloRequest) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *HelloRequest) GetStrVal() *wrapperspb.StringValue {\n\tif x != nil {\n\t\treturn x.StrVal\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetFloatVal() *wrapperspb.FloatValue {\n\tif x != nil {\n\t\treturn x.FloatVal\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetDoubleVal() *wrapperspb.DoubleValue {\n\tif x != nil {\n\t\treturn x.DoubleVal\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetBoolVal() *wrapperspb.BoolValue {\n\tif x != nil {\n\t\treturn x.BoolVal\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetBytesVal() *wrapperspb.BytesValue {\n\tif x != nil {\n\t\treturn x.BytesVal\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetInt32Val() *wrapperspb.Int32Value {\n\tif x != nil {\n\t\treturn x.Int32Val\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetUint32Val() *wrapperspb.UInt32Value {\n\tif x != nil {\n\t\treturn x.Uint32Val\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetInt64Val() *wrapperspb.Int64Value {\n\tif x != nil {\n\t\treturn x.Int64Val\n\t}\n\treturn nil\n}\n\nfunc (x *HelloRequest) GetUint64Val() *wrapperspb.UInt64Value {\n\tif x != nil {\n\t\treturn x.Uint64Val\n\t}\n\treturn nil\n}\n\ntype HelloReply struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tMessage string `protobuf:\"bytes,1,opt,name=message,proto3\" json:\"message,omitempty\"`\n}\n\nfunc (x *HelloReply) Reset() {\n\t*x = HelloReply{}\n\tmi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *HelloReply) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*HelloReply) ProtoMessage() {}\n\nfunc (x *HelloReply) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use HelloReply.ProtoReflect.Descriptor instead.\nfunc (*HelloReply) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_helloworld_helloworld_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *HelloReply) GetMessage() string {\n\tif x != nil {\n\t\treturn x.Message\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_helloworld_helloworld_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_helloworld_helloworld_proto_rawDesc = []byte{\n\t0x0a, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2f, 0x68,\n\t0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,\n\t0x29, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,\n\t0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x04, 0x0a, 0x0c, 0x48, 0x65, 0x6c,\n\t0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,\n\t0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a,\n\t0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x72,\n\t0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x18,\n\t0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x52, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x09,\n\t0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64,\n\t0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x12, 0x34, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6c,\n\t0x56, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x12, 0x37,\n\t0x0a, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x62,\n\t0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32,\n\t0x56, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33,\n\t0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,\n\t0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x18, 0x08, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08,\n\t0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x74,\n\t0x36, 0x34, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56,\n\t0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36,\n\t0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61,\n\t0x6c, 0x22, 0x26, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,\n\t0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x99, 0x03, 0x0a, 0x07, 0x47, 0x72,\n\t0x65, 0x65, 0x74, 0x65, 0x72, 0x12, 0x8d, 0x03, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c,\n\t0x6c, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48,\n\t0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x68, 0x65, 0x6c,\n\t0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70,\n\t0x6c, 0x79, 0x22, 0x90, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x89, 0x02, 0x5a, 0x16, 0x12, 0x14,\n\t0x2f, 0x73, 0x61, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x73, 0x74, 0x72,\n\t0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x66, 0x6c, 0x6f,\n\t0x61, 0x74, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x7d,\n\t0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x76,\n\t0x61, 0x6c, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x18,\n\t0x12, 0x16, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x76, 0x61, 0x6c, 0x2f, 0x7b,\n\t0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79,\n\t0x2f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73,\n\t0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74,\n\t0x33, 0x32, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d,\n\t0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76,\n\t0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a,\n\t0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f,\n\t0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73,\n\t0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69,\n\t0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x12, 0x0b, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x7b,\n\t0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,\n\t0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74,\n\t0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f,\n\t0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x62,\n\t0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_helloworld_helloworld_proto_rawDescOnce sync.Once\n\tfile_examples_internal_helloworld_helloworld_proto_rawDescData = file_examples_internal_helloworld_helloworld_proto_rawDesc\n)\n\nfunc file_examples_internal_helloworld_helloworld_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_helloworld_helloworld_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_helloworld_helloworld_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_helloworld_helloworld_proto_rawDescData)\n\t})\n\treturn file_examples_internal_helloworld_helloworld_proto_rawDescData\n}\n\nvar file_examples_internal_helloworld_helloworld_proto_msgTypes = make([]protoimpl.MessageInfo, 2)\nvar file_examples_internal_helloworld_helloworld_proto_goTypes = []any{\n\t(*HelloRequest)(nil),           // 0: grpc.gateway.examples.internal.helloworld.HelloRequest\n\t(*HelloReply)(nil),             // 1: grpc.gateway.examples.internal.helloworld.HelloReply\n\t(*wrapperspb.StringValue)(nil), // 2: google.protobuf.StringValue\n\t(*wrapperspb.FloatValue)(nil),  // 3: google.protobuf.FloatValue\n\t(*wrapperspb.DoubleValue)(nil), // 4: google.protobuf.DoubleValue\n\t(*wrapperspb.BoolValue)(nil),   // 5: google.protobuf.BoolValue\n\t(*wrapperspb.BytesValue)(nil),  // 6: google.protobuf.BytesValue\n\t(*wrapperspb.Int32Value)(nil),  // 7: google.protobuf.Int32Value\n\t(*wrapperspb.UInt32Value)(nil), // 8: google.protobuf.UInt32Value\n\t(*wrapperspb.Int64Value)(nil),  // 9: google.protobuf.Int64Value\n\t(*wrapperspb.UInt64Value)(nil), // 10: google.protobuf.UInt64Value\n}\nvar file_examples_internal_helloworld_helloworld_proto_depIdxs = []int32{\n\t2,  // 0: grpc.gateway.examples.internal.helloworld.HelloRequest.strVal:type_name -> google.protobuf.StringValue\n\t3,  // 1: grpc.gateway.examples.internal.helloworld.HelloRequest.floatVal:type_name -> google.protobuf.FloatValue\n\t4,  // 2: grpc.gateway.examples.internal.helloworld.HelloRequest.doubleVal:type_name -> google.protobuf.DoubleValue\n\t5,  // 3: grpc.gateway.examples.internal.helloworld.HelloRequest.boolVal:type_name -> google.protobuf.BoolValue\n\t6,  // 4: grpc.gateway.examples.internal.helloworld.HelloRequest.bytesVal:type_name -> google.protobuf.BytesValue\n\t7,  // 5: grpc.gateway.examples.internal.helloworld.HelloRequest.int32Val:type_name -> google.protobuf.Int32Value\n\t8,  // 6: grpc.gateway.examples.internal.helloworld.HelloRequest.uint32Val:type_name -> google.protobuf.UInt32Value\n\t9,  // 7: grpc.gateway.examples.internal.helloworld.HelloRequest.int64Val:type_name -> google.protobuf.Int64Value\n\t10, // 8: grpc.gateway.examples.internal.helloworld.HelloRequest.uint64Val:type_name -> google.protobuf.UInt64Value\n\t0,  // 9: grpc.gateway.examples.internal.helloworld.Greeter.SayHello:input_type -> grpc.gateway.examples.internal.helloworld.HelloRequest\n\t1,  // 10: grpc.gateway.examples.internal.helloworld.Greeter.SayHello:output_type -> grpc.gateway.examples.internal.helloworld.HelloReply\n\t10, // [10:11] is the sub-list for method output_type\n\t9,  // [9:10] is the sub-list for method input_type\n\t9,  // [9:9] is the sub-list for extension type_name\n\t9,  // [9:9] is the sub-list for extension extendee\n\t0,  // [0:9] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_helloworld_helloworld_proto_init() }\nfunc file_examples_internal_helloworld_helloworld_proto_init() {\n\tif File_examples_internal_helloworld_helloworld_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_helloworld_helloworld_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   2,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_helloworld_helloworld_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_helloworld_helloworld_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_helloworld_helloworld_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_helloworld_helloworld_proto = out.File\n\tfile_examples_internal_helloworld_helloworld_proto_rawDesc = nil\n\tfile_examples_internal_helloworld_helloworld_proto_goTypes = nil\n\tfile_examples_internal_helloworld_helloworld_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/helloworld/helloworld.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/helloworld/helloworld.proto\n\n/*\nPackage helloworld is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage helloworld\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_Greeter_SayHello_0 = &utilities.DoubleArray{Encoding: map[string]int{\"name\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"name\")\n\t}\n\tprotoReq.Name, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"name\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"name\")\n\t}\n\tprotoReq.Name, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"name\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_1 = &utilities.DoubleArray{Encoding: map[string]int{\"strVal\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"strVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"strVal\")\n\t}\n\tprotoReq.StrVal, err = runtime.StringValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"strVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"strVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"strVal\")\n\t}\n\tprotoReq.StrVal, err = runtime.StringValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"strVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_2 = &utilities.DoubleArray{Encoding: map[string]int{\"floatVal\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"floatVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"floatVal\")\n\t}\n\tprotoReq.FloatVal, err = runtime.FloatValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"floatVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"floatVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"floatVal\")\n\t}\n\tprotoReq.FloatVal, err = runtime.FloatValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"floatVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_3 = &utilities.DoubleArray{Encoding: map[string]int{\"doubleVal\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"doubleVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"doubleVal\")\n\t}\n\tprotoReq.DoubleVal, err = runtime.DoubleValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"doubleVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_3); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"doubleVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"doubleVal\")\n\t}\n\tprotoReq.DoubleVal, err = runtime.DoubleValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"doubleVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_3); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_4 = &utilities.DoubleArray{Encoding: map[string]int{\"boolVal\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"boolVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"boolVal\")\n\t}\n\tprotoReq.BoolVal, err = runtime.BoolValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"boolVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"boolVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"boolVal\")\n\t}\n\tprotoReq.BoolVal, err = runtime.BoolValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"boolVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_5 = &utilities.DoubleArray{Encoding: map[string]int{\"bytesVal\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"bytesVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"bytesVal\")\n\t}\n\tprotoReq.BytesVal, err = runtime.BytesValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"bytesVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_5); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"bytesVal\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"bytesVal\")\n\t}\n\tprotoReq.BytesVal, err = runtime.BytesValue(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"bytesVal\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_5); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_6 = &utilities.DoubleArray{Encoding: map[string]int{\"int32Val\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"int32Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int32Val\")\n\t}\n\tprotoReq.Int32Val, err = runtime.Int32Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int32Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_6); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"int32Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int32Val\")\n\t}\n\tprotoReq.Int32Val, err = runtime.Int32Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int32Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_6); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_7 = &utilities.DoubleArray{Encoding: map[string]int{\"uint32Val\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uint32Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint32Val\")\n\t}\n\tprotoReq.Uint32Val, err = runtime.UInt32Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint32Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_7); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uint32Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint32Val\")\n\t}\n\tprotoReq.Uint32Val, err = runtime.UInt32Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint32Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_7); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_8 = &utilities.DoubleArray{Encoding: map[string]int{\"int64Val\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"int64Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int64Val\")\n\t}\n\tprotoReq.Int64Val, err = runtime.Int64Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int64Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_8); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"int64Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int64Val\")\n\t}\n\tprotoReq.Int64Val, err = runtime.Int64Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int64Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_8); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Greeter_SayHello_9 = &utilities.DoubleArray{Encoding: map[string]int{\"uint64Val\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uint64Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint64Val\")\n\t}\n\tprotoReq.Uint64Val, err = runtime.UInt64Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint64Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_9); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq HelloRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uint64Val\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint64Val\")\n\t}\n\tprotoReq.Uint64Val, err = runtime.UInt64Value(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint64Val\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_9); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.SayHello(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterGreeterHandlerServer registers the http handlers for service Greeter to \"mux\".\n// UnaryRPC     :call GreeterServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGreeterHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GreeterServer) error {\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/{name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/strval/{strVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/floatval/{floatVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_2(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/doubleval/{doubleVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_3(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/boolval/{boolVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_4(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/bytesval/{bytesVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_5(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/int32val/{int32Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_6(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_7, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/uint32val/{uint32Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_7(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_7(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_8, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/int64val/{int64Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_8(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_8(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_9, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/uint64val/{uint64Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Greeter_SayHello_9(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_9(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterGreeterHandlerFromEndpoint is same as RegisterGreeterHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterGreeterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterGreeterHandler(ctx, mux, conn)\n}\n\n// RegisterGreeterHandler registers the http handlers for service Greeter to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterGreeterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterGreeterHandlerClient(ctx, mux, NewGreeterClient(conn))\n}\n\n// RegisterGreeterHandlerClient registers the http handlers for service Greeter\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"GreeterClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"GreeterClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"GreeterClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GreeterClient) error {\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/{name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/strval/{strVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/floatval/{floatVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/doubleval/{doubleVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_3(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/boolval/{boolVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_4(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/bytesval/{bytesVal}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_5(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/int32val/{int32Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_6(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_7, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/uint32val/{uint32Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_7(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_7(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_8, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/int64val/{int64Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_8(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_8(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_Greeter_SayHello_9, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\", runtime.WithHTTPPathPattern(\"/say/uint64val/{uint64Val}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Greeter_SayHello_9(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Greeter_SayHello_9(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{\"say\", \"name\"}, \"\"))\n\tpattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"strval\", \"strVal\"}, \"\"))\n\tpattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"floatval\", \"floatVal\"}, \"\"))\n\tpattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"doubleval\", \"doubleVal\"}, \"\"))\n\tpattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"boolval\", \"boolVal\"}, \"\"))\n\tpattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"bytesval\", \"bytesVal\"}, \"\"))\n\tpattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"int32val\", \"int32Val\"}, \"\"))\n\tpattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"uint32val\", \"uint32Val\"}, \"\"))\n\tpattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"int64val\", \"int64Val\"}, \"\"))\n\tpattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"say\", \"uint64val\", \"uint64Val\"}, \"\"))\n)\n\nvar (\n\tforward_Greeter_SayHello_0 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_1 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_2 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_3 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_4 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_5 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_6 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_7 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_8 = runtime.ForwardResponseMessage\n\tforward_Greeter_SayHello_9 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/helloworld/helloworld.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.helloworld;\n\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/wrappers.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld\";\n\nservice Greeter {\n  rpc SayHello(HelloRequest) returns (HelloReply) {\n    option (google.api.http) = {\n      get: \"/say/{name}\"\n      additional_bindings: {get: \"/say/strval/{strVal}\"}\n      additional_bindings: {get: \"/say/floatval/{floatVal}\"}\n      additional_bindings: {get: \"/say/doubleval/{doubleVal}\"}\n      additional_bindings: {get: \"/say/boolval/{boolVal}\"}\n      additional_bindings: {get: \"/say/bytesval/{bytesVal}\"}\n      additional_bindings: {get: \"/say/int32val/{int32Val}\"}\n      additional_bindings: {get: \"/say/uint32val/{uint32Val}\"}\n      additional_bindings: {get: \"/say/int64val/{int64Val}\"}\n      additional_bindings: {get: \"/say/uint64val/{uint64Val}\"}\n    };\n  }\n}\n\nmessage HelloRequest {\n  string name = 1;\n  google.protobuf.StringValue strVal = 2;\n  google.protobuf.FloatValue floatVal = 3;\n  google.protobuf.DoubleValue doubleVal = 4;\n  google.protobuf.BoolValue boolVal = 5;\n  google.protobuf.BytesValue bytesVal = 6;\n  google.protobuf.Int32Value int32Val = 7;\n  google.protobuf.UInt32Value uint32Val = 8;\n  google.protobuf.Int64Value int64Val = 9;\n  google.protobuf.UInt64Value uint64Val = 10;\n}\n\nmessage HelloReply {\n  string message = 1;\n}\n"
  },
  {
    "path": "examples/internal/helloworld/helloworld.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/helloworld/helloworld.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"Greeter\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/say/boolval/{boolVal}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello5\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/bytesval/{bytesVal}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello6\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/doubleval/{doubleVal}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello4\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/floatval/{floatVal}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello3\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/int32val/{int32Val}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello7\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/int64val/{int64Val}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello9\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/strval/{strVal}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"strVal\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/uint32val/{uint32Val}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello8\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/uint64val/{uint64Val}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello10\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    },\n    \"/say/{name}\": {\n      \"get\": {\n        \"operationId\": \"Greeter_SayHello\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/helloworldHelloReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"strVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"floatVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          {\n            \"name\": \"doubleVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"boolVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesVal\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"int32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"uint32Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        ],\n        \"tags\": [\n          \"Greeter\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"helloworldHelloReply\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"message\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/helloworld/helloworld_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/helloworld/helloworld.proto\n\npackage helloworld\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tGreeter_SayHello_FullMethodName = \"/grpc.gateway.examples.internal.helloworld.Greeter/SayHello\"\n)\n\n// GreeterClient is the client API for Greeter service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype GreeterClient interface {\n\tSayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error)\n}\n\ntype greeterClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {\n\treturn &greeterClient{cc}\n}\n\nfunc (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(HelloReply)\n\terr := c.cc.Invoke(ctx, Greeter_SayHello_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// GreeterServer is the server API for Greeter service.\n// All implementations should embed UnimplementedGreeterServer\n// for forward compatibility.\ntype GreeterServer interface {\n\tSayHello(context.Context, *HelloRequest) (*HelloReply, error)\n}\n\n// UnimplementedGreeterServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedGreeterServer struct{}\n\nfunc (UnimplementedGreeterServer) SayHello(context.Context, *HelloRequest) (*HelloReply, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method SayHello not implemented\")\n}\nfunc (UnimplementedGreeterServer) testEmbeddedByValue() {}\n\n// UnsafeGreeterServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to GreeterServer will\n// result in compilation errors.\ntype UnsafeGreeterServer interface {\n\tmustEmbedUnimplementedGreeterServer()\n}\n\nfunc RegisterGreeterServer(s grpc.ServiceRegistrar, srv GreeterServer) {\n\t// If the following call pancis, it indicates UnimplementedGreeterServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&Greeter_ServiceDesc, srv)\n}\n\nfunc _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(HelloRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(GreeterServer).SayHello(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: Greeter_SayHello_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// Greeter_ServiceDesc is the grpc.ServiceDesc for Greeter service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar Greeter_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.helloworld.Greeter\",\n\tHandlerType: (*GreeterServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"SayHello\",\n\t\t\tHandler:    _Greeter_SayHello_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/helloworld/helloworld.proto\",\n}\n"
  },
  {
    "path": "examples/internal/integration/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_test\")\n\ngo_test(\n    name = \"integration_test\",\n    srcs = [\n        \"client_test.go\",\n        \"integration_test.go\",\n        \"main_test.go\",\n    ],\n    deps = [\n        \"//examples/internal/clients/abe\",\n        \"//examples/internal/clients/echo\",\n        \"//examples/internal/clients/unannotatedecho\",\n        \"//examples/internal/gateway\",\n        \"//examples/internal/proto/examplepb\",\n        \"//examples/internal/proto/pathenum\",\n        \"//examples/internal/proto/sub\",\n        \"//examples/internal/server\",\n        \"//runtime\",\n        \"@com_github_google_go_cmp//cmp\",\n        \"@com_github_rogpeppe_fastuuid//:fastuuid\",\n        \"@org_golang_google_genproto_googleapis_rpc//status\",\n        \"@org_golang_google_grpc//codes\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_protobuf//encoding/protojson\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//testing/protocmp\",\n        \"@org_golang_google_protobuf//types/known/emptypb\",\n        \"@org_golang_google_protobuf//types/known/fieldmaskpb\",\n        \"@org_golang_google_protobuf//types/known/structpb\",\n    ],\n)\n"
  },
  {
    "path": "examples/internal/integration/client_test.go",
    "content": "package integration_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/abe\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/echo\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/unannotatedecho\"\n\t\"github.com/rogpeppe/fastuuid\"\n)\n\nvar uuidgen = fastuuid.MustNewGenerator()\n\nfunc TestEchoClient(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tcfg := echo.NewConfiguration()\n\tcfg.BasePath = \"http://localhost:8088\"\n\n\tcl := echo.NewAPIClient(cfg)\n\tresp, _, err := cl.EchoServiceApi.EchoServiceEcho(context.Background(), \"foo\", nil)\n\tif err != nil {\n\t\tt.Errorf(`cl.EchoServiceApi.Echo(\"foo\") failed with %v; want success`, err)\n\t}\n\tif got, want := resp.Id, \"foo\"; got != want {\n\t\tt.Errorf(\"resp.Id = %q; want %q\", got, want)\n\t}\n}\n\nfunc TestEchoBodyClient(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tcfg := echo.NewConfiguration()\n\tcfg.BasePath = \"http://localhost:8088\"\n\n\tcl := echo.NewAPIClient(cfg)\n\treq := echo.ExamplepbSimpleMessage{Id: \"foo\"}\n\tresp, _, err := cl.EchoServiceApi.EchoServiceEchoBody(context.Background(), req)\n\tif err != nil {\n\t\tt.Errorf(\"cl.EchoBody(%#v) failed with %v; want success\", req, err)\n\t}\n\tif got, want := resp.Id, \"foo\"; got != want {\n\t\tt.Errorf(\"resp.Id = %q; want %q\", got, want)\n\t}\n}\n\nfunc TestEchoBody2Client(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tcfg := echo.NewConfiguration()\n\tcfg.BasePath = \"http://localhost:8088\"\n\n\tcl := echo.NewAPIClient(cfg)\n\treq := echo.ExamplepbEmbedded{Note: \"note\"}\n\tresp, _, err := cl.EchoServiceApi.EchoServiceEchoBody2(context.Background(), \"foo\", req, nil)\n\tif err != nil {\n\t\tt.Errorf(\"cl.EchoBody(%#v) failed with %v; want success\", req, err)\n\t}\n\tif got, want := resp.Id, \"foo\"; got != want {\n\t\tt.Errorf(\"resp.Id = %q; want %q\", got, want)\n\t}\n}\n\nfunc TestAbitOfEverythingClient(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tcfg := abe.NewConfiguration()\n\tcfg.BasePath = \"http://localhost:8088\"\n\n\tcl := abe.NewAPIClient(cfg)\n\n\ttestABEClientCreate(t, cl)\n}\n\nfunc testABEClientCreate(t *testing.T, cl *abe.APIClient) {\n\tenumZero := abe.ZERO_ExamplepbNumericEnum\n\tenumPath := abe.ABC_PathenumPathEnum\n\tmessagePath := abe.JKL_MessagePathEnumNestedPathEnum\n\n\twant := &abe.ExamplepbABitOfEverything{\n\t\tFloatValue:                          1.5,\n\t\tDoubleValue:                         2.5,\n\t\tInt64Value:                          \"4294967296\",\n\t\tUint64Value:                         \"9223372036854775807\",\n\t\tInt32Value:                          -2147483648,\n\t\tFixed64Value:                        \"9223372036854775807\",\n\t\tFixed32Value:                        4294967295,\n\t\tBoolValue:                           true,\n\t\tStringValue:                         \"strprefix/foo\",\n\t\tUint32Value:                         4294967295,\n\t\tSfixed32Value:                       2147483647,\n\t\tSfixed64Value:                       \"-4611686018427387904\",\n\t\tSint32Value:                         2147483647,\n\t\tSint64Value:                         \"4611686018427387903\",\n\t\tNonConventionalNameValue:            \"camelCase\",\n\t\tEnumValue:                           &enumZero,\n\t\tPathEnumValue:                       &enumPath,\n\t\tNestedPathEnumValue:                 &messagePath,\n\t\tEnumValueAnnotation:                 &enumZero,\n\t\tUuid:                                fmt.Sprintf(\"%x\", uuidgen.Next()),\n\t\tRequiredFieldBehaviorJsonNameCustom: \"test\",\n\t\tRequiredFieldSchemaJsonNameCustom:   \"test\",\n\t}\n\tresp, _, err := cl.ABitOfEverythingApi.ABitOfEverythingServiceCreate(\n\t\tcontext.Background(),\n\t\twant.FloatValue,\n\t\twant.DoubleValue,\n\t\twant.Int64Value,\n\t\twant.Uint64Value,\n\t\twant.Int32Value,\n\t\twant.Fixed64Value,\n\t\twant.Fixed32Value,\n\t\twant.BoolValue,\n\t\twant.StringValue,\n\t\twant.Uint32Value,\n\t\twant.Sfixed32Value,\n\t\twant.Sfixed64Value,\n\t\twant.Sint32Value,\n\t\twant.Sint64Value,\n\t\twant.NonConventionalNameValue,\n\t\twant.EnumValue.String(),\n\t\twant.PathEnumValue.String(),\n\t\twant.NestedPathEnumValue.String(),\n\t\twant.EnumValueAnnotation.String(),\n\t\twant.Uuid,\n\t\twant.RequiredStringViaFieldBehaviorAnnotation,\n\t\twant.StringValue,\n\t\twant.StringValue,\n\t\twant.RequiredFieldBehaviorJsonNameCustom,\n\t\twant.RequiredFieldSchemaJsonNameCustom,\n\t\tnil,\n\t)\n\tif err != nil {\n\t\tt.Fatalf(\"cl.Create(%#v) failed with %v; want success\", want, err)\n\t}\n\tif resp.Uuid == \"\" {\n\t\tt.Errorf(\"resp.Uuid is empty; want not empty\")\n\t}\n\tresp.Uuid = \"\"\n\n\tif resp.FloatValue != want.FloatValue {\n\t\tt.Error(\"float\")\n\t}\n\tif resp.DoubleValue != want.DoubleValue {\n\t\tt.Error(\"double\")\n\t}\n\tif resp.Int64Value != want.Int64Value {\n\t\tt.Error(\"double\")\n\t}\n\tif resp.Uint64Value != want.Uint64Value {\n\t\tt.Error(\"double\")\n\t}\n\tif resp.Int32Value != want.Int32Value {\n\t\tt.Error(\"double\")\n\t}\n\tif resp.Fixed32Value != want.Fixed32Value {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.Fixed64Value != want.Fixed64Value {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.BoolValue != want.BoolValue {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.StringValue != want.StringValue {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.Uint32Value != want.Uint32Value {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.Sfixed32Value != want.Sfixed32Value {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.Sfixed64Value != want.Sfixed64Value {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.Sint32Value != want.Sint32Value {\n\t\tt.Error(\"bool\")\n\t}\n\tif resp.Sint64Value != want.Sint64Value {\n\t\tt.Error(\"enum\")\n\t}\n\tif resp.NonConventionalNameValue != want.NonConventionalNameValue {\n\t\tt.Error(\"enum\")\n\t}\n\tif resp.EnumValue.String() != want.EnumValue.String() {\n\t\tt.Error(\"enum\")\n\t}\n\tif resp.PathEnumValue.String() != want.PathEnumValue.String() {\n\t\tt.Error(\"path enum\")\n\t}\n\tif resp.NestedPathEnumValue.String() != want.NestedPathEnumValue.String() {\n\t\tt.Error(\"nested path enum\")\n\t}\n\tif resp.NestedPathEnumValue.String() != want.NestedPathEnumValue.String() {\n\t\tt.Error(\"nested path enum\")\n\t}\n}\n\nfunc TestUnannotatedEchoClient(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tcfg := unannotatedecho.NewConfiguration()\n\tcfg.BasePath = \"http://localhost:8088\"\n\n\tcl := unannotatedecho.NewAPIClient(cfg)\n\n\tresp, _, err := cl.UnannotatedEchoServiceApi.UnannotatedEchoServiceEcho(context.Background(), \"foo\", \"1\", nil)\n\tif err != nil {\n\t\tt.Errorf(`cl.Echo(\"foo\") failed with %v; want success`, err)\n\t}\n\tif got, want := resp.Id, \"foo\"; got != want {\n\t\tt.Errorf(\"resp.Id = %q; want %q\", got, want)\n\t}\n}\n\nfunc TestUnannotatedEchoBodyClient(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tcfg := unannotatedecho.NewConfiguration()\n\tcfg.BasePath = \"http://localhost:8088\"\n\n\tcl := unannotatedecho.NewAPIClient(cfg)\n\n\treq := unannotatedecho.ExamplepbUnannotatedSimpleMessage{Id: \"foo\", Num: \"1\"}\n\tresp, _, err := cl.UnannotatedEchoServiceApi.UnannotatedEchoServiceEchoBody(context.Background(), req)\n\tif err != nil {\n\t\tt.Errorf(\"cl.EchoBody(%#v) failed with %v; want success\", req, err)\n\t}\n\tif got, want := resp.Id, \"foo\"; got != want {\n\t\tt.Errorf(\"resp.Id = %q; want %q\", got, want)\n\t}\n}\n"
  },
  {
    "path": "examples/internal/integration/integration_test.go",
    "content": "package integration_test\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\tstatuspb \"google.golang.org/genproto/googleapis/rpc/status\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/testing/protocmp\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\t\"google.golang.org/protobuf/types/known/structpb\"\n)\n\nvar marshaler = &runtime.JSONPb{}\n\nfunc TestEcho(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tfor _, apiPrefix := range []string{\"v1\", \"v2\"} {\n\t\tt.Run(apiPrefix, func(t *testing.T) {\n\t\t\ttestEcho(t, 8088, apiPrefix, \"application/json\")\n\t\t\ttestEchoOneof(t, 8088, apiPrefix, \"application/json\")\n\t\t\ttestEchoOneof1(t, 8088, apiPrefix, \"application/json\")\n\t\t\ttestEchoOneof2(t, 8088, apiPrefix, \"application/json\")\n\t\t\ttestEchoPathParamOverwrite(t, 8088)\n\t\t\ttestEchoNested(t, 8088)\n\t\t\ttestEchoNestedOverride(t, 8088)\n\t\t\ttestEchoBody(t, 8088, apiPrefix, true)\n\t\t\ttestEchoBody(t, 8088, apiPrefix, false)\n\t\t\t// Use SendHeader/SetTrailer without gRPC server https://github.com/grpc-ecosystem/grpc-gateway/issues/517#issuecomment-684625645\n\t\t\ttestEchoBody(t, 8089, apiPrefix, true)\n\t\t\ttestEchoBody(t, 8089, apiPrefix, false)\n\t\t\ttestEchoWithNonASCIIHeaderValues(t, 8088, apiPrefix)\n\t\t\ttestEchoWithInvalidHeaderKey(t, 8088, apiPrefix)\n\t\t})\n\t}\n}\n\nfunc TestEchoUnauthorized(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\tapiURL := \"http://localhost:8088/v1/example/echo_unauthorized\"\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\tmsg := new(statuspb.Status)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusUnauthorized; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n\n\tif value := resp.Header.Get(\"WWW-Authenticate\"); value == \"\" {\n\t\tt.Errorf(\"WWW-Authenticate header should not be empty\")\n\t}\n}\n\nfunc TestEchoPatch(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tsent := &examplepb.DynamicMessage{\n\t\tStructField: &structpb.Struct{Fields: map[string]*structpb.Value{\n\t\t\t\"struct_key\": {Kind: &structpb.Value_StructValue{\n\t\t\t\tStructValue: &structpb.Struct{Fields: map[string]*structpb.Value{\n\t\t\t\t\t\"layered_struct_key\": {Kind: &structpb.Value_StringValue{StringValue: \"struct_val\"}},\n\t\t\t\t}},\n\t\t\t}},\n\t\t}},\n\t\tValueField: &structpb.Value{Kind: &structpb.Value_StructValue{\n\t\t\tStructValue: &structpb.Struct{Fields: map[string]*structpb.Value{\n\t\t\t\t\"value_struct_key\": {Kind: &structpb.Value_StringValue{StringValue: \"value_struct_val\"}},\n\t\t\t}},\n\t\t}},\n\t}\n\tpayload, err := protojson.MarshalOptions{UseProtoNames: true}.Marshal(sent)\n\tif err != nil {\n\t\tt.Fatalf(\"marshaler.Marshal(%#v) failed with %v; want success\", payload, err)\n\t}\n\n\tapiURL := \"http://localhost:8088/v1/example/echo_patch\"\n\treq, err := http.NewRequest(\"PATCH\", apiURL, bytes.NewReader(payload))\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest(PATCH, %q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%#v) failed with %v; want success\", req, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tvar received examplepb.DynamicMessageUpdate\n\tif err := marshaler.Unmarshal(buf, &received); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif diff := cmp.Diff(received.Body, sent, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n\tif diff := cmp.Diff(received.UpdateMask, fieldmaskpb.FieldMask{Paths: []string{\n\t\t\"struct_field.struct_key.layered_struct_key\", \"value_field.value_struct_key\",\n\t}}, protocmp.Transform(), protocmp.SortRepeatedFields(received.UpdateMask, \"paths\")); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestForwardResponseOption(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tport := 7079\n\tgo func() {\n\t\tif err := runGateway(\n\t\t\tctx,\n\t\t\tfmt.Sprintf(\":%d\", port),\n\t\t\truntime.WithForwardResponseOption(\n\t\t\t\tfunc(_ context.Context, w http.ResponseWriter, _ proto.Message) error {\n\t\t\t\t\tw.Header().Set(\"Content-Type\", \"application/vnd.docker.plugins.v1.1+json\")\n\t\t\t\t\treturn nil\n\t\t\t\t},\n\t\t\t),\n\t\t); err != nil {\n\t\t\tt.Errorf(\"runGateway() failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\t}()\n\tif err := waitForGateway(ctx, uint16(port)); err != nil {\n\t\tt.Errorf(\"waitForGateway(ctx, %d) failed with %v; want success\", port, err)\n\t}\n\ttestEcho(t, port, \"v1\", \"application/vnd.docker.plugins.v1.1+json\")\n}\n\nfunc TestForwardResponseOptionHTTPPathPattern(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tport := 7080\n\tgo func() {\n\t\tif err := runGateway(\n\t\t\tctx,\n\t\t\tfmt.Sprintf(\":%d\", port),\n\t\t\truntime.WithForwardResponseOption(\n\t\t\t\tfunc(ctx context.Context, w http.ResponseWriter, _ proto.Message) error {\n\t\t\t\t\tpath, _ := runtime.HTTPPathPattern(ctx)\n\t\t\t\t\tw.Header().Set(\"Content-Type\", path)\n\t\t\t\t\treturn nil\n\t\t\t\t},\n\t\t\t),\n\t\t); err != nil {\n\t\t\tt.Errorf(\"runGateway() failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\t}()\n\tif err := waitForGateway(ctx, uint16(port)); err != nil {\n\t\tt.Errorf(\"waitForGateway(ctx, %d) failed with %v; want success\", port, err)\n\t}\n\ttestEcho(t, port, \"v1\", \"/v1/example/echo/{id}\")\n}\n\nfunc testEcho(t *testing.T, port int, apiPrefix string, contentType string) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/%s/example/echo/myid\", port, apiPrefix)\n\tresp, err := http.Post(apiURL, \"application/json\", strings.NewReader(\"{}\"))\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.Id, \"myid\"; got != want {\n\t\tt.Errorf(\"msg.Id = %q; want %q\", got, want)\n\t}\n\n\tif value := resp.Header.Get(\"Content-Type\"); value != contentType {\n\t\tt.Errorf(\"Content-Type was %s, wanted %s\", value, contentType)\n\t}\n}\n\nfunc testEchoOneof(t *testing.T, port int, apiPrefix string, contentType string) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/%s/example/echo/myid/10/golang\", port, apiPrefix)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.GetLang(), \"golang\"; got != want {\n\t\tt.Errorf(\"msg.GetLang() = %q; want %q\", got, want)\n\t}\n\n\tif value := resp.Header.Get(\"Content-Type\"); value != contentType {\n\t\tt.Errorf(\"Content-Type was %s, wanted %s\", value, contentType)\n\t}\n}\n\nfunc testEchoOneof1(t *testing.T, port int, apiPrefix string, contentType string) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/%s/example/echo1/myid/10/golang\", port, apiPrefix)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.GetStatus().GetNote(), \"golang\"; got != want {\n\t\tt.Errorf(\"msg.GetStatus().GetNote() = %q; want %q\", got, want)\n\t}\n\n\tif value := resp.Header.Get(\"Content-Type\"); value != contentType {\n\t\tt.Errorf(\"Content-Type was %s, wanted %s\", value, contentType)\n\t}\n}\n\nfunc testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/%s/example/echo2/golang\", port, apiPrefix)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.GetNo().GetNote(), \"golang\"; got != want {\n\t\tt.Errorf(\"msg.GetNo().GetNote() = %q; want %q\", got, want)\n\t}\n\n\tif value := resp.Header.Get(\"Content-Type\"); value != contentType {\n\t\tt.Errorf(\"Content-Type was %s, wanted %s\", value, contentType)\n\t}\n}\n\nfunc testEchoPathParamOverwrite(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/echo/resource/my_resource_id?resourceId=bad_resource_id\", port)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.GetResourceId(), \"my_resource_id\"; got != want {\n\t\tt.Errorf(\"msg.GetResourceId() = %q; want %q\", got, want)\n\t}\n}\n\nfunc testEchoNested(t *testing.T, port int) {\n\tresp, err := http.Get(fmt.Sprintf(\"http://localhost:%d/v1/example/echo/nested/my_nested_id?n_id.val=foo\", port))\n\tif err != nil {\n\t\tt.Errorf(\"http.Get() failed with %v; want success\", err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.NId.Val, \"foo\"; got != want {\n\t\tt.Errorf(\"msg.NId.Val = %q; want %q\", got, want)\n\t}\n}\n\nfunc testEchoNestedOverride(t *testing.T, port int) {\n\tresp, err := http.Get(fmt.Sprintf(\"http://localhost:%d/v1/example/echo/nested/my_nested_id?nId.nId=bad_id\", port))\n\tif err != nil {\n\t\tt.Errorf(\"http.Get() failed with %v; want success\", err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.NId.NId, \"my_nested_id\"; got != want {\n\t\tt.Errorf(\"msg.NId.NId = %q; want %q\", got, want)\n\t}\n}\n\nfunc testEchoBody(t *testing.T, port int, apiPrefix string, useTrailers bool) {\n\tsent := examplepb.UnannotatedSimpleMessage{Id: \"example\"}\n\tpayload, err := marshaler.Marshal(&sent)\n\tif err != nil {\n\t\tt.Fatalf(\"marshaler.Marshal(%#v) failed with %v; want success\", payload, err)\n\t}\n\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/%s/example/echo_body\", port, apiPrefix)\n\n\treq, err := http.NewRequest(\"POST\", apiURL, bytes.NewReader(payload))\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\tif useTrailers {\n\t\treq.Header.Set(\"TE\", \"trailers\")\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"client.Do(%v) failed with %v; want success\", req, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tvar received examplepb.UnannotatedSimpleMessage\n\tif err := marshaler.Unmarshal(buf, &received); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif diff := cmp.Diff(&received, &sent, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n\n\tif got, want := resp.Header.Get(\"Grpc-Metadata-Foo\"), \"foo1\"; got != want {\n\t\tt.Errorf(\"Grpc-Metadata-Foo was %q, wanted %q\", got, want)\n\t}\n\tif got, want := resp.Header.Get(\"Grpc-Metadata-Bar\"), \"bar1\"; got != want {\n\t\tt.Errorf(\"Grpc-Metadata-Bar was %q, wanted %q\", got, want)\n\t}\n\n\twantedTrailers := map[bool]map[string]string{\n\t\ttrue: {\n\t\t\t\"Grpc-Trailer-Foo\": \"foo2\",\n\t\t\t\"Grpc-Trailer-Bar\": \"bar2\",\n\t\t},\n\t\tfalse: {},\n\t}\n\n\tfor trailer, want := range wantedTrailers[useTrailers] {\n\t\tif got := resp.Trailer.Get(trailer); got != want {\n\t\t\tt.Errorf(\"%s was %q, wanted %q\", trailer, got, want)\n\t\t}\n\t}\n}\n\nfunc TestABE(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\ttestABECreate(t, 8088)\n\ttestABECreateBody(t, 8088)\n\ttestABEBulkCreate(t, 8088, true)\n\ttestABEBulkCreate(t, 8088, false)\n\ttestABEBulkCreateWithError(t, 8088)\n\ttestABELookup(t, 8088)\n\ttestABELookupNotFound(t, 8088, true)\n\ttestABELookupNotFound(t, 8088, false)\n\ttestABEList(t, 8088)\n\ttestABEDownload(t, 8088)\n\ttestABEBulkEcho(t, 8088)\n\ttestABEBulkEchoZeroLength(t, 8088)\n\ttestAdditionalBindings(t, 8088)\n\ttestABERepeated(t, 8088)\n\ttestABEExists(t, 8088)\n\ttestABEExistsNotFound(t, 8088)\n\ttestABEOptions(t, 8088)\n\ttestABETrace(t, 8088)\n}\n\nfunc testABECreate(t *testing.T, port int) {\n\twant := &examplepb.ABitOfEverything{\n\t\tFloatValue:               1.5,\n\t\tDoubleValue:              2.5,\n\t\tInt64Value:               4294967296,\n\t\tUint64Value:              9223372036854775807,\n\t\tInt32Value:               -2147483648,\n\t\tFixed64Value:             9223372036854775807,\n\t\tFixed32Value:             4294967295,\n\t\tBoolValue:                true,\n\t\tStringValue:              \"strprefix/foo\",\n\t\tUint32Value:              4294967295,\n\t\tSfixed32Value:            2147483647,\n\t\tSfixed64Value:            -4611686018427387904,\n\t\tSint32Value:              2147483647,\n\t\tSint64Value:              4611686018427387903,\n\t\tNonConventionalNameValue: \"camelCase\",\n\t\tEnumValue:                examplepb.NumericEnum_ZERO,\n\t\tPathEnumValue:            pathenum.PathEnum_DEF,\n\t\tNestedPathEnumValue:      pathenum.MessagePathEnum_JKL,\n\t\tEnumValueAnnotation:      examplepb.NumericEnum_ONE,\n\t}\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s\", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation)\n\n\tresp, err := http.Post(apiURL, \"application/json\", strings.NewReader(\"{}\"))\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.ABitOfEverything)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif msg.Uuid == \"\" {\n\t\tt.Error(\"msg.Uuid is empty; want not empty\")\n\t}\n\tmsg.Uuid = \"\"\n\tif diff := cmp.Diff(msg, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc testABECreateBody(t *testing.T, port int) {\n\toptionalStrVal := \"optional-str\"\n\twant := &examplepb.ABitOfEverything{\n\t\tFloatValue:               1.5,\n\t\tDoubleValue:              2.5,\n\t\tInt64Value:               4294967296,\n\t\tUint64Value:              9223372036854775807,\n\t\tInt32Value:               -2147483648,\n\t\tFixed64Value:             9223372036854775807,\n\t\tFixed32Value:             4294967295,\n\t\tBoolValue:                true,\n\t\tStringValue:              \"strprefix/foo\",\n\t\tUint32Value:              4294967295,\n\t\tSfixed32Value:            2147483647,\n\t\tSfixed64Value:            -4611686018427387904,\n\t\tSint32Value:              2147483647,\n\t\tSint64Value:              4611686018427387903,\n\t\tNonConventionalNameValue: \"camelCase\",\n\t\tEnumValue:                examplepb.NumericEnum_ONE,\n\t\tPathEnumValue:            pathenum.PathEnum_ABC,\n\t\tNestedPathEnumValue:      pathenum.MessagePathEnum_GHI,\n\n\t\tNested: []*examplepb.ABitOfEverything_Nested{\n\t\t\t{\n\t\t\t\tName:   \"bar\",\n\t\t\t\tAmount: 10,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   \"baz\",\n\t\t\t\tAmount: 20,\n\t\t\t},\n\t\t},\n\t\tRepeatedStringValue: []string{\"a\", \"b\", \"c\"},\n\t\tOneofValue: &examplepb.ABitOfEverything_OneofString{\n\t\t\tOneofString: \"x\",\n\t\t},\n\t\tMapValue: map[string]examplepb.NumericEnum{\n\t\t\t\"a\": examplepb.NumericEnum_ONE,\n\t\t\t\"b\": examplepb.NumericEnum_ZERO,\n\t\t},\n\t\tMappedStringValue: map[string]string{\n\t\t\t\"a\": \"x\",\n\t\t\t\"b\": \"y\",\n\t\t},\n\t\tMappedNestedValue: map[string]*examplepb.ABitOfEverything_Nested{\n\t\t\t\"a\": {Name: \"x\", Amount: 1},\n\t\t\t\"b\": {Name: \"y\", Amount: 2},\n\t\t},\n\t\tRepeatedEnumAnnotation: []examplepb.NumericEnum{\n\t\t\texamplepb.NumericEnum_ONE,\n\t\t\texamplepb.NumericEnum_ZERO,\n\t\t},\n\t\tEnumValueAnnotation: examplepb.NumericEnum_ONE,\n\t\tRepeatedStringAnnotation: []string{\n\t\t\t\"a\",\n\t\t\t\"b\",\n\t\t},\n\t\tRepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{\n\t\t\t{\n\t\t\t\tName:   \"hoge\",\n\t\t\t\tAmount: 10,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   \"fuga\",\n\t\t\t\tAmount: 20,\n\t\t\t},\n\t\t},\n\t\tNestedAnnotation: &examplepb.ABitOfEverything_Nested{\n\t\t\tName:   \"hoge\",\n\t\t\tAmount: 10,\n\t\t},\n\t\tOptionalStringValue: &optionalStrVal,\n\t}\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything\", port)\n\tpayload, err := marshaler.Marshal(want)\n\tif err != nil {\n\t\tt.Fatalf(\"marshaler.Marshal(%#v) failed with %v; want success\", want, err)\n\t}\n\n\tresp, err := http.Post(apiURL, \"application/json\", bytes.NewReader(payload))\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.ABitOfEverything)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif msg.Uuid == \"\" {\n\t\tt.Error(\"msg.Uuid is empty; want not empty\")\n\t}\n\tmsg.Uuid = \"\"\n\tif diff := cmp.Diff(msg, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc testABEBulkCreate(t *testing.T, port int, useTrailers bool) {\n\tcount := 0\n\tr, w := io.Pipe()\n\tgo func(w io.WriteCloser) {\n\t\tdefer func() {\n\t\t\tif cerr := w.Close(); cerr != nil {\n\t\t\t\tt.Errorf(\"w.Close() failed with %v; want success\", cerr)\n\t\t\t}\n\t\t}()\n\t\tfor _, val := range []string{\n\t\t\t\"foo\", \"bar\", \"baz\", \"qux\", \"quux\",\n\t\t} {\n\t\t\tstrVal := fmt.Sprintf(\"strprefix/%s\", val)\n\t\t\twant := &examplepb.ABitOfEverything{\n\t\t\t\tFloatValue:               1.5,\n\t\t\t\tDoubleValue:              2.5,\n\t\t\t\tInt64Value:               4294967296,\n\t\t\t\tUint64Value:              9223372036854775807,\n\t\t\t\tInt32Value:               -2147483648,\n\t\t\t\tFixed64Value:             9223372036854775807,\n\t\t\t\tFixed32Value:             4294967295,\n\t\t\t\tBoolValue:                true,\n\t\t\t\tStringValue:              strVal,\n\t\t\t\tUint32Value:              4294967295,\n\t\t\t\tSfixed32Value:            2147483647,\n\t\t\t\tSfixed64Value:            -4611686018427387904,\n\t\t\t\tSint32Value:              2147483647,\n\t\t\t\tSint64Value:              4611686018427387903,\n\t\t\t\tNonConventionalNameValue: \"camelCase\",\n\t\t\t\tEnumValue:                examplepb.NumericEnum_ONE,\n\t\t\t\tPathEnumValue:            pathenum.PathEnum_ABC,\n\t\t\t\tNestedPathEnumValue:      pathenum.MessagePathEnum_GHI,\n\n\t\t\t\tNested: []*examplepb.ABitOfEverything_Nested{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   \"hoge\",\n\t\t\t\t\t\tAmount: 10,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   \"fuga\",\n\t\t\t\t\t\tAmount: 20,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tRepeatedEnumAnnotation: []examplepb.NumericEnum{\n\t\t\t\t\texamplepb.NumericEnum_ONE,\n\t\t\t\t\texamplepb.NumericEnum_ZERO,\n\t\t\t\t},\n\t\t\t\tEnumValueAnnotation: examplepb.NumericEnum_ONE,\n\t\t\t\tRepeatedStringAnnotation: []string{\n\t\t\t\t\t\"a\",\n\t\t\t\t\t\"b\",\n\t\t\t\t},\n\t\t\t\tRepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   \"hoge\",\n\t\t\t\t\t\tAmount: 10,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   \"fuga\",\n\t\t\t\t\t\tAmount: 20,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNestedAnnotation: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tName:   \"hoge\",\n\t\t\t\t\tAmount: 10,\n\t\t\t\t},\n\t\t\t\tOptionalStringValue: &strVal,\n\t\t\t}\n\t\t\tout, err := marshaler.Marshal(want)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"marshaler.Marshal(%#v, w) failed with %v; want success\", want, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif _, err := w.Write(out); err != nil {\n\t\t\t\tt.Errorf(\"w.Write() failed with %v; want success\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif _, err := io.WriteString(w, \"\\n\"); err != nil {\n\t\t\t\tt.Errorf(\"w.Write(%q) failed with %v; want success\", \"\\n\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcount++\n\t\t}\n\t}(w)\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/bulk\", port)\n\n\treq, err := http.NewRequest(\"POST\", apiURL, r)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tif useTrailers {\n\t\treq.Header.Set(\"TE\", \"trailers\")\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"client.Do(%v) failed with %v; want success\", req, err)\n\t\treturn\n\t}\n\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(emptypb.Empty)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\n\tif got, want := resp.Header.Get(\"Grpc-Metadata-Count\"), fmt.Sprintf(\"%d\", count); got != want {\n\t\tt.Errorf(\"Grpc-Metadata-Count was %q, wanted %q\", got, want)\n\t}\n\n\twantedTrailers := map[bool]map[string]string{\n\t\ttrue: {\n\t\t\t\"Grpc-Trailer-Foo\": \"foo2\",\n\t\t\t\"Grpc-Trailer-Bar\": \"bar2\",\n\t\t},\n\t\tfalse: {},\n\t}\n\n\tfor trailer, want := range wantedTrailers[useTrailers] {\n\t\tif got := resp.Trailer.Get(trailer); got != want {\n\t\t\tt.Errorf(\"%s was %q, wanted %q\", trailer, got, want)\n\t\t}\n\t}\n}\n\nfunc testABEBulkCreateWithError(t *testing.T, port int) {\n\tcount := 0\n\tr, w := io.Pipe()\n\tgo func(w io.WriteCloser) {\n\t\tdefer func() {\n\t\t\tif cerr := w.Close(); cerr != nil {\n\t\t\t\tt.Errorf(\"w.Close() failed with %v; want success\", cerr)\n\t\t\t}\n\t\t}()\n\t\tfor _, val := range []string{\n\t\t\t\"foo\", \"bar\", \"baz\", \"qux\", \"quux\",\n\t\t} {\n\t\t\ttime.Sleep(1 * time.Millisecond)\n\n\t\t\twant := &examplepb.ABitOfEverything{\n\t\t\t\tStringValue: fmt.Sprintf(\"strprefix/%s\", val),\n\t\t\t}\n\t\t\tout, err := marshaler.Marshal(want)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"marshaler.Marshal(%#v, w) failed with %v; want success\", want, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif _, err := w.Write(out); err != nil {\n\t\t\t\tt.Errorf(\"w.Write() failed with %v; want success\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif _, err := io.WriteString(w, \"\\n\"); err != nil {\n\t\t\t\tt.Errorf(\"w.Write(%q) failed with %v; want success\", \"\\n\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcount++\n\t\t}\n\t}(w)\n\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/bulk\", port)\n\trequest, err := http.NewRequest(\"POST\", apiURL, r)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequest(%q, %q, nil) failed with %v; want success\", \"POST\", apiURL, err)\n\t}\n\trequest.Header.Add(\"Grpc-Metadata-error\", \"some error\")\n\n\tresp, err := http.DefaultClient.Do(request)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusBadRequest; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(statuspb.Status)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Fatalf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t}\n}\n\nfunc testABELookup(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything\", port)\n\tcresp, err := http.Post(apiURL, \"application/json\", strings.NewReader(`\n\t\t{\"bool_value\": true, \"string_value\": \"strprefix/example\"}\n\t`))\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer cresp.Body.Close()\n\tbuf, err := io.ReadAll(cresp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(cresp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\tif got, want := cresp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t\treturn\n\t}\n\n\twant := new(examplepb.ABitOfEverything)\n\tif err := marshaler.Unmarshal(buf, want); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, want) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\n\tapiURL = fmt.Sprintf(\"%s/%s\", apiURL, want.Uuid)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tbuf, err = io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tmsg := new(examplepb.ABitOfEverything)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif diff := cmp.Diff(msg, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n\n\tif got, want := resp.Header.Get(\"Grpc-Metadata-Uuid\"), want.Uuid; got != want {\n\t\tt.Errorf(\"Grpc-Metadata-Uuid was %s, wanted %s\", got, want)\n\t}\n}\n\n// TestABEPatch demonstrates partially updating a resource.\n// First, we'll create an ABE resource with known values for string_value and int32_value\n// Then, issue a PATCH request updating only the string_value\n// Then, GET the resource and verify that string_value is changed, but int32_value isn't\nfunc TestABEPatch(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tport := 8088\n\n\t// create a record with a known string_value and int32_value\n\tuuid := postABE(t, port, &examplepb.ABitOfEverything{StringValue: \"strprefix/bar\", Int32Value: 32})\n\n\t// issue PATCH request, only updating string_value\n\treq, err := http.NewRequest(\n\t\thttp.MethodPatch,\n\t\tfmt.Sprintf(\"http://localhost:%d/v2/example/a_bit_of_everything/%s\", port, uuid),\n\t\tstrings.NewReader(`{\"string_value\": \"strprefix/foo\"}`),\n\t)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequest(PATCH) failed with %v; want success\", err)\n\t}\n\tpatchResp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to issue PATCH request: %v\", err)\n\t}\n\tif got, want := patchResp.StatusCode, http.StatusOK; got != want {\n\t\tif body, err := io.ReadAll(patchResp.Body); err != nil {\n\t\t\tt.Errorf(\"patchResp body couldn't be read: %v\", err)\n\t\t} else {\n\t\t\tt.Errorf(\"patchResp.StatusCode= %d; want %d resp: %v\", got, want, string(body))\n\t\t}\n\t}\n\n\t// issue GET request, verifying that string_value is changed and int32_value is not\n\tgetRestatuspbody := getABE(t, port, uuid)\n\tif got, want := getRestatuspbody.StringValue, \"strprefix/foo\"; got != want {\n\t\tt.Errorf(\"string_value= %q; want %q\", got, want)\n\t}\n\tif got, want := getRestatuspbody.Int32Value, int32(32); got != want {\n\t\tt.Errorf(\"int_32_value= %d; want %d\", got, want)\n\t}\n}\n\n// TestABEPatchBody demonstrates the ability to specify an update mask within the request body.\n// This binding does not use an automatically generated update_mask.\nfunc TestABEPatchBody(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tport := 8088\n\n\tfor _, tc := range []struct {\n\t\tname          string\n\t\toriginalValue *examplepb.ABitOfEverything\n\t\tinput         *examplepb.UpdateV2Request\n\t\twant          *examplepb.ABitOfEverything\n\t}{\n\t\t{\n\t\t\tname: \"with fieldmask provided\",\n\t\t\toriginalValue: &examplepb.ABitOfEverything{\n\t\t\t\tInt32Value:  42,\n\t\t\t\tStringValue: \"rabbit\",\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tName:   \"some value that will get overwritten\",\n\t\t\t\t\tAmount: 345,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinput: &examplepb.UpdateV2Request{\n\t\t\t\tAbe: &examplepb.ABitOfEverything{\n\t\t\t\t\tStringValue: \"some value that won't get updated because it's not in the field mask\",\n\t\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\t\tAmount: 456,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpdateMask: &fieldmaskpb.FieldMask{Paths: []string{\"single_nested\"}},\n\t\t\t},\n\t\t\twant: &examplepb.ABitOfEverything{\n\t\t\t\tInt32Value:  42,\n\t\t\t\tStringValue: \"rabbit\",\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tAmount: 456,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// N.B. This case passes the empty field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation.\n\t\t\tname: \"with empty fieldmask\",\n\t\t\toriginalValue: &examplepb.ABitOfEverything{\n\t\t\t\tInt32Value:  42,\n\t\t\t\tStringValue: \"some value that will get overwritten\",\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tName:   \"value that will get empty\",\n\t\t\t\t\tAmount: 345,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinput: &examplepb.UpdateV2Request{\n\t\t\t\tAbe: &examplepb.ABitOfEverything{\n\t\t\t\t\tStringValue: \"some updated value because the fieldMask is nil\",\n\t\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\t\tAmount: 456,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpdateMask: &fieldmaskpb.FieldMask{},\n\t\t\t},\n\t\t\twant: &examplepb.ABitOfEverything{\n\t\t\t\tStringValue: \"some updated value because the fieldMask is nil\",\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tAmount: 456,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// N.B. This case passes the nil field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation.\n\t\t\tname: \"with nil fieldmask\",\n\t\t\toriginalValue: &examplepb.ABitOfEverything{\n\t\t\t\tInt32Value:  42,\n\t\t\t\tStringValue: \"some value that will get overwritten\",\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tName:   \"value that will get empty\",\n\t\t\t\t\tAmount: 123,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinput: &examplepb.UpdateV2Request{\n\t\t\t\tAbe: &examplepb.ABitOfEverything{\n\t\t\t\t\tStringValue: \"some updated value because the fieldMask is nil\",\n\t\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\t\tAmount: 657,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpdateMask: nil,\n\t\t\t},\n\t\t\twant: &examplepb.ABitOfEverything{\n\t\t\t\tStringValue: \"some updated value because the fieldMask is nil\",\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tAmount: 657,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\toriginalABE := tc.originalValue\n\t\t\tuuid := postABE(t, port, originalABE)\n\n\t\t\tpatchBody := tc.input\n\t\t\tpatchReq, err := http.NewRequest(\n\t\t\t\thttp.MethodPatch,\n\t\t\t\tfmt.Sprintf(\"http://localhost:%d/v2a/example/a_bit_of_everything/%s\", port, uuid),\n\t\t\t\tstrings.NewReader(mustMarshal(t, patchBody)),\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"http.NewRequest(PATCH) failed with %v; want success\", err)\n\t\t\t}\n\t\t\tpatchResp, err := http.DefaultClient.Do(patchReq)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to issue PATCH request: %v\", err)\n\t\t\t}\n\t\t\tif got, want := patchResp.StatusCode, http.StatusOK; got != want {\n\t\t\t\tif body, err := io.ReadAll(patchResp.Body); err != nil {\n\t\t\t\t\tt.Errorf(\"patchResp body couldn't be read: %v\", err)\n\t\t\t\t} else {\n\t\t\t\t\tt.Errorf(\"patchResp.StatusCode= %d; want %d resp: %v\", got, want, string(body))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twant, got := tc.want, getABE(t, port, uuid)\n\t\t\tgot.Uuid = \"\" // empty out uuid so we don't need to worry about it in comparisons\n\t\t\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\t\t\tt.Error(diff)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// mustMarshal marshals the given object into a json string, calling t.Fatal if an error occurs. Useful in testing to\n// inline marshalling whenever you don't expect the marshalling to return an error\nfunc mustMarshal(t *testing.T, i interface{}) string {\n\tb, err := marshaler.Marshal(i)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to marshal %#v: %v\", i, err)\n\t}\n\n\treturn string(b)\n}\n\n// postABE conveniently creates a new ABE record for ease in testing\nfunc postABE(t *testing.T, port int, abe *examplepb.ABitOfEverything) (uuid string) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything\", port)\n\tpostResp, err := http.Post(apiURL, \"application/json\", strings.NewReader(mustMarshal(t, abe)))\n\tif err != nil {\n\t\tt.Fatalf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tbody, err := io.ReadAll(postResp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"postResp body couldn't be read: %v\", err)\n\t}\n\tvar f struct {\n\t\tUUID string `json:\"uuid\"`\n\t}\n\tif err := marshaler.Unmarshal(body, &f); err != nil {\n\t\tt.Fatalf(\"postResp body couldn't be unmarshalled: %v. body: %s\", err, string(body))\n\t}\n\tif f.UUID == \"\" {\n\t\tt.Fatalf(\"want uuid from postResp, but got none. body: %s\", string(body))\n\t}\n\treturn f.UUID\n}\n\n// getABE conveniently fetches an ABE record for ease in testing\nfunc getABE(t *testing.T, port int, uuid string) *examplepb.ABitOfEverything {\n\tgURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/%s\", port, uuid)\n\tgetResp, err := http.Get(gURL)\n\tif err != nil {\n\t\tt.Fatalf(\"http.Get(%s) failed with %v; want success\", gURL, err)\n\t}\n\tdefer getResp.Body.Close()\n\n\tif got, want := getResp.StatusCode, http.StatusOK; got != want {\n\t\tt.Fatalf(\"getResp.StatusCode= %d, want %d. resp: %v\", got, want, getResp)\n\t}\n\tvar getRestatuspbody examplepb.ABitOfEverything\n\tbody, err := io.ReadAll(getResp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"getResp body couldn't be read: %v\", err)\n\t}\n\tif err := marshaler.Unmarshal(body, &getRestatuspbody); err != nil {\n\t\tt.Fatalf(\"getResp body couldn't be unmarshalled: %v body: %s\", err, string(body))\n\t}\n\n\treturn &getRestatuspbody\n}\n\nfunc testABELookupNotFound(t *testing.T, port int, useTrailers bool) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything\", port)\n\tuuid := \"not_exist\"\n\tapiURL = fmt.Sprintf(\"%s/%s\", apiURL, uuid)\n\n\treq, err := http.NewRequest(\"GET\", apiURL, nil)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif useTrailers {\n\t\treq.Header.Set(\"TE\", \"trailers\")\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"client.Do(%v) failed with %v; want success\", req, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusNotFound; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t\treturn\n\t}\n\n\tmsg := new(statuspb.Status)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\n\tif got, want := msg.Code, int32(codes.NotFound); got != want {\n\t\tt.Errorf(\"msg.Code = %d; want %d\", got, want)\n\t\treturn\n\t}\n\n\tif got, want := msg.Message, \"not found\"; got != want {\n\t\tt.Errorf(\"msg.Message = %s; want %s\", got, want)\n\t\treturn\n\t}\n\n\tif got, want := resp.Header.Get(\"Grpc-Metadata-Uuid\"), uuid; got != want {\n\t\tt.Errorf(\"Grpc-Metadata-Uuid was %s, wanted %s\", got, want)\n\t}\n\n\ttrailers := map[bool]map[string]string{\n\t\ttrue: {\n\t\t\t\"Grpc-Trailer-Foo\": \"foo2\",\n\t\t\t\"Grpc-Trailer-Bar\": \"bar2\",\n\t\t},\n\t\tfalse: {\n\t\t\t\"Grpc-Trailer-Foo\": \"\",\n\t\t\t\"Grpc-Trailer-Bar\": \"\",\n\t\t},\n\t}\n\n\tfor trailer, want := range trailers[useTrailers] {\n\t\tif got := resp.Trailer.Get(trailer); got != want {\n\t\t\tt.Errorf(\"%s was %q, wanted %q\", trailer, got, want)\n\t\t}\n\t}\n}\n\nfunc testABEList(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything\", port)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tdec := marshaler.NewDecoder(resp.Body)\n\tvar i int\n\tfor i = 0; ; i++ {\n\t\tvar item struct {\n\t\t\tResult json.RawMessage        `json:\"result\"`\n\t\t\tError  map[string]interface{} `json:\"error\"`\n\t\t}\n\t\terr := dec.Decode(&item)\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\tt.Errorf(\"dec.Decode(&item) failed with %v; want success; i = %d\", err, i)\n\t\t}\n\t\tif len(item.Error) != 0 {\n\t\t\tt.Errorf(\"item.Error = %#v; want empty; i = %d\", item.Error, i)\n\t\t\tcontinue\n\t\t}\n\t\tmsg := new(examplepb.ABitOfEverything)\n\t\tif err := marshaler.Unmarshal(item.Result, msg); err != nil {\n\t\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", item.Result, err)\n\t\t}\n\t}\n\tif i <= 0 {\n\t\tt.Errorf(\"i == %d; want > 0\", i)\n\t}\n\n\tvalue := resp.Header.Get(\"Grpc-Metadata-Count\")\n\tif value == \"\" {\n\t\tt.Errorf(\"Grpc-Metadata-Count should not be empty\")\n\t}\n\n\tcount, err := strconv.Atoi(value)\n\tif err != nil {\n\t\tt.Errorf(\"failed to Atoi %q: %v\", value, err)\n\t}\n\n\tif count <= 0 {\n\t\tt.Errorf(\"count == %d; want > 0\", count)\n\t}\n}\n\nfunc testABEDownload(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/download\", port)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\twantHeader := \"text/html\"\n\tif value := resp.Header.Get(\"Content-Type\"); value != wantHeader {\n\t\tt.Fatalf(\"testABEDownload() Content-Type failed: got %s, want %s\", value, wantHeader)\n\t}\n\n\tbody, err := readAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"readAll(resp.Body) failed with %v; want success\", err)\n\t}\n\n\twant := []string{\"Hello 1\", \"Hello 2\"}\n\tif !reflect.DeepEqual(body, want) {\n\t\tt.Errorf(\"testABEDownload() failed: got %v, want %v\", body, want)\n\t}\n}\n\nfunc testABEBulkEcho(t *testing.T, port int) {\n\treqr, reqw := io.Pipe()\n\tvar wg sync.WaitGroup\n\tvar want []*sub.StringMessage\n\twg.Add(1)\n\tgo func() {\n\t\tdefer wg.Done()\n\t\tdefer reqw.Close()\n\t\tfor i := 0; i < 10; i++ {\n\t\t\ts := fmt.Sprintf(\"message %d\", i)\n\t\t\tmsg := &sub.StringMessage{Value: &s}\n\t\t\tbuf, err := marshaler.Marshal(msg)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"marshaler.Marshal(%v) failed with %v; want success\", msg, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif _, err = reqw.Write(buf); err != nil {\n\t\t\t\tt.Errorf(\"reqw.Write(%q) failed with %v; want success\", string(buf), err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\twant = append(want, msg)\n\t\t}\n\t}()\n\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/echo\", port)\n\treq, err := http.NewRequest(\"POST\", apiURL, reqr)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest(%q, %q, reqr) failed with %v; want success\", \"POST\", apiURL, err)\n\t\treturn\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Transfer-Encoding\", \"chunked\")\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q, %q, req) failed with %v; want success\", apiURL, \"application/json\", err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n\n\tvar got []*sub.StringMessage\n\twg.Add(1)\n\tgo func() {\n\t\tdefer wg.Done()\n\n\t\tdec := marshaler.NewDecoder(resp.Body)\n\t\tfor i := 0; ; i++ {\n\t\t\tvar item struct {\n\t\t\t\tResult json.RawMessage        `json:\"result\"`\n\t\t\t\tError  map[string]interface{} `json:\"error\"`\n\t\t\t}\n\t\t\terr := dec.Decode(&item)\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"dec.Decode(&item) failed with %v; want success; i = %d\", err, i)\n\t\t\t}\n\t\t\tif len(item.Error) != 0 {\n\t\t\t\tt.Errorf(\"item.Error = %#v; want empty; i = %d\", item.Error, i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmsg := new(sub.StringMessage)\n\t\t\tif err := marshaler.Unmarshal(item.Result, msg); err != nil {\n\t\t\t\tt.Errorf(\"marshaler.Unmarshal(%q, msg) failed with %v; want success\", item.Result, err)\n\t\t\t}\n\t\t\tgot = append(got, msg)\n\t\t}\n\t}()\n\n\twg.Wait()\n\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc testABEBulkEchoZeroLength(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/echo\", port)\n\treq, err := http.NewRequest(\"POST\", apiURL, bytes.NewReader(nil))\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest(%q, %q, bytes.NewReader(nil)) failed with %v; want success\", \"POST\", apiURL, err)\n\t\treturn\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Transfer-Encoding\", \"chunked\")\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q, %q, req) failed with %v; want success\", apiURL, \"application/json\", err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n\n\tdec := marshaler.NewDecoder(resp.Body)\n\tvar item struct {\n\t\tResult json.RawMessage        `json:\"result\"`\n\t\tError  map[string]interface{} `json:\"error\"`\n\t}\n\tif err := dec.Decode(&item); err == nil {\n\t\tt.Errorf(\"dec.Decode(&item) succeeded; want io.EOF; item = %#v\", item)\n\t} else if err != io.EOF {\n\t\tt.Errorf(\"dec.Decode(&item) failed with %v; want success\", err)\n\t\treturn\n\t}\n}\n\nfunc testAdditionalBindings(t *testing.T, port int) {\n\tfor i, f := range []func() *http.Response{\n\t\tfunc() *http.Response {\n\t\t\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/echo/hello\", port)\n\t\t\tresp, err := http.Get(apiURL)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn resp\n\t\t},\n\t\tfunc() *http.Response {\n\t\t\tapiURL := fmt.Sprintf(\"http://localhost:%d/v2/example/echo\", port)\n\t\t\tresp, err := http.Post(apiURL, \"application/json\", strings.NewReader(`\"hello\"`))\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"http.Post(%q, %q, %q) failed with %v; want success\", apiURL, \"application/json\", `\"hello\"`, err)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn resp\n\t\t},\n\t\tfunc() *http.Response {\n\t\t\tr, w := io.Pipe()\n\t\t\tgo func() {\n\t\t\t\tdefer w.Close()\n\t\t\t\tw.Write([]byte(`\"hello\"`))\n\t\t\t}()\n\t\t\tapiURL := fmt.Sprintf(\"http://localhost:%d/v2/example/echo\", port)\n\t\t\tresp, err := http.Post(apiURL, \"application/json\", r)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"http.Post(%q, %q, %q) failed with %v; want success\", apiURL, \"application/json\", `\"hello\"`, err)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn resp\n\t\t},\n\t\tfunc() *http.Response {\n\t\t\tapiURL := fmt.Sprintf(\"http://localhost:%d/v2/example/echo?value=hello\", port)\n\t\t\tresp, err := http.Get(apiURL)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn resp\n\t\t},\n\t} {\n\t\tresp := f()\n\t\tif resp == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tdefer resp.Body.Close()\n\t\tbuf, err := io.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success; i=%d\", err, i)\n\t\t\treturn\n\t\t}\n\t\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\t\tt.Errorf(\"resp.StatusCode = %d; want %d; i=%d\", got, want, i)\n\t\t\tt.Logf(\"%s\", buf)\n\t\t}\n\n\t\tmsg := new(sub.StringMessage)\n\t\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success; %d\", buf, err, i)\n\t\t\treturn\n\t\t}\n\t\tif got, want := msg.GetValue(), \"hello\"; got != want {\n\t\t\tt.Errorf(\"msg.GetValue() = %q; want %q\", got, want)\n\t\t}\n\t}\n}\n\nfunc testABERepeated(t *testing.T, port int) {\n\tf := func(v reflect.Value) string {\n\t\tvar f func(v reflect.Value, idx int) string\n\t\ts := make([]string, v.Len())\n\t\tswitch v.Index(0).Kind() {\n\t\tcase reflect.Slice:\n\t\t\tf = func(v reflect.Value, idx int) string {\n\t\t\t\tt := v.Index(idx).Type().Elem().Kind()\n\t\t\t\tif t == reflect.Uint8 {\n\t\t\t\t\treturn base64.URLEncoding.EncodeToString(v.Index(idx).Interface().([]byte))\n\t\t\t\t}\n\t\t\t\t// Could handle more elegantly\n\t\t\t\tpanic(\"unknown slice of type: \" + t.String())\n\t\t\t}\n\t\tdefault:\n\t\t\tf = func(v reflect.Value, idx int) string {\n\t\t\t\treturn fmt.Sprintf(\"%v\", v.Index(idx).Interface())\n\t\t\t}\n\t\t}\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\ts[i] = f(v, i)\n\t\t}\n\t\treturn strings.Join(s, \",\")\n\t}\n\twant := &examplepb.ABitOfEverythingRepeated{\n\t\tPathRepeatedFloatValue: []float32{\n\t\t\t1.5,\n\t\t\t-1.5,\n\t\t},\n\t\tPathRepeatedDoubleValue: []float64{\n\t\t\t2.5,\n\t\t\t-2.5,\n\t\t},\n\t\tPathRepeatedInt64Value: []int64{\n\t\t\t4294967296,\n\t\t\t-4294967296,\n\t\t},\n\t\tPathRepeatedUint64Value: []uint64{\n\t\t\t0,\n\t\t\t9223372036854775807,\n\t\t},\n\t\tPathRepeatedInt32Value: []int32{\n\t\t\t2147483647,\n\t\t\t-2147483648,\n\t\t},\n\t\tPathRepeatedFixed64Value: []uint64{\n\t\t\t0,\n\t\t\t9223372036854775807,\n\t\t},\n\t\tPathRepeatedFixed32Value: []uint32{\n\t\t\t0,\n\t\t\t4294967295,\n\t\t},\n\t\tPathRepeatedBoolValue: []bool{\n\t\t\ttrue,\n\t\t\tfalse,\n\t\t},\n\t\tPathRepeatedStringValue: []string{\n\t\t\t\"foo\",\n\t\t\t\"bar\",\n\t\t},\n\t\tPathRepeatedBytesValue: [][]byte{\n\t\t\t{0x00},\n\t\t\t{0xFF},\n\t\t},\n\t\tPathRepeatedUint32Value: []uint32{\n\t\t\t0,\n\t\t\t4294967295,\n\t\t},\n\t\tPathRepeatedEnumValue: []examplepb.NumericEnum{\n\t\t\texamplepb.NumericEnum_ZERO,\n\t\t\texamplepb.NumericEnum_ONE,\n\t\t},\n\t\tPathRepeatedSfixed32Value: []int32{\n\t\t\t2147483647,\n\t\t\t-2147483648,\n\t\t},\n\t\tPathRepeatedSfixed64Value: []int64{\n\t\t\t4294967296,\n\t\t\t-4294967296,\n\t\t},\n\t\tPathRepeatedSint32Value: []int32{\n\t\t\t2147483647,\n\t\t\t-2147483648,\n\t\t},\n\t\tPathRepeatedSint64Value: []int64{\n\t\t\t4611686018427387903,\n\t\t\t-4611686018427387904,\n\t\t},\n\t}\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything_repeated/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s\", port, f(reflect.ValueOf(want.PathRepeatedFloatValue)), f(reflect.ValueOf(want.PathRepeatedDoubleValue)), f(reflect.ValueOf(want.PathRepeatedInt64Value)), f(reflect.ValueOf(want.PathRepeatedUint64Value)), f(reflect.ValueOf(want.PathRepeatedInt32Value)), f(reflect.ValueOf(want.PathRepeatedFixed64Value)), f(reflect.ValueOf(want.PathRepeatedFixed32Value)), f(reflect.ValueOf(want.PathRepeatedBoolValue)), f(reflect.ValueOf(want.PathRepeatedStringValue)), f(reflect.ValueOf(want.PathRepeatedBytesValue)), f(reflect.ValueOf(want.PathRepeatedUint32Value)), f(reflect.ValueOf(want.PathRepeatedEnumValue)), f(reflect.ValueOf(want.PathRepeatedSfixed32Value)), f(reflect.ValueOf(want.PathRepeatedSfixed64Value)), f(reflect.ValueOf(want.PathRepeatedSint32Value)), f(reflect.ValueOf(want.PathRepeatedSint64Value)))\n\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.ABitOfEverythingRepeated)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif diff := cmp.Diff(msg, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestTimeout(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tapiURL := \"http://localhost:8088/v2/example/timeout\"\n\treq, err := http.NewRequest(\"GET\", apiURL, nil)\n\tif err != nil {\n\t\tt.Errorf(`http.NewRequest(\"GET\", %q, nil) failed with %v; want success`, apiURL, err)\n\t\treturn\n\t}\n\treq.Header.Set(\"Grpc-Timeout\", \"10m\")\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"http.DefaultClient.Do(%#v) failed with %v; want success\", req, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif got, want := resp.StatusCode, http.StatusGatewayTimeout; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n}\n\nfunc TestInvalidTimeout(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tapiURL := \"http://localhost:8088/v2/example/timeout\"\n\treq, err := http.NewRequest(\"GET\", apiURL, nil)\n\tif err != nil {\n\t\tt.Errorf(`http.NewRequest(\"GET\", %q, nil) failed with %v; want success`, apiURL, err)\n\t\treturn\n\t}\n\treq.Header.Set(\"Grpc-Timeout\", \"INVALID\")\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"http.DefaultClient.Do(%#v) failed with %v; want success\", req, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif got, want := resp.StatusCode, http.StatusBadRequest; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n}\n\nfunc TestPostWithEmptyBody(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tapiURL := \"http://localhost:8088/v2/example/postwithemptybody/name\"\n\trep, err := http.Post(apiURL, \"application/json\", nil)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\n\tif rep.StatusCode != http.StatusOK {\n\t\tt.Errorf(\"http.Post(%q) response code is %d; want %d\", apiURL,\n\t\t\trep.StatusCode, http.StatusOK)\n\t\treturn\n\t}\n}\n\nfunc TestUnknownPath(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tapiURL := \"http://localhost:8088\"\n\tresp, err := http.Post(apiURL, \"application/json\", strings.NewReader(\"{}\"))\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusNotFound; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n}\n\nfunc TestNotImplemented(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tapiURL := \"http://localhost:8088/v1/example/echo/myid\"\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\tif got, want := resp.StatusCode, http.StatusNotImplemented; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n}\n\nfunc TestInvalidArgument(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tapiURL := \"http://localhost:8088/v1/example/echo/myid/not_int64\"\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusBadRequest; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n}\n\nfunc TestResponseBody(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\ttestResponseBody(t, 8088)\n\ttestResponseBodies(t, 8088)\n\ttestResponseStrings(t, 8088)\n}\n\nfunc testResponseBody(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/responsebody/foo\", port)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Fatalf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t}\n\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tif diff := cmp.Diff(string(buf), `{\"data\":\"foo\"}`); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestResponseBodySameName(t *testing.T) {\n\tapiURL := \"http://localhost:8088/responsebody/samename/foo\"\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Fatalf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t}\n\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tif diff := cmp.Diff(string(buf), `\"foo\"`); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestResponseBodyStream(t *testing.T) {\n\tapiURL := \"http://localhost:8088/responsebody/stream/foo\"\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Fatalf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t}\n\n\tdefer resp.Body.Close()\n\tbody, err := readAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"readAll(resp.Body) failed with %v; want success\", err)\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n\n\tif diff := cmp.Diff(body, []string{`{\"result\":{\"data\":\"first foo\"}}`, `{\"result\":{\"data\":\"second foo\"}}`}); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestResponseBodyStreamHttpBody(t *testing.T) {\n\tapiURL := \"http://localhost:8088/v1/example/download\"\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Fatalf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t}\n\n\tdefer resp.Body.Close()\n\tbody, err := readAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"readAll(resp.Body) failed with %v; want success\", err)\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n\n\tif diff := cmp.Diff(body, []string{\"Hello 1\", \"Hello 2\"}); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestResponseBodyStreamHttpBodyError(t *testing.T) {\n\tapiURL := \"http://localhost:8088/v1/example/download?error=true\"\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Fatalf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t}\n\n\tdefer resp.Body.Close()\n\tbody, err := readAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatalf(\"readAll(resp.Body) failed with %v; want success\", err)\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t}\n\n\tif diff := cmp.Diff(body, []string{\"Hello 1\", \"Hello 2\", `{\"error\":{\"code\":3,\"message\":\"error\",\"details\":[]}}`}); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc readAll(body io.ReadCloser) ([]string, error) {\n\tvar b []string\n\treader := bufio.NewReader(body)\n\tfor {\n\t\tl, err := reader.ReadBytes('\\n')\n\t\tswitch {\n\t\tcase err == io.EOF:\n\t\t\treturn b, nil\n\t\tcase err != nil:\n\t\t\treturn nil, err\n\t\t}\n\n\t\tb = append(b, string(bytes.TrimSpace(l)))\n\t}\n}\n\nfunc testResponseBodies(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/responsebodies/foo\", port)\n\tresp, err := http.Get(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tvar got []*examplepb.RepeatedResponseBodyOut_Response\n\terr = marshaler.Unmarshal(buf, &got)\n\tif err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal failed with %v; want success\", err)\n\t\treturn\n\t}\n\twant := []*examplepb.RepeatedResponseBodyOut_Response{\n\t\t{\n\t\t\tData: \"foo\",\n\t\t\tType: examplepb.RepeatedResponseBodyOut_Response_UNKNOWN,\n\t\t},\n\t}\n\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc testResponseStrings(t *testing.T, port int) {\n\tctx, cancel := context.WithCancel(context.Background())\n\tdefer cancel()\n\n\tport = 8087\n\t// Run Secondary server with different marshalling\n\tch := make(chan error)\n\tgo func() {\n\t\terr := runGateway(\n\t\t\tctx,\n\t\t\tfmt.Sprintf(\":%d\", port),\n\t\t)\n\t\tif err != nil {\n\t\t\tch <- fmt.Errorf(\"cannot run gateway service: %v\", err)\n\t\t}\n\t}()\n\n\tif err := waitForGateway(ctx, uint16(port)); err != nil {\n\t\tt.Fatalf(\"waitForGateway(ctx, %d) failed with %v; want success\", port, err)\n\t}\n\n\tt.Run(\"Response strings\", func(t *testing.T) {\n\t\tapiURL := fmt.Sprintf(\"http://localhost:%d/responsestrings/foo\", port)\n\t\tresp, err := http.Get(apiURL)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\t\treturn\n\t\t}\n\t\tdefer resp.Body.Close()\n\t\tbuf, err := io.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\n\t\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\t\tt.Logf(\"%s\", buf)\n\t\t}\n\n\t\tvar got []string\n\t\terr = marshaler.Unmarshal(buf, &got)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"marshaler.Unmarshal failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\t\twant := []string{\"hello\", \"foo\"}\n\t\tif diff := cmp.Diff(got, want); diff != \"\" {\n\t\t\tt.Error(diff)\n\t\t}\n\t})\n\n\tt.Run(\"Empty response strings\", func(t *testing.T) {\n\t\tapiURL := fmt.Sprintf(\"http://localhost:%d/responsestrings/empty\", port)\n\t\tresp, err := http.Get(apiURL)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\t\treturn\n\t\t}\n\t\tdefer resp.Body.Close()\n\t\tbuf, err := io.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\n\t\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\t\tt.Logf(\"%s\", buf)\n\t\t}\n\n\t\tvar got []string\n\t\terr = marshaler.Unmarshal(buf, &got)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"marshaler.Unmarshal failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\t\twant := []string{}\n\t\tif diff := cmp.Diff(got, want); diff != \"\" {\n\t\t\tt.Error(diff)\n\t\t}\n\t})\n\n\tt.Run(\"Response bodies\", func(t *testing.T) {\n\t\tapiURL := fmt.Sprintf(\"http://localhost:%d/responsebodies/foo\", port)\n\t\tresp, err := http.Get(apiURL)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"http.Get(%q) failed with %v; want success\", apiURL, err)\n\t\t\treturn\n\t\t}\n\t\tdefer resp.Body.Close()\n\t\tbuf, err := io.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\n\t\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\t\tt.Logf(\"%s\", buf)\n\t\t}\n\n\t\tvar got []*examplepb.RepeatedResponseBodyOut_Response\n\t\terr = marshaler.Unmarshal(buf, &got)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"marshaler.Unmarshal failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\t\twant := []*examplepb.RepeatedResponseBodyOut_Response{\n\t\t\t{\n\t\t\t\tData: \"foo\",\n\t\t\t\tType: examplepb.RepeatedResponseBodyOut_Response_UNKNOWN,\n\t\t\t},\n\t\t}\n\t\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\t\tt.Error(diff)\n\t\t}\n\t})\n}\n\nfunc TestRequestQueryParams(t *testing.T) {\n\ttestRequestQueryParams(t, 8088)\n}\n\nfunc TestRequestQueryParamsInProcessGateway(t *testing.T) {\n\ttestRequestQueryParams(t, 8089)\n}\n\nfunc testRequestQueryParams(t *testing.T, port int) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tformValues := url.Values{}\n\tformValues.Set(\"string_value\", \"hello-world\")\n\tformValues.Add(\"repeated_string_value\", \"demo1\")\n\tformValues.Add(\"repeated_string_value\", \"demo2\")\n\tformValues.Add(\"optional_string_value\", \"optional-val\")\n\tmappedStringValueStr := fmt.Sprintf(\"mapped_string_value[%v]=%v\", \"map_key\", \"map_value\")\n\n\ttestCases := []struct {\n\t\tname           string\n\t\thttpMethod     string\n\t\tcontentType    string\n\t\tapiURL         string\n\t\twantContent    *examplepb.ABitOfEverything\n\t\trequestContent io.Reader\n\t}{\n\t\t{\n\t\t\tname:        \"get url query values\",\n\t\t\thttpMethod:  \"GET\",\n\t\t\tcontentType: \"application/json\",\n\t\t\tapiURL:      fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v&%v\", port, 1234.56, true, mappedStringValueStr),\n\t\t\twantContent: &examplepb.ABitOfEverything{\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tName: \"foo\",\n\t\t\t\t},\n\t\t\t\tDoubleValue: 1234.56,\n\t\t\t\tBoolValue:   true,\n\t\t\t\tMappedStringValue: map[string]string{\n\t\t\t\t\t\"map_key\": \"map_value\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:        \"get nested enum url parameter\",\n\t\t\thttpMethod:  \"GET\",\n\t\t\tcontentType: \"application/json\",\n\t\t\t// If nested_enum.OK were FALSE, the content of single_nested would be {} due to how 0 values are serialized\n\t\t\tapiURL: fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/params/get/nested_enum/TRUE\", port),\n\t\t\twantContent: &examplepb.ABitOfEverything{\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tOk: examplepb.ABitOfEverything_Nested_TRUE,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:        \"post url query values\",\n\t\t\thttpMethod:  \"POST\",\n\t\t\tcontentType: \"application/json\",\n\t\t\tapiURL:      fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/params/post/hello-world?double_value=%v&bool_value=%v\", port, 1234.56, true),\n\t\t\twantContent: &examplepb.ABitOfEverything{\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tName:   \"foo\",\n\t\t\t\t\tAmount: 100,\n\t\t\t\t},\n\t\t\t\tDoubleValue: 1234.56,\n\t\t\t\tBoolValue:   true,\n\t\t\t\tStringValue: \"hello-world\",\n\t\t\t},\n\t\t\trequestContent: strings.NewReader(`{\"name\":\"foo\",\"amount\":100}`),\n\t\t},\n\t\t{\n\t\t\tname:        \"post form and url query values\",\n\t\t\thttpMethod:  \"POST\",\n\t\t\tcontentType: \"application/x-www-form-urlencoded\",\n\t\t\tapiURL:      fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v\", port, 1234.56, true),\n\t\t\twantContent: &examplepb.ABitOfEverything{\n\t\t\t\tSingleNested: &examplepb.ABitOfEverything_Nested{\n\t\t\t\t\tName: \"foo\",\n\t\t\t\t},\n\t\t\t\tDoubleValue:         1234.56,\n\t\t\t\tBoolValue:           true,\n\t\t\t\tStringValue:         \"hello-world\",\n\t\t\t\tRepeatedStringValue: []string{\"demo1\", \"demo2\"},\n\t\t\t\tOptionalStringValue: func() *string {\n\t\t\t\t\tval := formValues.Get(\"optional_string_value\")\n\t\t\t\t\treturn &val\n\t\t\t\t}(),\n\t\t\t},\n\t\t\trequestContent: strings.NewReader(formValues.Encode()),\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\treq, err := http.NewRequest(tc.httpMethod, tc.apiURL, tc.requestContent)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"http.method (%q) http.url (%q) failed with %v; want success\", tc.httpMethod, tc.apiURL, err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\treq.Header.Add(\"Content-Type\", tc.contentType)\n\n\t\t\tresp, err := http.DefaultClient.Do(req)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"http.method (%q) http.url (%q) failed with %v; want success\", tc.httpMethod, tc.apiURL, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdefer resp.Body.Close()\n\n\t\t\tbuf, err := io.ReadAll(resp.Body)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif gotCode, wantCode := resp.StatusCode, http.StatusOK; gotCode != wantCode {\n\t\t\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", gotCode, wantCode)\n\t\t\t\tt.Logf(\"%s\", buf)\n\t\t\t}\n\n\t\t\tgot := new(examplepb.ABitOfEverything)\n\t\t\terr = marshaler.Unmarshal(buf, &got)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"marshaler.Unmarshal(buf, got) failed with %v; want success\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif diff := cmp.Diff(got, tc.wantContent, protocmp.Transform()); diff != \"\" {\n\t\t\t\tt.Errorf(\"http.method (%q) http.url (%q)\\n%s\", tc.httpMethod, tc.apiURL, diff)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestNonStandardNames(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tgo func() {\n\t\tmarshaler := &runtime.JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tUseEnumNumbers:  false,\n\t\t\t\tEmitUnpopulated: true,\n\t\t\t\tUseProtoNames:   true,\n\t\t\t},\n\t\t}\n\t\terr := runGateway(\n\t\t\tctx,\n\t\t\t\":8081\",\n\t\t\truntime.WithMarshalerOption(runtime.MIMEWildcard, marshaler),\n\t\t)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"runGateway() failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\t}()\n\tgo func() {\n\t\terr := runGateway(\n\t\t\tctx,\n\t\t\t\":8082\",\n\t\t)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"runGateway() failed with %v; want success\", err)\n\t\t\treturn\n\t\t}\n\t}()\n\n\tif err := waitForGateway(ctx, 8081); err != nil {\n\t\tt.Errorf(\"waitForGateway(ctx, 8081) failed with %v; want success\", err)\n\t}\n\tif err := waitForGateway(ctx, 8082); err != nil {\n\t\tt.Errorf(\"waitForGateway(ctx, 8082) failed with %v; want success\", err)\n\t}\n\n\tfor _, tc := range []struct {\n\t\tname     string\n\t\tport     int\n\t\tmethod   string\n\t\tjsonBody string\n\t\twant     proto.Message\n\t}{\n\t\t{\n\t\t\t\"Test standard update method\",\n\t\t\t8081,\n\t\t\t\"update\",\n\t\t\t`{\n\t\t\t\t\"id\": \"foo\",\n\t\t\t\t\"Num\": \"1\",\n\t\t\t\t\"line_num\": \"42\",\n\t\t\t\t\"langIdent\": \"English\",\n\t\t\t\t\"STATUS\": \"good\",\n\t\t\t\t\"en_GB\": \"1\",\n\t\t\t\t\"no\": \"yes\",\n\t\t\t\t\"thing\": {\n\t\t\t\t\t\"subThing\": {\n\t\t\t\t\t\t\"sub_value\": \"hi\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}`,\n\t\t\t&examplepb.NonStandardMessage{\n\t\t\t\tId:        \"foo\",\n\t\t\t\tNum:       1,\n\t\t\t\tLineNum:   42,\n\t\t\t\tLangIdent: \"English\",\n\t\t\t\tSTATUS:    \"good\",\n\t\t\t\tEn_GB:     1,\n\t\t\t\tNo:        \"yes\",\n\t\t\t\tThing: &examplepb.NonStandardMessage_Thing{\n\t\t\t\t\tSubThing: &examplepb.NonStandardMessage_Thing_SubThing{\n\t\t\t\t\t\tSubValue: \"hi\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t\"Test update method using json_names in message\",\n\t\t\t8081,\n\t\t\t\"update_with_json_names\",\n\t\t\t// N.B. json_names have no effect if not using UseProtoNames: false\n\t\t\t`{\n\t\t\t\t\"id\": \"foo\",\n\t\t\t\t\"Num\": \"1\",\n\t\t\t\t\"line_num\": \"42\",\n\t\t\t\t\"langIdent\": \"English\",\n\t\t\t\t\"STATUS\": \"good\",\n\t\t\t\t\"en_GB\": \"1\",\n\t\t\t\t\"no\": \"yes\",\n\t\t\t\t\"thing\": {\n\t\t\t\t\t\"subThing\": {\n\t\t\t\t\t\t\"sub_value\": \"hi\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}`,\n\t\t\t&examplepb.NonStandardMessageWithJSONNames{\n\t\t\t\tId:        \"foo\",\n\t\t\t\tNum:       1,\n\t\t\t\tLineNum:   42,\n\t\t\t\tLangIdent: \"English\",\n\t\t\t\tSTATUS:    \"good\",\n\t\t\t\tEn_GB:     1,\n\t\t\t\tNo:        \"yes\",\n\t\t\t\tThing: &examplepb.NonStandardMessageWithJSONNames_Thing{\n\t\t\t\t\tSubThing: &examplepb.NonStandardMessageWithJSONNames_Thing_SubThing{\n\t\t\t\t\t\tSubValue: \"hi\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t\"Test standard update method with UseProtoNames: false marshaller option\",\n\t\t\t8082,\n\t\t\t\"update\",\n\t\t\t`{\n\t\t\t\t\"id\": \"foo\",\n\t\t\t\t\"Num\": \"1\",\n\t\t\t\t\"lineNum\": \"42\",\n\t\t\t\t\"langIdent\": \"English\",\n\t\t\t\t\"STATUS\": \"good\",\n\t\t\t\t\"enGB\": \"1\",\n\t\t\t\t\"no\": \"yes\",\n\t\t\t\t\"thing\": {\n\t\t\t\t\t\"subThing\": {\n\t\t\t\t\t\t\"subValue\": \"hi\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}`,\n\t\t\t&examplepb.NonStandardMessage{\n\t\t\t\tId:        \"foo\",\n\t\t\t\tNum:       1,\n\t\t\t\tLineNum:   42,\n\t\t\t\tLangIdent: \"English\",\n\t\t\t\tSTATUS:    \"good\",\n\t\t\t\tEn_GB:     1,\n\t\t\t\tNo:        \"yes\",\n\t\t\t\tThing: &examplepb.NonStandardMessage_Thing{\n\t\t\t\t\tSubThing: &examplepb.NonStandardMessage_Thing_SubThing{\n\t\t\t\t\t\tSubValue: \"hi\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t\"Test update method using json_names in message with UseProtoNames: false marshaller option\",\n\t\t\t8082,\n\t\t\t\"update_with_json_names\",\n\t\t\t`{\n\t\t\t\t\"ID\": \"foo\",\n\t\t\t\t\"Num\": \"1\",\n\t\t\t\t\"LineNum\": \"42\",\n\t\t\t\t\"langIdent\": \"English\",\n\t\t\t\t\"status\": \"good\",\n\t\t\t\t\"En_GB\": \"1\",\n\t\t\t\t\"yes\": \"yes\",\n\t\t\t\t\"Thingy\": {\n\t\t\t\t\t\"SubThing\": {\n\t\t\t\t\t\t\"sub_Value\": \"hi\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}`,\n\t\t\t&examplepb.NonStandardMessageWithJSONNames{\n\t\t\t\tId:        \"foo\",\n\t\t\t\tNum:       1,\n\t\t\t\tLineNum:   42,\n\t\t\t\tLangIdent: \"English\",\n\t\t\t\tSTATUS:    \"good\",\n\t\t\t\tEn_GB:     1,\n\t\t\t\tNo:        \"yes\",\n\t\t\t\tThing: &examplepb.NonStandardMessageWithJSONNames_Thing{\n\t\t\t\t\tSubThing: &examplepb.NonStandardMessageWithJSONNames_Thing_SubThing{\n\t\t\t\t\t\tSubValue: \"hi\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\ttestNonStandardNames(t, tc.port, tc.method, tc.jsonBody, tc.want)\n\t\t})\n\t}\n}\n\nfunc testNonStandardNames(t *testing.T, port int, method string, jsonBody string, want proto.Message) {\n\treq, err := http.NewRequest(\n\t\thttp.MethodPatch,\n\t\tfmt.Sprintf(\"http://localhost:%d/v1/example/non_standard/%s\", port, method),\n\t\tstrings.NewReader(jsonBody),\n\t)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequest(PATCH) failed with %v; want success\", err)\n\t}\n\tpatchResp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to issue PATCH request: %v\", err)\n\t}\n\n\tbody, err := io.ReadAll(patchResp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"patchResp body couldn't be read: %v\", err)\n\t}\n\n\tt.Log(string(body))\n\n\tif got, want := patchResp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"patchResp.StatusCode= %d; want %d resp: %v\", got, want, string(body))\n\t}\n\n\tgot := want.ProtoReflect().New().Interface()\n\terr = marshaler.Unmarshal(body, got)\n\tif err != nil {\n\t\tt.Fatalf(\"marshaler.Unmarshal failed: %v\", err)\n\t}\n\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc testABEExists(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything\", port)\n\tcresp, err := http.Post(apiURL, \"application/json\", strings.NewReader(`\n\t\t{\"bool_value\": true, \"string_value\": \"strprefix/example\"}\n\t`))\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer cresp.Body.Close()\n\tbuf, err := io.ReadAll(cresp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(cresp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\tif got, want := cresp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t\treturn\n\t}\n\n\twant := new(examplepb.ABitOfEverything)\n\tif err := marshaler.Unmarshal(buf, want); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, want) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\n\tapiURL = fmt.Sprintf(\"%s/%s\", apiURL, want.Uuid)\n\tresp, err := http.Head(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Head(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n}\n\nfunc testABEExistsNotFound(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything\", port)\n\tapiURL = fmt.Sprintf(\"%s/%s\", apiURL, \"not_exist\")\n\tresp, err := http.Head(apiURL)\n\tif err != nil {\n\t\tt.Errorf(\"http.Head(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif got, want := resp.StatusCode, http.StatusNotFound; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\treturn\n\t}\n}\n\nfunc testABEOptions(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/test\", port)\n\treq, err := http.NewRequest(http.MethodOptions, apiURL, strings.NewReader(`\n\t\t{\"bool_value\": true, \"string_value\": \"strprefix/example\"}\n\t`))\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest(http.MethodTrace, %q, ...) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer resp.Body.Close()\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\treturn\n\t}\n\n\tvalue := resp.Header.Get(\"Grpc-Metadata-Allow\")\n\tif value != \"OPTIONS, GET, HEAD, POST, PUT, TRACE\" {\n\t\tt.Errorf(\"Grpc-Metadata-Allow does not have the expected HTTP methods\")\n\t\tt.Logf(\"%s\", value)\n\t}\n}\n\nfunc testABETrace(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/v1/example/a_bit_of_everything/test\", port)\n\treq, err := http.NewRequest(http.MethodTrace, apiURL, strings.NewReader(`\n\t\t{\"bool_value\": true, \"string_value\": \"strprefix/example\"}\n\t`))\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest(http.MethodTrace, %q, ...) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer resp.Body.Close()\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(cresp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t\treturn\n\t}\n\n\twant := new(examplepb.ABitOfEverything)\n\tif err := marshaler.Unmarshal(buf, want); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, want) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n}\n\nfunc testEchoWithNonASCIIHeaderValues(t *testing.T, port int, apiPrefix string) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/%s/example/echo/myid\", port, apiPrefix)\n\n\treq, err := http.NewRequest(\"POST\", apiURL, strings.NewReader(\"{}\"))\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() = err: %v\", err)\n\t\treturn\n\t}\n\treq.Header.Add(\"Content-Type\", \"application/json\")\n\treq.Header.Add(\"Grpc-Metadata-Location\", \"Gjøvik\")\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.Id, \"myid\"; got != want {\n\t\tt.Errorf(\"msg.Id = %q; want %q\", got, want)\n\t}\n}\n\nfunc testEchoWithInvalidHeaderKey(t *testing.T, port int, apiPrefix string) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/%s/example/echo/myid\", port, apiPrefix)\n\n\treq, err := http.NewRequest(\"POST\", apiURL, strings.NewReader(\"{}\"))\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() = err: %v\", err)\n\t\treturn\n\t}\n\treq.Header.Add(\"Content-Type\", \"application/json\")\n\treq.Header.Add(\"Grpc-Metadata-Foo+Bar\", \"Hello\")\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Errorf(\"http.Post(%q) failed with %v; want success\", apiURL, err)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tbuf, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Errorf(\"io.ReadAll(resp.Body) failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tif got, want := resp.StatusCode, http.StatusOK; got != want {\n\t\tt.Errorf(\"resp.StatusCode = %d; want %d\", got, want)\n\t\tt.Logf(\"%s\", buf)\n\t}\n\n\tmsg := new(examplepb.UnannotatedSimpleMessage)\n\tif err := marshaler.Unmarshal(buf, msg); err != nil {\n\t\tt.Errorf(\"marshaler.Unmarshal(%s, msg) failed with %v; want success\", buf, err)\n\t\treturn\n\t}\n\tif got, want := msg.Id, \"myid\"; got != want {\n\t\tt.Errorf(\"msg.Id = %q; want %q\", got, want)\n\t}\n}\n\n// Test server context closing when body is sent on a POST method which has no\n// \"body\" annotation defined.\nfunc TestExcessBody(t *testing.T) {\n\tif testing.Short() {\n\t\tt.Skip()\n\t\treturn\n\t}\n\n\ttestExcessBodyRPC(t, 8088)\n\ttestExcessBodyStream(t, 8088)\n\ttestExcessBodyRPCUnexpected(t, 8088)\n\ttestExcessBodyStreamUnexpected(t, 8088)\n\ttestExcessBodyRPCWithBody(t, 8088)\n\ttestExcessBodyStreamWithBody(t, 8088)\n\ttestExcessBodyRPCWithBodyUnexpected(t, 8089)\n\ttestExcessBodyStreamWithBodyUnexpected(t, 8088)\n}\n\nfunc testExcessBodyRPC(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/rpc\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, nil)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextRPC()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n\nfunc testExcessBodyStream(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/stream\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, nil)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextStream()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n\nfunc testExcessBodyRPCUnexpected(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/rpc\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tbody := strings.NewReader(\"{}\")\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, body)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextRPC()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n\nfunc testExcessBodyStreamUnexpected(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/stream\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tbody := strings.NewReader(\"{}\")\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, body)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextStream()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n\nfunc testExcessBodyRPCWithBody(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/rpc/with-body\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tbody := strings.NewReader(\"{}\")\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, body)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextRPC()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n\nfunc testExcessBodyStreamWithBody(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/stream/with-body\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tbody := strings.NewReader(\"{}\")\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, body)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextStream()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n\nfunc testExcessBodyRPCWithBodyUnexpected(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/rpc/with-body\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tbody := strings.NewReader(\"{}.\")\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, body)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextRPC()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n\nfunc testExcessBodyStreamWithBodyUnexpected(t *testing.T, port int) {\n\tapiURL := fmt.Sprintf(\"http://localhost:%d/rpc/excess-body/stream/with-body\", port)\n\n\tctx := context.Background()\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tbody := strings.NewReader(\"{}\" + strings.Repeat(\".\", 511))\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", apiURL, body)\n\tif err != nil {\n\t\tt.Errorf(\"http.NewRequest() failed with %v; want success\", err)\n\t\treturn\n\t}\n\n\tgo http.DefaultClient.Do(req)\n\n\t// Wait for the server to start processing the request.\n\tctxServer := server.ExcessBodyServer_RetrieveContextStream()\n\tcancel()\n\n\t// Wait for server context to be done\n\tselect {\n\tcase <-ctxServer.Done():\n\tcase <-time.After(time.Second):\n\t\tt.Errorf(\"server context not done\")\n\t}\n}\n"
  },
  {
    "path": "examples/internal/integration/main_test.go",
    "content": "package integration_test\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/gateway\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server\"\n\tgwruntime \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nvar (\n\tendpoint   = flag.String(\"endpoint\", \"localhost:9090\", \"endpoint of the gRPC service\")\n\tnetwork    = flag.String(\"network\", \"tcp\", `one of \"tcp\" or \"unix\". Must be consistent to -endpoint`)\n\topenAPIDir = flag.String(\"openapi_dir\", \"examples/internal/proto/examplepb\", \"path to the directory which contains OpenAPI definitions\")\n)\n\nfunc runGateway(ctx context.Context, addr string, opts ...gwruntime.ServeMuxOption) error {\n\treturn gateway.Run(ctx, gateway.Options{\n\t\tAddr: addr,\n\t\tGRPCServer: gateway.Endpoint{\n\t\t\tNetwork: *network,\n\t\t\tAddr:    *endpoint,\n\t\t},\n\t\tOpenAPIDir: *openAPIDir,\n\t\tMux:        opts,\n\t})\n}\n\nfunc waitForGateway(ctx context.Context, port uint16) error {\n\tch := time.After(10 * time.Second)\n\n\tfor {\n\t\tr, err := http.Get(fmt.Sprintf(\"http://localhost:%d/healthz\", port))\n\t\tif err == nil && r.StatusCode == http.StatusOK {\n\t\t\treturn nil\n\t\t}\n\n\t\tgrpclog.Infof(\"Waiting for localhost:%d to get ready\", port)\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn err\n\t\tcase <-ch:\n\t\t\treturn err\n\t\tcase <-time.After(10 * time.Millisecond):\n\t\t}\n\t}\n}\n\nfunc runServers(ctx context.Context) <-chan error {\n\tch := make(chan error, 3)\n\tgo func() {\n\t\tif err := server.Run(ctx, *network, *endpoint); err != nil {\n\t\t\tch <- fmt.Errorf(\"cannot run grpc service: %v\", err)\n\t\t}\n\t}()\n\tgo func() {\n\t\tif err := runGateway(ctx, \":8088\"); err != nil {\n\t\t\tch <- fmt.Errorf(\"cannot run gateway service: %v\", err)\n\t\t}\n\t}()\n\tgo func() {\n\t\tif err := server.RunInProcessGateway(ctx, \":8089\"); err != nil {\n\t\t\tch <- fmt.Errorf(\"cannot run in process gateway service: %v\", err)\n\t\t}\n\t}()\n\treturn ch\n}\n\nfunc TestMain(m *testing.M) {\n\tflag.Parse()\n\n\tctx, cancel := context.WithCancel(context.Background())\n\tdefer cancel()\n\terrCh := runServers(ctx)\n\n\tch := make(chan int, 1)\n\tgo func() {\n\t\tif err := waitForGateway(ctx, 8088); err != nil {\n\t\t\tgrpclog.Errorf(\"waitForGateway(ctx, 8088) failed with %v; want success\", err)\n\t\t}\n\t\tch <- m.Run()\n\t}()\n\n\tselect {\n\tcase err := <-errCh:\n\t\tfmt.Fprintln(os.Stderr, err)\n\t\tos.Exit(1)\n\tcase status := <-ch:\n\t\tcancel()\n\t\tos.Exit(status)\n\t}\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/BUILD.bazel",
    "content": "load(\"@grpc_ecosystem_grpc_gateway//protoc-gen-openapiv2:defs.bzl\", \"protoc_gen_openapiv2\")\nload(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\n# TODO(yannic): Add examples/tests that use import_prefix/strip_import_prefix.\n\n# gazelle:exclude a_bit_of_everything.pb.gw.go\n# gazelle:exclude a_bit_of_everything_grpc.pb.go\n# gazelle:exclude camel_case_service.pb.gw.go\n# gazelle:exclude camel_case_service_grpc.pb.go\n# gazelle:exclude echo_service.pb.gw.go\n# gazelle:exclude echo_service_grpc.pb.go\n# gazelle:exclude enum_with_single_value.pb.gw.go\n# gazelle:exclude enum_with_single_value.pb.go\n# gazelle:exclude excess_body.pb.gw.go\n# gazelle:exclude excess_body_grpc.pb.go\n# gazelle:exclude flow_combination.pb.gw.go\n# gazelle:exclude flow_combination_grpc.pb.go\n# gazelle:exclude generate_unbound_methods.pb.gw.go\n# gazelle:exclude generate_unbound_methods_grpc.pb.go\n# gazelle:exclude generated_input.proto\n# gazelle:exclude non_standard_names.pb.gw.go\n# gazelle:exclude non_standard_names_grpc.pb.go\n# gazelle:exclude response_body_service.pb.gw.go\n# gazelle:exclude response_body_service_grpc.pb.go\n# gazelle:exclude stream.pb.gw.go\n# gazelle:exclude stream_grpc.pb.go\n# gazelle:exclude use_go_template.pb.gw.go\n# gazelle:exclude use_go_template_grpc.pb.go\n# gazelle:exclude ignore_comment.pb.gw.go\n# gazelle:exclude remove_internal_comment.pb.gw.go\n# gazelle:exclude ignore_comment_grpc.pb.go\n# gazelle:exclude wrappers.pb.gw.go\n# gazelle:exclude wrappers_grpc.pb.go\n# gazelle:exclude unannotated_echo_service.pb.gw.go\n# gazelle:exclude unannotated_echo_service_grpc.pb.go\n# gazelle:exclude visibility_rule_echo_service.pb.gw.go\n# gazelle:exclude visibility_rule_echo_service_grpc.pb.go\n# gazelle:exclude opaque.proto\n# gazelle:exclude opaque.pb.go\n# gazelle:exclude opaque.pb.gw.go\n# gazelle:exclude opaque_grpc.pb.go\n# gazelle:exclude openapi_merge_a.proto\n# gazelle:exclude openapi_merge_b.proto\n# gazelle:exclude proto3_field_semantics.pb.gw.go\n# gazelle:go_grpc_compilers //:go_apiv2, //:go_grpc, //protoc-gen-grpc-gateway:go_gen_grpc_gateway\n\ngenrule(\n    name = \"generated_proto\",\n    srcs = [\"generated_input.proto\"],\n    outs = [\"generated_output.proto\"],\n    cmd = \"cp $< $@\",  # A simple copy simulates a generated proto file.\n)\n\nproto_library(\n    name = \"examplepb_proto\",\n    srcs = [\n        \"a_bit_of_everything.proto\",\n        \"camel_case_service.proto\",\n        \"echo_service.proto\",\n        \"enum_with_single_value.proto\",\n        \"excess_body.proto\",\n        \"flow_combination.proto\",\n        \"generate_unbound_methods.proto\",\n        \"generated_output.proto\",\n        \"ignore_comment.proto\",\n        \"non_standard_names.proto\",\n        \"proto3_field_semantics.proto\",\n        \"remove_internal_comment.proto\",\n        \"response_body_service.proto\",\n        \"stream.proto\",\n        \"unannotated_echo_service.proto\",\n        \"use_go_template.proto\",\n        \"visibility_rule_echo_service.proto\",\n        \"wrappers.proto\",\n    ],\n    deps = [\n        \"//examples/internal/proto/oneofenum:oneofenum_proto\",\n        \"//examples/internal/proto/pathenum:pathenum_proto\",\n        \"//examples/internal/proto/sub:sub_proto\",\n        \"//examples/internal/proto/sub2:sub2_proto\",\n        \"//protoc-gen-openapiv2/options:options_proto\",\n        \"@com_google_protobuf//:duration_proto\",\n        \"@com_google_protobuf//:empty_proto\",\n        \"@com_google_protobuf//:field_mask_proto\",\n        \"@com_google_protobuf//:struct_proto\",\n        \"@com_google_protobuf//:timestamp_proto\",\n        \"@com_google_protobuf//:wrappers_proto\",\n        \"@googleapis//google/api:annotations_proto\",\n        \"@googleapis//google/api:field_behavior_proto\",\n        \"@googleapis//google/api:httpbody_proto\",\n        \"@googleapis//google/api:visibility_proto\",\n        \"@googleapis//google/rpc:status_proto\",\n    ],\n)\n\n#keep\nproto_library(\n    name = \"examplepb_opaque_proto\",\n    srcs = [\n        \"opaque.proto\",\n    ],\n    deps = [\n        \"//examples/internal/proto/sub:sub_proto\",\n        \"@com_google_protobuf//:duration_proto\",\n        \"@com_google_protobuf//:field_mask_proto\",\n        \"@com_google_protobuf//:timestamp_proto\",\n        \"@com_google_protobuf//:wrappers_proto\",\n        \"@googleapis//google/api:annotations_proto\",\n        \"@googleapis//google/api:client_proto\",\n    ],\n)\n\n#keep\nproto_library(\n    name = \"openapi_merge_proto\",\n    srcs = [\n        \"openapi_merge_a.proto\",\n        \"openapi_merge_b.proto\",\n    ],\n    deps = [\n        \"@com_google_protobuf//:api_proto\",\n        \"@googleapis//google/api:annotations_proto\",\n        \"@googleapis//google/api:field_behavior_proto\",\n        \"@googleapis//google/rpc:status_proto\",\n    ],\n)\n\n#keep\ngo_proto_library(\n    name = \"examplepb_go_proto\",\n    compilers = [\n        \"//:go_apiv2\",\n        \"//:go_grpc\",\n        \"//protoc-gen-grpc-gateway:go_gen_grpc_gateway\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\",\n    proto = \":examplepb_proto\",\n    deps = [\n        \"//examples/internal/proto/oneofenum\",\n        \"//examples/internal/proto/pathenum\",\n        \"//examples/internal/proto/sub\",\n        \"//examples/internal/proto/sub2\",\n        \"//protoc-gen-openapiv2/options\",\n        \"@com_github_golang_protobuf//descriptor:go_default_library_gen\",  # keep\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n        \"@org_golang_google_genproto_googleapis_api//httpbody\",\n        \"@org_golang_google_genproto_googleapis_api//visibility\",\n        \"@org_golang_google_genproto_googleapis_rpc//status\",\n    ],\n)\n\n#keep\ngo_proto_library(\n    name = \"examplepb_opaque_go_proto\",\n    compilers = [\n        \"//:go_apiv2_opaque\",\n        \"//:go_grpc\",\n        \"//protoc-gen-grpc-gateway:go_gen_grpc_gateway_opaque\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\",\n    proto = \":examplepb_opaque_proto\",\n    deps = [\n        \"//examples/internal/proto/sub\",\n        \"@com_github_golang_protobuf//descriptor:go_default_library_gen\",\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n    ],\n)\n\ngo_library(\n    name = \"examplepb\",\n    srcs = [\n        \"openapi_merge_a.pb.go\",\n        \"openapi_merge_a.pb.gw.go\",\n        \"openapi_merge_a_grpc.pb.go\",\n        \"openapi_merge_b.pb.go\",\n        \"openapi_merge_b.pb.gw.go\",\n        \"openapi_merge_b_grpc.pb.go\",\n    ],\n    embed = [\n        \":examplepb_go_proto\",\n        \":examplepb_opaque_go_proto\",  #keep\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\",\n    deps = [\n        \"//runtime\",\n        \"//utilities\",\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n        \"@org_golang_google_grpc//:grpc\",\n        \"@org_golang_google_grpc//codes\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_grpc//metadata\",\n        \"@org_golang_google_grpc//status\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//reflect/protoreflect\",\n        \"@org_golang_google_protobuf//runtime/protoimpl\",\n    ],\n)\n\nprotoc_gen_openapiv2(\n    name = \"examplepb_protoc_gen_openapiv2\",\n    proto = \":examplepb_proto\",\n)\n\nprotoc_gen_openapiv2(\n    name = \"examplepb_protoc_gen_openapiv2_merged\",\n    proto = \":examplepb_proto\",\n    single_output = True,  # Outputs a single swagger.json file.\n)\n\nprotoc_gen_openapiv2(\n    name = \"examplepb_openapi_merge\",\n    proto = \":openapi_merge_proto\",\n    single_output = True,  # Outputs a single swagger.json file.\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":examplepb\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/a_bit_of_everything.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/a_bit_of_everything.proto\n\npackage examplepb\n\nimport (\n\toneofenum \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum\"\n\tpathenum \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\"\n\tsub \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\tsub2 \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\"\n\t_ \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tstatus \"google.golang.org/genproto/googleapis/rpc/status\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\ttimestamppb \"google.golang.org/protobuf/types/known/timestamppb\"\n\twrapperspb \"google.golang.org/protobuf/types/known/wrapperspb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// NumericEnum is one or zero.\ntype NumericEnum int32\n\nconst (\n\t// ZERO means 0\n\tNumericEnum_ZERO NumericEnum = 0\n\t// ONE means 1\n\tNumericEnum_ONE NumericEnum = 1\n)\n\n// Enum value maps for NumericEnum.\nvar (\n\tNumericEnum_name = map[int32]string{\n\t\t0: \"ZERO\",\n\t\t1: \"ONE\",\n\t}\n\tNumericEnum_value = map[string]int32{\n\t\t\"ZERO\": 0,\n\t\t\"ONE\":  1,\n\t}\n)\n\nfunc (x NumericEnum) Enum() *NumericEnum {\n\tp := new(NumericEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x NumericEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (NumericEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[0].Descriptor()\n}\n\nfunc (NumericEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[0]\n}\n\nfunc (x NumericEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use NumericEnum.Descriptor instead.\nfunc (NumericEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0}\n}\n\n// Ignoring lint warnings as this enum type exist to validate proper functionality\n// for projects that don't follow these lint rules.\n// buf:lint:ignore ENUM_PASCAL_CASE\ntype SnakeCaseEnum int32\n\nconst (\n\t// buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n\tSnakeCaseEnum_value_c SnakeCaseEnum = 0\n\t// buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n\tSnakeCaseEnum_value_d SnakeCaseEnum = 1\n)\n\n// Enum value maps for SnakeCaseEnum.\nvar (\n\tSnakeCaseEnum_name = map[int32]string{\n\t\t0: \"value_c\",\n\t\t1: \"value_d\",\n\t}\n\tSnakeCaseEnum_value = map[string]int32{\n\t\t\"value_c\": 0,\n\t\t\"value_d\": 1,\n\t}\n)\n\nfunc (x SnakeCaseEnum) Enum() *SnakeCaseEnum {\n\tp := new(SnakeCaseEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x SnakeCaseEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SnakeCaseEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1].Descriptor()\n}\n\nfunc (SnakeCaseEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1]\n}\n\nfunc (x SnakeCaseEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use SnakeCaseEnum.Descriptor instead.\nfunc (SnakeCaseEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{1}\n}\n\n// Ignoring lint warnings as this enum type exist to validate proper functionality\n// for projects that don't follow these lint rules.\n// buf:lint:ignore ENUM_PASCAL_CASE\ntype SnakeCase_0Enum int32\n\nconst (\n\t// buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n\tSnakeCase_0Enum_value_e SnakeCase_0Enum = 0\n\t// buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n\tSnakeCase_0Enum_value_f SnakeCase_0Enum = 1\n)\n\n// Enum value maps for SnakeCase_0Enum.\nvar (\n\tSnakeCase_0Enum_name = map[int32]string{\n\t\t0: \"value_e\",\n\t\t1: \"value_f\",\n\t}\n\tSnakeCase_0Enum_value = map[string]int32{\n\t\t\"value_e\": 0,\n\t\t\"value_f\": 1,\n\t}\n)\n\nfunc (x SnakeCase_0Enum) Enum() *SnakeCase_0Enum {\n\tp := new(SnakeCase_0Enum)\n\t*p = x\n\treturn p\n}\n\nfunc (x SnakeCase_0Enum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SnakeCase_0Enum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[2].Descriptor()\n}\n\nfunc (SnakeCase_0Enum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[2]\n}\n\nfunc (x SnakeCase_0Enum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use SnakeCase_0Enum.Descriptor instead.\nfunc (SnakeCase_0Enum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2}\n}\n\n// DeepEnum is one or zero.\ntype ABitOfEverything_Nested_DeepEnum int32\n\nconst (\n\t// FALSE is false.\n\tABitOfEverything_Nested_FALSE ABitOfEverything_Nested_DeepEnum = 0\n\t// TRUE is true.\n\tABitOfEverything_Nested_TRUE ABitOfEverything_Nested_DeepEnum = 1\n)\n\n// Enum value maps for ABitOfEverything_Nested_DeepEnum.\nvar (\n\tABitOfEverything_Nested_DeepEnum_name = map[int32]string{\n\t\t0: \"FALSE\",\n\t\t1: \"TRUE\",\n\t}\n\tABitOfEverything_Nested_DeepEnum_value = map[string]int32{\n\t\t\"FALSE\": 0,\n\t\t\"TRUE\":  1,\n\t}\n)\n\nfunc (x ABitOfEverything_Nested_DeepEnum) Enum() *ABitOfEverything_Nested_DeepEnum {\n\tp := new(ABitOfEverything_Nested_DeepEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x ABitOfEverything_Nested_DeepEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (ABitOfEverything_Nested_DeepEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[3].Descriptor()\n}\n\nfunc (ABitOfEverything_Nested_DeepEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[3]\n}\n\nfunc (x ABitOfEverything_Nested_DeepEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use ABitOfEverything_Nested_DeepEnum.Descriptor instead.\nfunc (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2, 0, 0}\n}\n\ntype ErrorResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tCorrelationId string       `protobuf:\"bytes,1,opt,name=correlationId,proto3\" json:\"correlationId,omitempty\"`\n\tError         *ErrorObject `protobuf:\"bytes,2,opt,name=error,proto3\" json:\"error,omitempty\"`\n}\n\nfunc (x *ErrorResponse) Reset() {\n\t*x = ErrorResponse{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ErrorResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ErrorResponse) ProtoMessage() {}\n\nfunc (x *ErrorResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ErrorResponse.ProtoReflect.Descriptor instead.\nfunc (*ErrorResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *ErrorResponse) GetCorrelationId() string {\n\tif x != nil {\n\t\treturn x.CorrelationId\n\t}\n\treturn \"\"\n}\n\nfunc (x *ErrorResponse) GetError() *ErrorObject {\n\tif x != nil {\n\t\treturn x.Error\n\t}\n\treturn nil\n}\n\ntype ErrorObject struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tCode    int32  `protobuf:\"varint,1,opt,name=code,proto3\" json:\"code,omitempty\"`\n\tMessage string `protobuf:\"bytes,2,opt,name=message,proto3\" json:\"message,omitempty\"`\n}\n\nfunc (x *ErrorObject) Reset() {\n\t*x = ErrorObject{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ErrorObject) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ErrorObject) ProtoMessage() {}\n\nfunc (x *ErrorObject) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ErrorObject.ProtoReflect.Descriptor instead.\nfunc (*ErrorObject) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *ErrorObject) GetCode() int32 {\n\tif x != nil {\n\t\treturn x.Code\n\t}\n\treturn 0\n}\n\nfunc (x *ErrorObject) GetMessage() string {\n\tif x != nil {\n\t\treturn x.Message\n\t}\n\treturn \"\"\n}\n\n// Intentionally complicated message type to cover many features of Protobuf.\ntype ABitOfEverything struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSingleNested        *ABitOfEverything_Nested                `protobuf:\"bytes,25,opt,name=single_nested,json=singleNested,proto3\" json:\"single_nested,omitempty\"`\n\tUuid                string                                  `protobuf:\"bytes,1,opt,name=uuid,proto3\" json:\"uuid,omitempty\"`\n\tNested              []*ABitOfEverything_Nested              `protobuf:\"bytes,2,rep,name=nested,proto3\" json:\"nested,omitempty\"`\n\tFloatValue          float32                                 `protobuf:\"fixed32,3,opt,name=float_value,json=floatValue,proto3\" json:\"float_value,omitempty\"`\n\tDoubleValue         float64                                 `protobuf:\"fixed64,4,opt,name=double_value,json=doubleValue,proto3\" json:\"double_value,omitempty\"`\n\tInt64Value          int64                                   `protobuf:\"varint,5,opt,name=int64_value,json=int64Value,proto3\" json:\"int64_value,omitempty\"`\n\tUint64Value         uint64                                  `protobuf:\"varint,6,opt,name=uint64_value,json=uint64Value,proto3\" json:\"uint64_value,omitempty\"`\n\tInt32Value          int32                                   `protobuf:\"varint,7,opt,name=int32_value,json=int32Value,proto3\" json:\"int32_value,omitempty\"`\n\tFixed64Value        uint64                                  `protobuf:\"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3\" json:\"fixed64_value,omitempty\"`\n\tFixed32Value        uint32                                  `protobuf:\"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3\" json:\"fixed32_value,omitempty\"`\n\tBoolValue           bool                                    `protobuf:\"varint,10,opt,name=bool_value,json=boolValue,proto3\" json:\"bool_value,omitempty\"`\n\tStringValue         string                                  `protobuf:\"bytes,11,opt,name=string_value,json=stringValue,proto3\" json:\"string_value,omitempty\"`\n\tBytesValue          []byte                                  `protobuf:\"bytes,29,opt,name=bytes_value,json=bytesValue,proto3\" json:\"bytes_value,omitempty\"`\n\tUint32Value         uint32                                  `protobuf:\"varint,13,opt,name=uint32_value,json=uint32Value,proto3\" json:\"uint32_value,omitempty\"`\n\tEnumValue           NumericEnum                             `protobuf:\"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum\" json:\"enum_value,omitempty\"`\n\tPathEnumValue       pathenum.PathEnum                       `protobuf:\"varint,30,opt,name=path_enum_value,json=pathEnumValue,proto3,enum=grpc.gateway.examples.internal.pathenum.PathEnum\" json:\"path_enum_value,omitempty\"`\n\tNestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:\"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,proto3,enum=grpc.gateway.examples.internal.pathenum.MessagePathEnum_NestedPathEnum\" json:\"nested_path_enum_value,omitempty\"`\n\tSfixed32Value       int32                                   `protobuf:\"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3\" json:\"sfixed32_value,omitempty\"`\n\tSfixed64Value       int64                                   `protobuf:\"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3\" json:\"sfixed64_value,omitempty\"`\n\tSint32Value         int32                                   `protobuf:\"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3\" json:\"sint32_value,omitempty\"`\n\tSint64Value         int64                                   `protobuf:\"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3\" json:\"sint64_value,omitempty\"`\n\tRepeatedStringValue []string                                `protobuf:\"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3\" json:\"repeated_string_value,omitempty\"`\n\t// Types that are assignable to OneofValue:\n\t//\n\t//\t*ABitOfEverything_OneofEmpty\n\t//\t*ABitOfEverything_OneofString\n\tOneofValue isABitOfEverything_OneofValue `protobuf_oneof:\"oneof_value\"`\n\t// map of numeric enum\n\tMapValue map[string]NumericEnum `protobuf:\"bytes,22,rep,name=map_value,json=mapValue,proto3\" json:\"map_value,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum\"`\n\t// map of string  (This comment is overridden by the field annotation)\n\tMappedStringValue        map[string]string                   `protobuf:\"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3\" json:\"mapped_string_value,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMappedNestedValue        map[string]*ABitOfEverything_Nested `protobuf:\"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3\" json:\"mapped_nested_value,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tNonConventionalNameValue string                              `protobuf:\"bytes,26,opt,name=nonConventionalNameValue,proto3\" json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue           *timestamppb.Timestamp              `protobuf:\"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3\" json:\"timestamp_value,omitempty\"`\n\t// repeated enum value. it is comma-separated in query\n\tRepeatedEnumValue []NumericEnum `protobuf:\"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum\" json:\"repeated_enum_value,omitempty\"`\n\t// repeated numeric enum comment (This comment is overridden by the field annotation)\n\tRepeatedEnumAnnotation []NumericEnum `protobuf:\"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum\" json:\"repeated_enum_annotation,omitempty\"`\n\t// numeric enum comment (This comment is overridden by the field annotation)\n\tEnumValueAnnotation NumericEnum `protobuf:\"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum\" json:\"enum_value_annotation,omitempty\"`\n\t// repeated string comment (This comment is overridden by the field annotation)\n\tRepeatedStringAnnotation []string `protobuf:\"bytes,34,rep,name=repeated_string_annotation,json=repeatedStringAnnotation,proto3\" json:\"repeated_string_annotation,omitempty\"`\n\t// repeated nested object comment (This comment is overridden by the field annotation)\n\tRepeatedNestedAnnotation []*ABitOfEverything_Nested `protobuf:\"bytes,35,rep,name=repeated_nested_annotation,json=repeatedNestedAnnotation,proto3\" json:\"repeated_nested_annotation,omitempty\"`\n\t// nested object comments (This comment is overridden by the field annotation)\n\tNestedAnnotation  *ABitOfEverything_Nested `protobuf:\"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3\" json:\"nested_annotation,omitempty\"`\n\tInt64OverrideType int64                    `protobuf:\"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3\" json:\"int64_override_type,omitempty\"`\n\t// mark a field as required in Open API definition\n\tRequiredStringViaFieldBehaviorAnnotation string `protobuf:\"bytes,38,opt,name=required_string_via_field_behavior_annotation,json=requiredStringViaFieldBehaviorAnnotation,proto3\" json:\"required_string_via_field_behavior_annotation,omitempty\"`\n\t// mark a field as readonly in Open API definition\n\tOutputOnlyStringViaFieldBehaviorAnnotation string  `protobuf:\"bytes,39,opt,name=output_only_string_via_field_behavior_annotation,json=outputOnlyStringViaFieldBehaviorAnnotation,proto3\" json:\"output_only_string_via_field_behavior_annotation,omitempty\"`\n\tOptionalStringValue                        *string `protobuf:\"bytes,40,opt,name=optional_string_value,json=optionalStringValue,proto3,oneof\" json:\"optional_string_value,omitempty\"`\n\t// Test openapiv2 generation of repeated fields\n\tProductId []string `protobuf:\"bytes,41,rep,name=product_id,json=productId,proto3\" json:\"product_id,omitempty\"`\n\t// Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n\tOptionalStringField   string `protobuf:\"bytes,42,opt,name=optional_string_field,json=optionalStringField,proto3\" json:\"optional_string_field,omitempty\"`\n\tRequiredStringField_1 string `protobuf:\"bytes,43,opt,name=required_string_field_1,json=requiredStringField1,proto3\" json:\"required_string_field_1,omitempty\"`\n\tRequiredStringField_2 string `protobuf:\"bytes,44,opt,name=required_string_field_2,json=requiredStringField2,proto3\" json:\"required_string_field_2,omitempty\"`\n\t// Test openapiv2 handling of required json_name fields\n\tRequiredFieldBehaviorJsonName string `protobuf:\"bytes,45,opt,name=required_field_behavior_json_name,json=required_field_behavior_json_name_custom,proto3\" json:\"required_field_behavior_json_name,omitempty\"`\n\tRequiredFieldSchemaJsonName   string `protobuf:\"bytes,46,opt,name=required_field_schema_json_name,json=required_field_schema_json_name_custom,proto3\" json:\"required_field_schema_json_name,omitempty\"`\n\tTrailingOnly                  string `protobuf:\"bytes,47,opt,name=trailing_only,json=trailingOnly,proto3\" json:\"trailing_only,omitempty\"`            // Trailing only\n\tTrailingOnlyDot               string `protobuf:\"bytes,48,opt,name=trailing_only_dot,json=trailingOnlyDot,proto3\" json:\"trailing_only_dot,omitempty\"` // Trailing only dot.\n\t// Leading both\n\tTrailingBoth string `protobuf:\"bytes,49,opt,name=trailing_both,json=trailingBoth,proto3\" json:\"trailing_both,omitempty\"` // Trailing both.\n\t// Leading multiline\n\t//\n\t// This is an example of a multi-line comment.\n\tTrailingMultiline string `protobuf:\"bytes,50,opt,name=trailing_multiline,json=trailingMultiline,proto3\" json:\"trailing_multiline,omitempty\"` // Trailing multiline.\n\t// Specify a custom format of repeated field items\n\tUuids []string `protobuf:\"bytes,51,rep,name=uuids,proto3\" json:\"uuids,omitempty\"`\n}\n\nfunc (x *ABitOfEverything) Reset() {\n\t*x = ABitOfEverything{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ABitOfEverything) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ABitOfEverything) ProtoMessage() {}\n\nfunc (x *ABitOfEverything) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ABitOfEverything.ProtoReflect.Descriptor instead.\nfunc (*ABitOfEverything) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.SingleNested\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetUuid() string {\n\tif x != nil {\n\t\treturn x.Uuid\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetNested() []*ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.Nested\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetFloatValue() float32 {\n\tif x != nil {\n\t\treturn x.FloatValue\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetDoubleValue() float64 {\n\tif x != nil {\n\t\treturn x.DoubleValue\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetInt64Value() int64 {\n\tif x != nil {\n\t\treturn x.Int64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetUint64Value() uint64 {\n\tif x != nil {\n\t\treturn x.Uint64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetInt32Value() int32 {\n\tif x != nil {\n\t\treturn x.Int32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetFixed64Value() uint64 {\n\tif x != nil {\n\t\treturn x.Fixed64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetFixed32Value() uint32 {\n\tif x != nil {\n\t\treturn x.Fixed32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetBoolValue() bool {\n\tif x != nil {\n\t\treturn x.BoolValue\n\t}\n\treturn false\n}\n\nfunc (x *ABitOfEverything) GetStringValue() string {\n\tif x != nil {\n\t\treturn x.StringValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetBytesValue() []byte {\n\tif x != nil {\n\t\treturn x.BytesValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetUint32Value() uint32 {\n\tif x != nil {\n\t\treturn x.Uint32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetEnumValue() NumericEnum {\n\tif x != nil {\n\t\treturn x.EnumValue\n\t}\n\treturn NumericEnum_ZERO\n}\n\nfunc (x *ABitOfEverything) GetPathEnumValue() pathenum.PathEnum {\n\tif x != nil {\n\t\treturn x.PathEnumValue\n\t}\n\treturn pathenum.PathEnum(0)\n}\n\nfunc (x *ABitOfEverything) GetNestedPathEnumValue() pathenum.MessagePathEnum_NestedPathEnum {\n\tif x != nil {\n\t\treturn x.NestedPathEnumValue\n\t}\n\treturn pathenum.MessagePathEnum_NestedPathEnum(0)\n}\n\nfunc (x *ABitOfEverything) GetSfixed32Value() int32 {\n\tif x != nil {\n\t\treturn x.Sfixed32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetSfixed64Value() int64 {\n\tif x != nil {\n\t\treturn x.Sfixed64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetSint32Value() int32 {\n\tif x != nil {\n\t\treturn x.Sint32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetSint64Value() int64 {\n\tif x != nil {\n\t\treturn x.Sint64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetRepeatedStringValue() []string {\n\tif x != nil {\n\t\treturn x.RepeatedStringValue\n\t}\n\treturn nil\n}\n\nfunc (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue {\n\tif m != nil {\n\t\treturn m.OneofValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetOneofEmpty() *emptypb.Empty {\n\tif x, ok := x.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok {\n\t\treturn x.OneofEmpty\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetOneofString() string {\n\tif x, ok := x.GetOneofValue().(*ABitOfEverything_OneofString); ok {\n\t\treturn x.OneofString\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetMapValue() map[string]NumericEnum {\n\tif x != nil {\n\t\treturn x.MapValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetMappedStringValue() map[string]string {\n\tif x != nil {\n\t\treturn x.MappedStringValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.MappedNestedValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetNonConventionalNameValue() string {\n\tif x != nil {\n\t\treturn x.NonConventionalNameValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetTimestampValue() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.TimestampValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum {\n\tif x != nil {\n\t\treturn x.RepeatedEnumValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum {\n\tif x != nil {\n\t\treturn x.RepeatedEnumAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetEnumValueAnnotation() NumericEnum {\n\tif x != nil {\n\t\treturn x.EnumValueAnnotation\n\t}\n\treturn NumericEnum_ZERO\n}\n\nfunc (x *ABitOfEverything) GetRepeatedStringAnnotation() []string {\n\tif x != nil {\n\t\treturn x.RepeatedStringAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.RepeatedNestedAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.NestedAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetInt64OverrideType() int64 {\n\tif x != nil {\n\t\treturn x.Int64OverrideType\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetRequiredStringViaFieldBehaviorAnnotation() string {\n\tif x != nil {\n\t\treturn x.RequiredStringViaFieldBehaviorAnnotation\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetOutputOnlyStringViaFieldBehaviorAnnotation() string {\n\tif x != nil {\n\t\treturn x.OutputOnlyStringViaFieldBehaviorAnnotation\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetOptionalStringValue() string {\n\tif x != nil && x.OptionalStringValue != nil {\n\t\treturn *x.OptionalStringValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetProductId() []string {\n\tif x != nil {\n\t\treturn x.ProductId\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetOptionalStringField() string {\n\tif x != nil {\n\t\treturn x.OptionalStringField\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetRequiredStringField_1() string {\n\tif x != nil {\n\t\treturn x.RequiredStringField_1\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetRequiredStringField_2() string {\n\tif x != nil {\n\t\treturn x.RequiredStringField_2\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetRequiredFieldBehaviorJsonName() string {\n\tif x != nil {\n\t\treturn x.RequiredFieldBehaviorJsonName\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetRequiredFieldSchemaJsonName() string {\n\tif x != nil {\n\t\treturn x.RequiredFieldSchemaJsonName\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetTrailingOnly() string {\n\tif x != nil {\n\t\treturn x.TrailingOnly\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetTrailingOnlyDot() string {\n\tif x != nil {\n\t\treturn x.TrailingOnlyDot\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetTrailingBoth() string {\n\tif x != nil {\n\t\treturn x.TrailingBoth\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetTrailingMultiline() string {\n\tif x != nil {\n\t\treturn x.TrailingMultiline\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetUuids() []string {\n\tif x != nil {\n\t\treturn x.Uuids\n\t}\n\treturn nil\n}\n\ntype isABitOfEverything_OneofValue interface {\n\tisABitOfEverything_OneofValue()\n}\n\ntype ABitOfEverything_OneofEmpty struct {\n\tOneofEmpty *emptypb.Empty `protobuf:\"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof\"`\n}\n\ntype ABitOfEverything_OneofString struct {\n\tOneofString string `protobuf:\"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof\"`\n}\n\nfunc (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {}\n\nfunc (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {}\n\n// ABitOfEverythingRepeated is used to validate repeated path parameter functionality\ntype ABitOfEverythingRepeated struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// repeated values. they are comma-separated in path\n\tPathRepeatedFloatValue    []float32     `protobuf:\"fixed32,1,rep,packed,name=path_repeated_float_value,json=pathRepeatedFloatValue,proto3\" json:\"path_repeated_float_value,omitempty\"`\n\tPathRepeatedDoubleValue   []float64     `protobuf:\"fixed64,2,rep,packed,name=path_repeated_double_value,json=pathRepeatedDoubleValue,proto3\" json:\"path_repeated_double_value,omitempty\"`\n\tPathRepeatedInt64Value    []int64       `protobuf:\"varint,3,rep,packed,name=path_repeated_int64_value,json=pathRepeatedInt64Value,proto3\" json:\"path_repeated_int64_value,omitempty\"`\n\tPathRepeatedUint64Value   []uint64      `protobuf:\"varint,4,rep,packed,name=path_repeated_uint64_value,json=pathRepeatedUint64Value,proto3\" json:\"path_repeated_uint64_value,omitempty\"`\n\tPathRepeatedInt32Value    []int32       `protobuf:\"varint,5,rep,packed,name=path_repeated_int32_value,json=pathRepeatedInt32Value,proto3\" json:\"path_repeated_int32_value,omitempty\"`\n\tPathRepeatedFixed64Value  []uint64      `protobuf:\"fixed64,6,rep,packed,name=path_repeated_fixed64_value,json=pathRepeatedFixed64Value,proto3\" json:\"path_repeated_fixed64_value,omitempty\"`\n\tPathRepeatedFixed32Value  []uint32      `protobuf:\"fixed32,7,rep,packed,name=path_repeated_fixed32_value,json=pathRepeatedFixed32Value,proto3\" json:\"path_repeated_fixed32_value,omitempty\"`\n\tPathRepeatedBoolValue     []bool        `protobuf:\"varint,8,rep,packed,name=path_repeated_bool_value,json=pathRepeatedBoolValue,proto3\" json:\"path_repeated_bool_value,omitempty\"`\n\tPathRepeatedStringValue   []string      `protobuf:\"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue,proto3\" json:\"path_repeated_string_value,omitempty\"`\n\tPathRepeatedBytesValue    [][]byte      `protobuf:\"bytes,10,rep,name=path_repeated_bytes_value,json=pathRepeatedBytesValue,proto3\" json:\"path_repeated_bytes_value,omitempty\"`\n\tPathRepeatedUint32Value   []uint32      `protobuf:\"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value,proto3\" json:\"path_repeated_uint32_value,omitempty\"`\n\tPathRepeatedEnumValue     []NumericEnum `protobuf:\"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum\" json:\"path_repeated_enum_value,omitempty\"`\n\tPathRepeatedSfixed32Value []int32       `protobuf:\"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value,proto3\" json:\"path_repeated_sfixed32_value,omitempty\"`\n\tPathRepeatedSfixed64Value []int64       `protobuf:\"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value,proto3\" json:\"path_repeated_sfixed64_value,omitempty\"`\n\tPathRepeatedSint32Value   []int32       `protobuf:\"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value,proto3\" json:\"path_repeated_sint32_value,omitempty\"`\n\tPathRepeatedSint64Value   []int64       `protobuf:\"zigzag64,16,rep,packed,name=path_repeated_sint64_value,json=pathRepeatedSint64Value,proto3\" json:\"path_repeated_sint64_value,omitempty\"`\n}\n\nfunc (x *ABitOfEverythingRepeated) Reset() {\n\t*x = ABitOfEverythingRepeated{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ABitOfEverythingRepeated) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ABitOfEverythingRepeated) ProtoMessage() {}\n\nfunc (x *ABitOfEverythingRepeated) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ABitOfEverythingRepeated.ProtoReflect.Descriptor instead.\nfunc (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedFloatValue() []float32 {\n\tif x != nil {\n\t\treturn x.PathRepeatedFloatValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedDoubleValue() []float64 {\n\tif x != nil {\n\t\treturn x.PathRepeatedDoubleValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedInt64Value() []int64 {\n\tif x != nil {\n\t\treturn x.PathRepeatedInt64Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedUint64Value() []uint64 {\n\tif x != nil {\n\t\treturn x.PathRepeatedUint64Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedInt32Value() []int32 {\n\tif x != nil {\n\t\treturn x.PathRepeatedInt32Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedFixed64Value() []uint64 {\n\tif x != nil {\n\t\treturn x.PathRepeatedFixed64Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedFixed32Value() []uint32 {\n\tif x != nil {\n\t\treturn x.PathRepeatedFixed32Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedBoolValue() []bool {\n\tif x != nil {\n\t\treturn x.PathRepeatedBoolValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedStringValue() []string {\n\tif x != nil {\n\t\treturn x.PathRepeatedStringValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedBytesValue() [][]byte {\n\tif x != nil {\n\t\treturn x.PathRepeatedBytesValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedUint32Value() []uint32 {\n\tif x != nil {\n\t\treturn x.PathRepeatedUint32Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedEnumValue() []NumericEnum {\n\tif x != nil {\n\t\treturn x.PathRepeatedEnumValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedSfixed32Value() []int32 {\n\tif x != nil {\n\t\treturn x.PathRepeatedSfixed32Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedSfixed64Value() []int64 {\n\tif x != nil {\n\t\treturn x.PathRepeatedSfixed64Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedSint32Value() []int32 {\n\tif x != nil {\n\t\treturn x.PathRepeatedSint32Value\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverythingRepeated) GetPathRepeatedSint64Value() []int64 {\n\tif x != nil {\n\t\treturn x.PathRepeatedSint64Value\n\t}\n\treturn nil\n}\n\ntype CheckStatusResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tStatus *status.Status `protobuf:\"bytes,1,opt,name=status,proto3\" json:\"status,omitempty\"`\n}\n\nfunc (x *CheckStatusResponse) Reset() {\n\t*x = CheckStatusResponse{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *CheckStatusResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CheckStatusResponse) ProtoMessage() {}\n\nfunc (x *CheckStatusResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CheckStatusResponse.ProtoReflect.Descriptor instead.\nfunc (*CheckStatusResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *CheckStatusResponse) GetStatus() *status.Status {\n\tif x != nil {\n\t\treturn x.Status\n\t}\n\treturn nil\n}\n\ntype Body struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n}\n\nfunc (x *Body) Reset() {\n\t*x = Body{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Body) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Body) ProtoMessage() {}\n\nfunc (x *Body) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Body.ProtoReflect.Descriptor instead.\nfunc (*Body) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{5}\n}\n\nfunc (x *Body) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\ntype MessageWithBody struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tId   string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tData *Body  `protobuf:\"bytes,2,opt,name=data,proto3\" json:\"data,omitempty\"`\n}\n\nfunc (x *MessageWithBody) Reset() {\n\t*x = MessageWithBody{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *MessageWithBody) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*MessageWithBody) ProtoMessage() {}\n\nfunc (x *MessageWithBody) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use MessageWithBody.ProtoReflect.Descriptor instead.\nfunc (*MessageWithBody) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{6}\n}\n\nfunc (x *MessageWithBody) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *MessageWithBody) GetData() *Body {\n\tif x != nil {\n\t\treturn x.Data\n\t}\n\treturn nil\n}\n\n// UpdateV2Request request for update includes the message and the update mask\ntype UpdateV2Request struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tAbe *ABitOfEverything `protobuf:\"bytes,1,opt,name=abe,proto3\" json:\"abe,omitempty\"`\n\t// The paths to update.\n\tUpdateMask *fieldmaskpb.FieldMask `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n}\n\nfunc (x *UpdateV2Request) Reset() {\n\t*x = UpdateV2Request{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[7]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UpdateV2Request) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UpdateV2Request) ProtoMessage() {}\n\nfunc (x *UpdateV2Request) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[7]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UpdateV2Request.ProtoReflect.Descriptor instead.\nfunc (*UpdateV2Request) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{7}\n}\n\nfunc (x *UpdateV2Request) GetAbe() *ABitOfEverything {\n\tif x != nil {\n\t\treturn x.Abe\n\t}\n\treturn nil\n}\n\nfunc (x *UpdateV2Request) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\n// An example resource type from AIP-123 used to test the behavior described in\n// the CreateBookRequest message.\n//\n// See: https://google.aip.dev/123\ntype Book struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// The resource name of the book.\n\t//\n\t// Format: `publishers/{publisher}/books/{book}`\n\t//\n\t// Example: `publishers/1257894000000000000/books/my-book`\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\t// Output only. The book's ID.\n\tId string `protobuf:\"bytes,2,opt,name=id,proto3\" json:\"id,omitempty\"`\n\t// Output only. Creation time of the book.\n\tCreateTime *timestamppb.Timestamp `protobuf:\"bytes,3,opt,name=create_time,json=createTime,proto3\" json:\"create_time,omitempty\"`\n}\n\nfunc (x *Book) Reset() {\n\t*x = Book{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[8]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Book) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Book) ProtoMessage() {}\n\nfunc (x *Book) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[8]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Book.ProtoReflect.Descriptor instead.\nfunc (*Book) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{8}\n}\n\nfunc (x *Book) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *Book) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *Book) GetCreateTime() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.CreateTime\n\t}\n\treturn nil\n}\n\n// A standard Create message from AIP-133 with a user-specified ID.\n// The user-specified ID (the `book_id` field in this example) must become a\n// query parameter in the OpenAPI spec.\n//\n// See: https://google.aip.dev/133#user-specified-ids\ntype CreateBookRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// The publisher in which to create the book.\n\t//\n\t// Format: `publishers/{publisher}`\n\t//\n\t// Example: `publishers/1257894000000000000`\n\tParent string `protobuf:\"bytes,1,opt,name=parent,proto3\" json:\"parent,omitempty\"`\n\t// The book to create.\n\tBook *Book `protobuf:\"bytes,2,opt,name=book,proto3\" json:\"book,omitempty\"`\n\t// The ID to use for the book.\n\t//\n\t// This must start with an alphanumeric character.\n\tBookId string `protobuf:\"bytes,3,opt,name=book_id,json=bookId,proto3\" json:\"book_id,omitempty\"`\n}\n\nfunc (x *CreateBookRequest) Reset() {\n\t*x = CreateBookRequest{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[9]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *CreateBookRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CreateBookRequest) ProtoMessage() {}\n\nfunc (x *CreateBookRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[9]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CreateBookRequest.ProtoReflect.Descriptor instead.\nfunc (*CreateBookRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{9}\n}\n\nfunc (x *CreateBookRequest) GetParent() string {\n\tif x != nil {\n\t\treturn x.Parent\n\t}\n\treturn \"\"\n}\n\nfunc (x *CreateBookRequest) GetBook() *Book {\n\tif x != nil {\n\t\treturn x.Book\n\t}\n\treturn nil\n}\n\nfunc (x *CreateBookRequest) GetBookId() string {\n\tif x != nil {\n\t\treturn x.BookId\n\t}\n\treturn \"\"\n}\n\n// A standard Update message from AIP-134\n//\n// See: https://google.aip.dev/134#request-message\ntype UpdateBookRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// The book to update.\n\t//\n\t// The book's `name` field is used to identify the book to be updated.\n\t// Format: publishers/{publisher}/books/{book}\n\tBook *Book `protobuf:\"bytes,1,opt,name=book,proto3\" json:\"book,omitempty\"`\n\t// The list of fields to be updated.\n\tUpdateMask *fieldmaskpb.FieldMask `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n\t// If set to true, and the book is not found, a new book will be created.\n\t// In this situation, `update_mask` is ignored.\n\tAllowMissing bool `protobuf:\"varint,3,opt,name=allow_missing,json=allowMissing,proto3\" json:\"allow_missing,omitempty\"`\n}\n\nfunc (x *UpdateBookRequest) Reset() {\n\t*x = UpdateBookRequest{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UpdateBookRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UpdateBookRequest) ProtoMessage() {}\n\nfunc (x *UpdateBookRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UpdateBookRequest.ProtoReflect.Descriptor instead.\nfunc (*UpdateBookRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{10}\n}\n\nfunc (x *UpdateBookRequest) GetBook() *Book {\n\tif x != nil {\n\t\treturn x.Book\n\t}\n\treturn nil\n}\n\nfunc (x *UpdateBookRequest) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\nfunc (x *UpdateBookRequest) GetAllowMissing() bool {\n\tif x != nil {\n\t\treturn x.AllowMissing\n\t}\n\treturn false\n}\n\ntype SnakeEnumRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tWhat  SnakeCaseEnum               `protobuf:\"varint,1,opt,name=what,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.SnakeCaseEnum\" json:\"what,omitempty\"`\n\tWho   SnakeCase_0Enum             `protobuf:\"varint,2,opt,name=who,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.SnakeCase_0Enum\" json:\"who,omitempty\"`\n\tWhere pathenum.SnakeCaseForImport `protobuf:\"varint,3,opt,name=where,proto3,enum=grpc.gateway.examples.internal.pathenum.SnakeCaseForImport\" json:\"where,omitempty\"`\n}\n\nfunc (x *SnakeEnumRequest) Reset() {\n\t*x = SnakeEnumRequest{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SnakeEnumRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SnakeEnumRequest) ProtoMessage() {}\n\nfunc (x *SnakeEnumRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use SnakeEnumRequest.ProtoReflect.Descriptor instead.\nfunc (*SnakeEnumRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{11}\n}\n\nfunc (x *SnakeEnumRequest) GetWhat() SnakeCaseEnum {\n\tif x != nil {\n\t\treturn x.What\n\t}\n\treturn SnakeCaseEnum_value_c\n}\n\nfunc (x *SnakeEnumRequest) GetWho() SnakeCase_0Enum {\n\tif x != nil {\n\t\treturn x.Who\n\t}\n\treturn SnakeCase_0Enum_value_e\n}\n\nfunc (x *SnakeEnumRequest) GetWhere() pathenum.SnakeCaseForImport {\n\tif x != nil {\n\t\treturn x.Where\n\t}\n\treturn pathenum.SnakeCaseForImport(0)\n}\n\ntype SnakeEnumResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n}\n\nfunc (x *SnakeEnumResponse) Reset() {\n\t*x = SnakeEnumResponse{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[12]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SnakeEnumResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SnakeEnumResponse) ProtoMessage() {}\n\nfunc (x *SnakeEnumResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[12]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use SnakeEnumResponse.ProtoReflect.Descriptor instead.\nfunc (*SnakeEnumResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{12}\n}\n\n// Required message type -> OpenAPI\n// https://github.com/grpc-ecosystem/grpc-gateway/issues/2837\ntype RequiredMessageTypeRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tId  string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tFoo *Foo   `protobuf:\"bytes,2,opt,name=foo,proto3\" json:\"foo,omitempty\"`\n}\n\nfunc (x *RequiredMessageTypeRequest) Reset() {\n\t*x = RequiredMessageTypeRequest{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *RequiredMessageTypeRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*RequiredMessageTypeRequest) ProtoMessage() {}\n\nfunc (x *RequiredMessageTypeRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use RequiredMessageTypeRequest.ProtoReflect.Descriptor instead.\nfunc (*RequiredMessageTypeRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{13}\n}\n\nfunc (x *RequiredMessageTypeRequest) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *RequiredMessageTypeRequest) GetFoo() *Foo {\n\tif x != nil {\n\t\treturn x.Foo\n\t}\n\treturn nil\n}\n\ntype Foo struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBar *Bar `protobuf:\"bytes,1,opt,name=bar,proto3\" json:\"bar,omitempty\"`\n}\n\nfunc (x *Foo) Reset() {\n\t*x = Foo{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[14]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Foo) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Foo) ProtoMessage() {}\n\nfunc (x *Foo) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[14]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Foo.ProtoReflect.Descriptor instead.\nfunc (*Foo) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{14}\n}\n\nfunc (x *Foo) GetBar() *Bar {\n\tif x != nil {\n\t\treturn x.Bar\n\t}\n\treturn nil\n}\n\ntype Bar struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tId string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n}\n\nfunc (x *Bar) Reset() {\n\t*x = Bar{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[15]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Bar) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Bar) ProtoMessage() {}\n\nfunc (x *Bar) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[15]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Bar.ProtoReflect.Descriptor instead.\nfunc (*Bar) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{15}\n}\n\nfunc (x *Bar) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\n// Nested is nested type.\ntype ABitOfEverything_Nested struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// name is nested field.\n\tName   string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tAmount uint32 `protobuf:\"varint,2,opt,name=amount,proto3\" json:\"amount,omitempty\"`\n\t// DeepEnum comment.\n\tOk ABitOfEverything_Nested_DeepEnum `protobuf:\"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything_Nested_DeepEnum\" json:\"ok,omitempty\"`\n}\n\nfunc (x *ABitOfEverything_Nested) Reset() {\n\t*x = ABitOfEverything_Nested{}\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[16]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ABitOfEverything_Nested) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ABitOfEverything_Nested) ProtoMessage() {}\n\nfunc (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[16]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ABitOfEverything_Nested.ProtoReflect.Descriptor instead.\nfunc (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2, 0}\n}\n\nfunc (x *ABitOfEverything_Nested) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything_Nested) GetAmount() uint32 {\n\tif x != nil {\n\t\treturn x.Amount\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum {\n\tif x != nil {\n\t\treturn x.Ok\n\t}\n\treturn ABitOfEverything_Nested_FALSE\n}\n\nvar File_examples_internal_proto_examplepb_a_bit_of_everything_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = []byte{\n\t0x0a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x32, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d,\n\t0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65,\n\t0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62,\n\t0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76,\n\t0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61,\n\t0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,\n\t0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70,\n\t0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x22, 0xc6, 0x02, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x12, 0xe1, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xba, 0x01, 0x92,\n\t0x41, 0xb6, 0x01, 0x2a, 0x10, 0x78, 0x2d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x2d, 0x69, 0x64, 0x32, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76,\n\t0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66,\n\t0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,\n\t0x74, 0x73, 0x4a, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37,\n\t0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31,\n\t0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x8a, 0x01, 0x45, 0x5e, 0x5b, 0x30,\n\t0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d,\n\t0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b,\n\t0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46,\n\t0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32,\n\t0x7d, 0x24, 0xa2, 0x02, 0x04, 0x75, 0x75, 0x69, 0x64, 0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65,\n\t0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f,\n\t0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4f, 0x62,\n\t0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x0b,\n\t0x45, 0x72, 0x72, 0x6f, 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x63,\n\t0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x2c, 0x92, 0x41, 0x29, 0x2a, 0x04,\n\t0x63, 0x6f, 0x64, 0x65, 0x32, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x63,\n\t0x6f, 0x64, 0x65, 0x8a, 0x01, 0x07, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x24, 0xa2, 0x02, 0x07,\n\t0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x4f, 0x0a,\n\t0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35,\n\t0x92, 0x41, 0x32, 0x2a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65,\n\t0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01,\n\t0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c,\n\t0x20, 0x33, 0x32, 0x7d, 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe4,\n\t0x25, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74,\n\t0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73,\n\t0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65,\n\t0x64, 0x12, 0x90, 0x01, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x42, 0x7c, 0x92, 0x41, 0x79, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41,\n\t0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d,\n\t0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46,\n\t0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30,\n\t0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d,\n\t0x39, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0xa2, 0x02, 0x04, 0x75, 0x75, 0x69, 0x64, 0x82, 0x03, 0x10,\n\t0x0a, 0x0a, 0x78, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x02, 0x20, 0x01,\n\t0xca, 0x3e, 0x0b, 0xfa, 0x02, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04,\n\t0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02,\n\t0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72,\n\t0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, 0x32,\n\t0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, 0x65,\n\t0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e,\n\t0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33,\n\t0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69,\n\t0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78,\n\t0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06,\n\t0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23,\n\t0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65,\n\t0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69,\n\t0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x6e, 0x75,\n\t0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e,\n\t0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e,\n\t0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75,\n\t0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f,\n\t0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e,\n\t0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65,\n\t0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65,\n\t0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25,\n\t0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,\n\t0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73,\n\t0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c,\n\t0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01,\n\t0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,\n\t0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73,\n\t0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28,\n\t0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e,\n\t0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f,\n\t0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,\n\t0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74,\n\t0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,\n\t0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66,\n\t0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f,\n\t0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0xbd, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73,\n\t0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a,\n\t0x13, 0x4d, 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74,\n\t0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4d, 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x72,\n\t0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e,\n\t0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70,\n\t0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a,\n\t0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,\n\t0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,\n\t0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d,\n\t0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e,\n\t0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b,\n\t0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d,\n\t0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18,\n\t0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e,\n\t0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41,\n\t0x2a, 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72,\n\t0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52,\n\t0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20,\n\t0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x2e, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41,\n\t0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e,\n\t0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72,\n\t0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d,\n\t0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32,\n\t0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65,\n\t0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,\n\t0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69,\n\t0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20,\n\t0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32,\n\t0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72,\n\t0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e,\n\t0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65,\n\t0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f,\n\t0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42,\n\t0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65,\n\t0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65,\n\t0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,\n\t0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72,\n\t0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e,\n\t0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74,\n\t0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79,\n\t0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41,\n\t0x31, 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,\n\t0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f,\n\t0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76,\n\t0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28,\n\t0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36,\n\t0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a,\n\t0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76,\n\t0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26,\n\t0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75,\n\t0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65,\n\t0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6a, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f,\n\t0x6e, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66,\n\t0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e,\n\t0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04,\n\t0xe2, 0x41, 0x01, 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79,\n\t0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65,\n\t0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x12, 0x37, 0x0a, 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72,\n\t0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48,\n\t0x01, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e,\n\t0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x72, 0x6f,\n\t0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x29, 0x20, 0x03, 0x28, 0x09, 0x42, 0x2d, 0x92,\n\t0x41, 0x2a, 0x32, 0x18, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20,\n\t0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x78, 0x13, 0x80, 0x01,\n\t0x01, 0x8a, 0x01, 0x08, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x70, 0x72,\n\t0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64,\n\t0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,\n\t0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3b, 0x0a, 0x17, 0x72,\n\t0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66,\n\t0x69, 0x65, 0x6c, 0x64, 0x5f, 0x31, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41,\n\t0x01, 0x02, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69,\n\t0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75,\n\t0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c,\n\t0x64, 0x5f, 0x32, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52,\n\t0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46,\n\t0x69, 0x65, 0x6c, 0x64, 0x32, 0x12, 0x59, 0x0a, 0x21, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,\n\t0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72,\n\t0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09,\n\t0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,\n\t0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f,\n\t0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,\n\t0x12, 0x4f, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65,\n\t0x6c, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e,\n\t0x61, 0x6d, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x26, 0x72, 0x65, 0x71, 0x75, 0x69,\n\t0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,\n\t0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f,\n\t0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e,\n\t0x6c, 0x79, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69,\n\t0x6e, 0x67, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69,\n\t0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x64, 0x6f, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x6c, 0x79, 0x44,\n\t0x6f, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x62,\n\t0x6f, 0x74, 0x68, 0x18, 0x31, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x69, 0x6c,\n\t0x69, 0x6e, 0x67, 0x42, 0x6f, 0x74, 0x68, 0x12, 0x2d, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6c,\n\t0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x32, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x75, 0x6c,\n\t0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x20, 0x0a, 0x05, 0x75, 0x75, 0x69, 0x64, 0x73, 0x18,\n\t0x33, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0x92, 0x41, 0x07, 0xa2, 0x02, 0x04, 0x75, 0x75, 0x69,\n\t0x64, 0x52, 0x05, 0x75, 0x75, 0x69, 0x64, 0x73, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73,\n\t0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e,\n\t0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12,\n\t0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69,\n\t0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92,\n\t0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73,\n\t0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a,\n\t0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c,\n\t0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13,\n\t0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55,\n\t0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45,\n\t0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e,\n\t0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a,\n\t0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,\n\t0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,\n\t0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,\n\t0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e,\n\t0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,\n\t0x02, 0x38, 0x01, 0x3a, 0xd6, 0x02, 0x92, 0x41, 0xd2, 0x02, 0x0a, 0xcc, 0x01, 0x2a, 0x13, 0x41,\n\t0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69,\n\t0x6e, 0x67, 0x32, 0x4a, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c,\n\t0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65,\n\t0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f,\n\t0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,\n\t0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01,\n\t0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0xd2, 0x01, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69,\n\t0x65, 0x6c, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f,\n\t0x6e, 0x61, 0x6d, 0x65, 0x82, 0x03, 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74,\n\t0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66,\n\t0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e,\n\t0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74,\n\t0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e,\n\t0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75,\n\t0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79,\n\t0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b,\n\t0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66,\n\t0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a,\n\t0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64,\n\t0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28,\n\t0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44,\n\t0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61,\n\t0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36,\n\t0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70,\n\t0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52,\n\t0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a,\n\t0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66,\n\t0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03,\n\t0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,\n\t0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b,\n\t0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69,\n\t0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28,\n\t0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46,\n\t0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70,\n\t0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f,\n\t0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70,\n\t0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70,\n\t0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a,\n\t0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a,\n\t0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69,\n\t0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d,\n\t0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69,\n\t0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74,\n\t0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d,\n\t0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,\n\t0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,\n\t0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,\n\t0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65,\n\t0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b,\n\t0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,\n\t0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03,\n\t0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,\n\t0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61,\n\t0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,\n\t0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b,\n\t0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73,\n\t0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f,\n\t0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d,\n\t0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,\n\t0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,\n\t0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04,\n\t0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,\n\t0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42,\n\t0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01,\n\t0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,\n\t0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67,\n\t0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,\n\t0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65,\n\t0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61,\n\t0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,\n\t0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e,\n\t0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b,\n\t0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,\n\t0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x11,\n\t0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,\n\t0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x6f,\n\t0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x04, 0xe2,\n\t0x41, 0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f,\n\t0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b,\n\t0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f,\n\t0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x04, 0xe2, 0x41,\n\t0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61,\n\t0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74,\n\t0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d,\n\t0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c,\n\t0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, 0x0a, 0x10, 0x53,\n\t0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,\n\t0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73,\n\t0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x04,\n\t0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f,\n\t0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, 0x77, 0x68, 0x65,\n\t0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e,\n\t0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f,\n\t0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22,\n\t0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,\n\t0x73, 0x74, 0x12, 0x14, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04,\n\t0xe2, 0x41, 0x01, 0x02, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4b, 0x0a, 0x03, 0x66, 0x6f, 0x6f, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x6f, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02,\n\t0x52, 0x03, 0x66, 0x6f, 0x6f, 0x22, 0x52, 0x0a, 0x03, 0x46, 0x6f, 0x6f, 0x12, 0x4b, 0x0a, 0x03,\n\t0x62, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x72, 0x42, 0x04,\n\t0xe2, 0x41, 0x01, 0x02, 0x52, 0x03, 0x62, 0x61, 0x72, 0x22, 0x1b, 0x0a, 0x03, 0x42, 0x61, 0x72,\n\t0x12, 0x14, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41,\n\t0x01, 0x02, 0x52, 0x02, 0x69, 0x64, 0x2a, 0xd5, 0x01, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72,\n\t0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00,\n\t0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x1a, 0xb2, 0x01, 0x92, 0x41, 0xae, 0x01,\n\t0x0a, 0x1b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x69, 0x73,\n\t0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x1a, 0x0b, 0x4e,\n\t0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x32, 0x56, 0x0a, 0x24, 0x46, 0x69,\n\t0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75,\n\t0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69,\n\t0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68,\n\t0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73,\n\t0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x3a, 0x06, 0x22, 0x5a, 0x45, 0x52, 0x4f, 0x22, 0x4a, 0x22, 0x0a, 0x19, 0x78, 0x2d,\n\t0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x2a, 0x2b,\n\t0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75,\n\t0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b,\n\t0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73,\n\t0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d,\n\t0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a,\n\t0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0xa7, 0x38, 0x0a, 0x17, 0x41,\n\t0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53,\n\t0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74,\n\t0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79,\n\t0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22,\n\t0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f,\n\t0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e,\n\t0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f,\n\t0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b,\n\t0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70,\n\t0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d,\n\t0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73,\n\t0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e,\n\t0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78,\n\t0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69,\n\t0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69,\n\t0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e,\n\t0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43,\n\t0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74,\n\t0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65,\n\t0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,\n\t0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72,\n\t0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76,\n\t0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24,\n\t0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42,\n\t0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52,\n\t0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3,\n\t0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f,\n\t0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65,\n\t0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a,\n\t0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61,\n\t0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42,\n\t0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f,\n\t0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d,\n\t0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62,\n\t0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b,\n\t0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49,\n\t0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66,\n\t0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93,\n\t0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f,\n\t0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x02, 0x0a, 0x06, 0x43,\n\t0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45,\n\t0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02,\n\t0x71, 0x5a, 0x40, 0x12, 0x3e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x2f, 0x7b, 0x6f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x7d, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74,\n\t0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c,\n\t0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72,\n\t0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34,\n\t0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69,\n\t0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f,\n\t0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75,\n\t0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12,\n\t0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e,\n\t0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02,\n\t0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79,\n\t0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a,\n\t0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,\n\t0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,\n\t0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62,\n\t0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65,\n\t0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75,\n\t0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66,\n\t0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65,\n\t0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69,\n\t0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41,\n\t0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68,\n\t0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04,\n\t0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78,\n\t0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20,\n\t0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76,\n\t0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12,\n\t0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42,\n\t0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c,\n\t0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62,\n\t0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74,\n\t0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,\n\t0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f,\n\t0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00,\n\t0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75,\n\t0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65,\n\t0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f,\n\t0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79,\n\t0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04,\n\t0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65,\n\t0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,\n\t0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b,\n\t0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f,\n\t0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74,\n\t0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d,\n\t0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,\n\t0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b,\n\t0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69,\n\t0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61,\n\t0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d,\n\t0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,\n\t0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70,\n\t0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75,\n\t0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72,\n\t0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70,\n\t0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d,\n\t0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74,\n\t0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41,\n\t0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75,\n\t0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a,\n\t0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68,\n\t0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f,\n\t0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f,\n\t0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63,\n\t0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32,\n\t0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f,\n\t0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20,\n\t0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74,\n\t0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,\n\t0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74,\n\t0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a,\n\t0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,\n\t0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f,\n\t0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72,\n\t0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e,\n\t0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a,\n\t0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76,\n\t0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f,\n\t0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63,\n\t0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44,\n\t0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69,\n\t0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41,\n\t0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22,\n\t0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74,\n\t0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64,\n\t0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a,\n\t0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d,\n\t0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,\n\t0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76,\n\t0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75,\n\t0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65,\n\t0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f,\n\t0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72,\n\t0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12,\n\t0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f,\n\t0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42,\n\t0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4,\n\t0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f,\n\t0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74,\n\t0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79,\n\t0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29,\n\t0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f,\n\t0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68,\n\t0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d,\n\t0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79,\n\t0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f,\n\t0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74,\n\t0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70,\n\t0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c,\n\t0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6,\n\t0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e,\n\t0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,\n\t0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69,\n\t0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76,\n\t0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f,\n\t0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61,\n\t0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f,\n\t0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73,\n\t0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63,\n\t0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,\n\t0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69,\n\t0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69,\n\t0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31,\n\t0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f,\n\t0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72,\n\t0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xba, 0x01, 0x0a, 0x1b, 0x4f, 0x76, 0x65, 0x72,\n\t0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74,\n\t0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4d, 0x92, 0x41, 0x18, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c,\n\t0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x62, 0x61, 0x72, 0x2d, 0x6d, 0x69,\n\t0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x76, 0x32,\n\t0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69,\n\t0x74, 0x65, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,\n\t0x74, 0x79, 0x70, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69,\n\t0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,\n\t0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12,\n\t0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65,\n\t0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79,\n\t0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61,\n\t0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69,\n\t0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,\n\t0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f,\n\t0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01,\n\t0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57,\n\t0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75,\n\t0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02,\n\t0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63,\n\t0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74,\n\t0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68,\n\t0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,\n\t0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74,\n\t0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41,\n\t0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a,\n\t0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42,\n\t0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76,\n\t0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12,\n\t0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66,\n\t0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,\n\t0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50,\n\t0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72,\n\t0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01,\n\t0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67,\n\t0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69,\n\t0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52,\n\t0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d,\n\t0x50, 0x6f, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f,\n\t0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a,\n\t0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a,\n\t0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f,\n\t0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66,\n\t0x65, 0x6e, 0x75, 0x6d, 0x12, 0xa9, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71,\n\t0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65,\n\t0x12, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,\n\t0x6d, 0x70, 0x74, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22,\n\t0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x72, 0x65, 0x71,\n\t0x75, 0x69, 0x72, 0x65, 0x64, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x74, 0x79, 0x70, 0x65,\n\t0x1a, 0xd1, 0x01, 0x92, 0x41, 0xcd, 0x01, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45,\n\t0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f,\n\t0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69,\n\t0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d,\n\t0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e,\n\t0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c,\n\t0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,\n\t0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74,\n\t0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f,\n\t0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72,\n\t0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69,\n\t0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63,\n\t0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73,\n\t0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05,\n\t0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f,\n\t0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79,\n\t0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69,\n\t0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73,\n\t0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00,\n\t0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65,\n\t0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45,\n\t0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65,\n\t0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28,\n\t0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e,\n\t0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d,\n\t0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xcf, 0x0c, 0x92, 0x41, 0xfe, 0x0b, 0x12,\n\t0xf0, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d,\n\t0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12,\n\t0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,\n\t0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74,\n\t0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a,\n\t0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f,\n\t0x6d, 0x2a, 0x58, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73,\n\t0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x68, 0x74, 0x74, 0x70, 0x73,\n\t0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72,\n\t0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70,\n\t0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d,\n\t0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x32, 0x03, 0x31, 0x2e, 0x30,\n\t0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d,\n\t0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64,\n\t0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69,\n\t0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d,\n\t0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a,\n\t0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34,\n\t0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77,\n\t0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65,\n\t0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69,\n\t0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20,\n\t0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a,\n\t0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64,\n\t0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,\n\t0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73,\n\t0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31,\n\t0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f,\n\t0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45,\n\t0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c,\n\t0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f,\n\t0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a,\n\t0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20,\n\t0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,\n\t0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75,\n\t0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75,\n\t0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37,\n\t0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31,\n\t0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d,\n\t0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46,\n\t0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33,\n\t0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d,\n\t0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d,\n\t0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41,\n\t0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d,\n\t0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f,\n\t0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74,\n\t0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61,\n\t0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54,\n\t0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07,\n\t0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61,\n\t0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61,\n\t0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68,\n\t0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02,\n\t0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01,\n\t0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f,\n\t0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73,\n\t0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f,\n\t0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05,\n\t0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65,\n\t0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63,\n\t0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72,\n\t0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74,\n\t0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a,\n\t0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77,\n\t0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a,\n\t0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a,\n\t0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e,\n\t0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17,\n\t0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64,\n\t0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x32, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20,\n\t0x72, 0x70, 0x63, 0x12, 0x14, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x52, 0x70, 0x63, 0x20, 0x64, 0x65,\n\t0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x74,\n\t0x72, 0x61, 0x69, 0x74, 0x54, 0x61, 0x67, 0x12, 0x02, 0x20, 0x01, 0x72, 0x49, 0x0a, 0x17, 0x4d,\n\t0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f,\n\t0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d,\n\t0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63,\n\t0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73,\n\t0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01,\n\t0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x5a, 0x4b, 0x67,\n\t0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65,\n\t0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData = file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 4)\nvar file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 20)\nvar file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = []any{\n\t(NumericEnum)(0),                      // 0: grpc.gateway.examples.internal.proto.examplepb.NumericEnum\n\t(SnakeCaseEnum)(0),                    // 1: grpc.gateway.examples.internal.proto.examplepb.snake_case_enum\n\t(SnakeCase_0Enum)(0),                  // 2: grpc.gateway.examples.internal.proto.examplepb.snake_case_0_enum\n\t(ABitOfEverything_Nested_DeepEnum)(0), // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum\n\t(*ErrorResponse)(nil),                 // 4: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse\n\t(*ErrorObject)(nil),                   // 5: grpc.gateway.examples.internal.proto.examplepb.ErrorObject\n\t(*ABitOfEverything)(nil),              // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t(*ABitOfEverythingRepeated)(nil),      // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated\n\t(*CheckStatusResponse)(nil),           // 8: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse\n\t(*Body)(nil),                          // 9: grpc.gateway.examples.internal.proto.examplepb.Body\n\t(*MessageWithBody)(nil),               // 10: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody\n\t(*UpdateV2Request)(nil),               // 11: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request\n\t(*Book)(nil),                          // 12: grpc.gateway.examples.internal.proto.examplepb.Book\n\t(*CreateBookRequest)(nil),             // 13: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest\n\t(*UpdateBookRequest)(nil),             // 14: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest\n\t(*SnakeEnumRequest)(nil),              // 15: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest\n\t(*SnakeEnumResponse)(nil),             // 16: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse\n\t(*RequiredMessageTypeRequest)(nil),    // 17: grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest\n\t(*Foo)(nil),                           // 18: grpc.gateway.examples.internal.proto.examplepb.Foo\n\t(*Bar)(nil),                           // 19: grpc.gateway.examples.internal.proto.examplepb.Bar\n\t(*ABitOfEverything_Nested)(nil),       // 20: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested\n\tnil,                                   // 21: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry\n\tnil,                                   // 22: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry\n\tnil,                                   // 23: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry\n\t(pathenum.PathEnum)(0),                // 24: grpc.gateway.examples.internal.pathenum.PathEnum\n\t(pathenum.MessagePathEnum_NestedPathEnum)(0), // 25: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum\n\t(*emptypb.Empty)(nil),                        // 26: google.protobuf.Empty\n\t(*timestamppb.Timestamp)(nil),                // 27: google.protobuf.Timestamp\n\t(*status.Status)(nil),                        // 28: google.rpc.Status\n\t(*fieldmaskpb.FieldMask)(nil),                // 29: google.protobuf.FieldMask\n\t(pathenum.SnakeCaseForImport)(0),             // 30: grpc.gateway.examples.internal.pathenum.snake_case_for_import\n\t(*sub2.IdMessage)(nil),                       // 31: grpc.gateway.examples.internal.proto.sub2.IdMessage\n\t(*sub.StringMessage)(nil),                    // 32: grpc.gateway.examples.internal.proto.sub.StringMessage\n\t(*durationpb.Duration)(nil),                  // 33: google.protobuf.Duration\n\t(*pathenum.MessageWithPathEnum)(nil),         // 34: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum\n\t(*pathenum.MessageWithNestedPathEnum)(nil),   // 35: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum\n\t(*oneofenum.OneofEnumMessage)(nil),           // 36: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage\n\t(*wrapperspb.StringValue)(nil),               // 37: google.protobuf.StringValue\n}\nvar file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{\n\t5,  // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject\n\t20, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested\n\t20, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested\n\t0,  // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum\n\t24, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum\n\t25, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum\n\t26, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty\n\t21, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry\n\t22, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry\n\t23, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry\n\t27, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp\n\t0,  // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum\n\t0,  // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum\n\t0,  // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum\n\t20, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested\n\t20, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested\n\t0,  // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum\n\t28, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status\n\t9,  // 18: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body\n\t6,  // 19: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t29, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask\n\t27, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp\n\t12, // 22: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book\n\t12, // 23: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book\n\t29, // 24: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.update_mask:type_name -> google.protobuf.FieldMask\n\t1,  // 25: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.what:type_name -> grpc.gateway.examples.internal.proto.examplepb.snake_case_enum\n\t2,  // 26: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.who:type_name -> grpc.gateway.examples.internal.proto.examplepb.snake_case_0_enum\n\t30, // 27: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.where:type_name -> grpc.gateway.examples.internal.pathenum.snake_case_for_import\n\t18, // 28: grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest.foo:type_name -> grpc.gateway.examples.internal.proto.examplepb.Foo\n\t19, // 29: grpc.gateway.examples.internal.proto.examplepb.Foo.bar:type_name -> grpc.gateway.examples.internal.proto.examplepb.Bar\n\t3,  // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum\n\t0,  // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum\n\t20, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested\n\t6,  // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t13, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest\n\t14, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest\n\t31, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage\n\t6,  // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t11, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request\n\t31, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage\n\t6,  // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t7,  // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated\n\t32, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage\n\t6,  // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t33, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration\n\t26, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty\n\t26, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty\n\t10, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody\n\t9,  // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body\n\t6,  // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t9,  // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteRequestContentType:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body\n\t26, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty\n\t34, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum\n\t35, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum\n\t26, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty\n\t6,  // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t36, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:input_type -> grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage\n\t17, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:input_type -> grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest\n\t26, // 65: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty\n\t26, // 66: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty\n\t15, // 67: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest\n\t6,  // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t12, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book\n\t12, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book\n\t6,  // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t26, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty\n\t26, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty\n\t26, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty\n\t26, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty\n\t7,  // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated\n\t32, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage\n\t6,  // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t26, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty\n\t26, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty\n\t26, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty\n\t26, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty\n\t26, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty\n\t6,  // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t6,  // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t26, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteRequestContentType:output_type -> google.protobuf.Empty\n\t37, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue\n\t26, // 92: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty\n\t26, // 93: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty\n\t8,  // 94: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse\n\t26, // 95: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty\n\t26, // 96: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty\n\t6,  // 97: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t26, // 98: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:output_type -> google.protobuf.Empty\n\t26, // 99: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:output_type -> google.protobuf.Empty\n\t26, // 100: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty\n\t26, // 101: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty\n\t16, // 102: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse\n\t68, // [68:103] is the sub-list for method output_type\n\t33, // [33:68] is the sub-list for method input_type\n\t33, // [33:33] is the sub-list for extension type_name\n\t33, // [33:33] is the sub-list for extension extendee\n\t0,  // [0:33] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() }\nfunc file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() {\n\tif File_examples_internal_proto_examplepb_a_bit_of_everything_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2].OneofWrappers = []any{\n\t\t(*ABitOfEverything_OneofEmpty)(nil),\n\t\t(*ABitOfEverything_OneofString)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc,\n\t\t\tNumEnums:      4,\n\t\t\tNumMessages:   20,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   4,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_a_bit_of_everything_proto = out.File\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/a_bit_of_everything.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{\"float_value\": 0, \"double_value\": 1, \"int64_value\": 2, \"uint64_value\": 3, \"int32_value\": 4, \"fixed64_value\": 5, \"fixed32_value\": 6, \"bool_value\": 7, \"string_value\": 8, \"uint32_value\": 9, \"sfixed32_value\": 10, \"sfixed64_value\": 11, \"sint32_value\": 12, \"sint64_value\": 13, \"nonConventionalNameValue\": 14, \"enum_value\": 15, \"path_enum_value\": 16, \"nested_path_enum_value\": 17, \"enum_value_annotation\": 18}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}}\n\nfunc request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"float_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"float_value\")\n\t}\n\tprotoReq.FloatValue, err = runtime.Float32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"float_value\", err)\n\t}\n\tval, ok = pathParams[\"double_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"double_value\")\n\t}\n\tprotoReq.DoubleValue, err = runtime.Float64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"double_value\", err)\n\t}\n\tval, ok = pathParams[\"int64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int64_value\")\n\t}\n\tprotoReq.Int64Value, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int64_value\", err)\n\t}\n\tval, ok = pathParams[\"uint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint64_value\")\n\t}\n\tprotoReq.Uint64Value, err = runtime.Uint64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint64_value\", err)\n\t}\n\tval, ok = pathParams[\"int32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int32_value\")\n\t}\n\tprotoReq.Int32Value, err = runtime.Int32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int32_value\", err)\n\t}\n\tval, ok = pathParams[\"fixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"fixed64_value\")\n\t}\n\tprotoReq.Fixed64Value, err = runtime.Uint64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"fixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"fixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"fixed32_value\")\n\t}\n\tprotoReq.Fixed32Value, err = runtime.Uint32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"fixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"bool_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"bool_value\")\n\t}\n\tprotoReq.BoolValue, err = runtime.Bool(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"bool_value\", err)\n\t}\n\tval, ok = pathParams[\"string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"string_value\")\n\t}\n\tprotoReq.StringValue, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"string_value\", err)\n\t}\n\tval, ok = pathParams[\"uint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint32_value\")\n\t}\n\tprotoReq.Uint32Value, err = runtime.Uint32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint32_value\", err)\n\t}\n\tval, ok = pathParams[\"sfixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sfixed32_value\")\n\t}\n\tprotoReq.Sfixed32Value, err = runtime.Int32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sfixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"sfixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sfixed64_value\")\n\t}\n\tprotoReq.Sfixed64Value, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sfixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"sint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sint32_value\")\n\t}\n\tprotoReq.Sint32Value, err = runtime.Int32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sint32_value\", err)\n\t}\n\tval, ok = pathParams[\"sint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sint64_value\")\n\t}\n\tprotoReq.Sint64Value, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sint64_value\", err)\n\t}\n\tval, ok = pathParams[\"nonConventionalNameValue\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"nonConventionalNameValue\")\n\t}\n\tprotoReq.NonConventionalNameValue, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"nonConventionalNameValue\", err)\n\t}\n\tval, ok = pathParams[\"enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"enum_value\")\n\t}\n\te, err = runtime.Enum(val, NumericEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"enum_value\", err)\n\t}\n\tprotoReq.EnumValue = NumericEnum(e)\n\tval, ok = pathParams[\"path_enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_enum_value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.PathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_enum_value\", err)\n\t}\n\tprotoReq.PathEnumValue = pathenum.PathEnum(e)\n\tval, ok = pathParams[\"nested_path_enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"nested_path_enum_value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.MessagePathEnum_NestedPathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"nested_path_enum_value\", err)\n\t}\n\tprotoReq.NestedPathEnumValue = pathenum.MessagePathEnum_NestedPathEnum(e)\n\tval, ok = pathParams[\"enum_value_annotation\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"enum_value_annotation\")\n\t}\n\te, err = runtime.Enum(val, NumericEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"enum_value_annotation\", err)\n\t}\n\tprotoReq.EnumValueAnnotation = NumericEnum(e)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Create_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"float_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"float_value\")\n\t}\n\tprotoReq.FloatValue, err = runtime.Float32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"float_value\", err)\n\t}\n\tval, ok = pathParams[\"double_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"double_value\")\n\t}\n\tprotoReq.DoubleValue, err = runtime.Float64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"double_value\", err)\n\t}\n\tval, ok = pathParams[\"int64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int64_value\")\n\t}\n\tprotoReq.Int64Value, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int64_value\", err)\n\t}\n\tval, ok = pathParams[\"uint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint64_value\")\n\t}\n\tprotoReq.Uint64Value, err = runtime.Uint64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint64_value\", err)\n\t}\n\tval, ok = pathParams[\"int32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"int32_value\")\n\t}\n\tprotoReq.Int32Value, err = runtime.Int32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"int32_value\", err)\n\t}\n\tval, ok = pathParams[\"fixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"fixed64_value\")\n\t}\n\tprotoReq.Fixed64Value, err = runtime.Uint64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"fixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"fixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"fixed32_value\")\n\t}\n\tprotoReq.Fixed32Value, err = runtime.Uint32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"fixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"bool_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"bool_value\")\n\t}\n\tprotoReq.BoolValue, err = runtime.Bool(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"bool_value\", err)\n\t}\n\tval, ok = pathParams[\"string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"string_value\")\n\t}\n\tprotoReq.StringValue, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"string_value\", err)\n\t}\n\tval, ok = pathParams[\"uint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uint32_value\")\n\t}\n\tprotoReq.Uint32Value, err = runtime.Uint32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uint32_value\", err)\n\t}\n\tval, ok = pathParams[\"sfixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sfixed32_value\")\n\t}\n\tprotoReq.Sfixed32Value, err = runtime.Int32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sfixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"sfixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sfixed64_value\")\n\t}\n\tprotoReq.Sfixed64Value, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sfixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"sint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sint32_value\")\n\t}\n\tprotoReq.Sint32Value, err = runtime.Int32(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sint32_value\", err)\n\t}\n\tval, ok = pathParams[\"sint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"sint64_value\")\n\t}\n\tprotoReq.Sint64Value, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"sint64_value\", err)\n\t}\n\tval, ok = pathParams[\"nonConventionalNameValue\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"nonConventionalNameValue\")\n\t}\n\tprotoReq.NonConventionalNameValue, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"nonConventionalNameValue\", err)\n\t}\n\tval, ok = pathParams[\"enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"enum_value\")\n\t}\n\te, err = runtime.Enum(val, NumericEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"enum_value\", err)\n\t}\n\tprotoReq.EnumValue = NumericEnum(e)\n\tval, ok = pathParams[\"path_enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_enum_value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.PathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_enum_value\", err)\n\t}\n\tprotoReq.PathEnumValue = pathenum.PathEnum(e)\n\tval, ok = pathParams[\"nested_path_enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"nested_path_enum_value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.MessagePathEnum_NestedPathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"nested_path_enum_value\", err)\n\t}\n\tprotoReq.NestedPathEnumValue = pathenum.MessagePathEnum_NestedPathEnum(e)\n\tval, ok = pathParams[\"enum_value_annotation\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"enum_value_annotation\")\n\t}\n\te, err = runtime.Enum(val, NumericEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"enum_value_annotation\", err)\n\t}\n\tprotoReq.EnumValueAnnotation = NumericEnum(e)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Create_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Create(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_CreateBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CreateBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_CreateBook_0 = &utilities.DoubleArray{Encoding: map[string]int{\"book\": 0, \"parent\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_ABitOfEverythingService_CreateBook_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq CreateBookRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Book); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"parent\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"parent\")\n\t}\n\tprotoReq.Parent, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"parent\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CreateBook_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.CreateBook(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CreateBook_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq CreateBookRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Book); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"parent\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"parent\")\n\t}\n\tprotoReq.Parent, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"parent\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CreateBook_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateBook(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_UpdateBook_0 = &utilities.DoubleArray{Encoding: map[string]int{\"book\": 0, \"name\": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}}\n\nfunc request_ABitOfEverythingService_UpdateBook_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateBookRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Book); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Book); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tval, ok := pathParams[\"book.name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"book.name\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"book.name\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"book.name\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateBook_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.UpdateBook(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_UpdateBook_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateBookRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Book); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Book); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tval, ok := pathParams[\"book.name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"book.name\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"book.name\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"book.name\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateBook_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.UpdateBook(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub2.IdMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tmsg, err := client.Lookup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub2.IdMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tmsg, err := server.Lookup(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_Custom_0 = &utilities.DoubleArray{Encoding: map[string]int{\"uuid\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_ABitOfEverythingService_Custom_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Custom_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Custom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Custom_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Custom_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Custom(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_Custom_1 = &utilities.DoubleArray{Encoding: map[string]int{\"optional_string_value\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_ABitOfEverythingService_Custom_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"optional_string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"optional_string_value\")\n\t}\n\tprotoReq.OptionalStringValue, err = runtime.StringP(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"optional_string_value\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Custom_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Custom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Custom_1(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"optional_string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"optional_string_value\")\n\t}\n\tprotoReq.OptionalStringValue, err = runtime.StringP(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"optional_string_value\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Custom_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Custom(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_DoubleColon_0 = &utilities.DoubleArray{Encoding: map[string]int{\"uuid\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_ABitOfEverythingService_DoubleColon_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_DoubleColon_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.DoubleColon(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_DoubleColon_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_DoubleColon_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.DoubleColon(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tmsg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tmsg, err := server.Update(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_UpdateV2_0 = &utilities.DoubleArray{Encoding: map[string]int{\"abe\": 0, \"uuid\": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}}\n\nfunc request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateV2Request\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Abe); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"abe.uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"abe.uuid\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"abe.uuid\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"abe.uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateV2Request\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Abe); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"abe.uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"abe.uuid\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"abe.uuid\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"abe.uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.UpdateV2(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_UpdateV2_1 = &utilities.DoubleArray{Encoding: map[string]int{\"abe\": 0, \"uuid\": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}}\n\nfunc request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateV2Request\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Abe); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tval, ok := pathParams[\"abe.uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"abe.uuid\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"abe.uuid\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"abe.uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateV2Request\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Abe); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tval, ok := pathParams[\"abe.uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"abe.uuid\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"abe.uuid\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"abe.uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.UpdateV2(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_UpdateV2_2(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateV2Request\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"abe.uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"abe.uuid\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"abe.uuid\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"abe.uuid\", err)\n\t}\n\tmsg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_UpdateV2_2(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UpdateV2Request\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"abe.uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"abe.uuid\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"abe.uuid\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"abe.uuid\", err)\n\t}\n\tmsg, err := server.UpdateV2(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub2.IdMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tmsg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub2.IdMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tmsg, err := server.Delete(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_GetQuery_0 = &utilities.DoubleArray{Encoding: map[string]int{\"uuid\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_GetQuery_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.GetQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_GetQuery_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.GetQuery(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_GetRepeatedQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverythingRepeated\n\t\tmetadata runtime.ServerMetadata\n\t\tes       []int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"path_repeated_float_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_float_value\")\n\t}\n\tprotoReq.PathRepeatedFloatValue, err = runtime.Float32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_float_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_double_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_double_value\")\n\t}\n\tprotoReq.PathRepeatedDoubleValue, err = runtime.Float64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_double_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_int64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_int64_value\")\n\t}\n\tprotoReq.PathRepeatedInt64Value, err = runtime.Int64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_int64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_uint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_uint64_value\")\n\t}\n\tprotoReq.PathRepeatedUint64Value, err = runtime.Uint64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_uint64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_int32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_int32_value\")\n\t}\n\tprotoReq.PathRepeatedInt32Value, err = runtime.Int32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_int32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_fixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_fixed64_value\")\n\t}\n\tprotoReq.PathRepeatedFixed64Value, err = runtime.Uint64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_fixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_fixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_fixed32_value\")\n\t}\n\tprotoReq.PathRepeatedFixed32Value, err = runtime.Uint32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_fixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_bool_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_bool_value\")\n\t}\n\tprotoReq.PathRepeatedBoolValue, err = runtime.BoolSlice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_bool_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_string_value\")\n\t}\n\tprotoReq.PathRepeatedStringValue, err = runtime.StringSlice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_string_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_bytes_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_bytes_value\")\n\t}\n\tprotoReq.PathRepeatedBytesValue, err = runtime.BytesSlice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_bytes_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_uint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_uint32_value\")\n\t}\n\tprotoReq.PathRepeatedUint32Value, err = runtime.Uint32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_uint32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_enum_value\")\n\t}\n\tes, err = runtime.EnumSlice(val, \",\", NumericEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_enum_value\", err)\n\t}\n\ts := make([]NumericEnum, len(es))\n\tfor i, v := range es {\n\t\ts[i] = NumericEnum(v)\n\t}\n\tprotoReq.PathRepeatedEnumValue = s\n\tval, ok = pathParams[\"path_repeated_sfixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sfixed32_value\")\n\t}\n\tprotoReq.PathRepeatedSfixed32Value, err = runtime.Int32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sfixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_sfixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sfixed64_value\")\n\t}\n\tprotoReq.PathRepeatedSfixed64Value, err = runtime.Int64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sfixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_sint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sint32_value\")\n\t}\n\tprotoReq.PathRepeatedSint32Value, err = runtime.Int32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sint32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_sint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sint64_value\")\n\t}\n\tprotoReq.PathRepeatedSint64Value, err = runtime.Int64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sint64_value\", err)\n\t}\n\tmsg, err := client.GetRepeatedQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_GetRepeatedQuery_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverythingRepeated\n\t\tmetadata runtime.ServerMetadata\n\t\tes       []int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"path_repeated_float_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_float_value\")\n\t}\n\tprotoReq.PathRepeatedFloatValue, err = runtime.Float32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_float_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_double_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_double_value\")\n\t}\n\tprotoReq.PathRepeatedDoubleValue, err = runtime.Float64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_double_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_int64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_int64_value\")\n\t}\n\tprotoReq.PathRepeatedInt64Value, err = runtime.Int64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_int64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_uint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_uint64_value\")\n\t}\n\tprotoReq.PathRepeatedUint64Value, err = runtime.Uint64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_uint64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_int32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_int32_value\")\n\t}\n\tprotoReq.PathRepeatedInt32Value, err = runtime.Int32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_int32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_fixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_fixed64_value\")\n\t}\n\tprotoReq.PathRepeatedFixed64Value, err = runtime.Uint64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_fixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_fixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_fixed32_value\")\n\t}\n\tprotoReq.PathRepeatedFixed32Value, err = runtime.Uint32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_fixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_bool_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_bool_value\")\n\t}\n\tprotoReq.PathRepeatedBoolValue, err = runtime.BoolSlice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_bool_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_string_value\")\n\t}\n\tprotoReq.PathRepeatedStringValue, err = runtime.StringSlice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_string_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_bytes_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_bytes_value\")\n\t}\n\tprotoReq.PathRepeatedBytesValue, err = runtime.BytesSlice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_bytes_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_uint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_uint32_value\")\n\t}\n\tprotoReq.PathRepeatedUint32Value, err = runtime.Uint32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_uint32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_enum_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_enum_value\")\n\t}\n\tes, err = runtime.EnumSlice(val, \",\", NumericEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_enum_value\", err)\n\t}\n\ts := make([]NumericEnum, len(es))\n\tfor i, v := range es {\n\t\ts[i] = NumericEnum(v)\n\t}\n\tprotoReq.PathRepeatedEnumValue = s\n\tval, ok = pathParams[\"path_repeated_sfixed32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sfixed32_value\")\n\t}\n\tprotoReq.PathRepeatedSfixed32Value, err = runtime.Int32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sfixed32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_sfixed64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sfixed64_value\")\n\t}\n\tprotoReq.PathRepeatedSfixed64Value, err = runtime.Int64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sfixed64_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_sint32_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sint32_value\")\n\t}\n\tprotoReq.PathRepeatedSint32Value, err = runtime.Int32Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sint32_value\", err)\n\t}\n\tval, ok = pathParams[\"path_repeated_sint64_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"path_repeated_sint64_value\")\n\t}\n\tprotoReq.PathRepeatedSint64Value, err = runtime.Int64Slice(val, \",\")\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"path_repeated_sint64_value\", err)\n\t}\n\tmsg, err := server.GetRepeatedQuery(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub.StringMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"value\")\n\t}\n\tprotoReq.Value, err = runtime.StringP(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"value\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub.StringMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"value\")\n\t}\n\tprotoReq.Value, err = runtime.StringP(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"value\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub.StringMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Value); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub.StringMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Value); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_Echo_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub.StringMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Echo_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq sub.StringMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Echo_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"single_nested.name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"single_nested.name\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"single_nested.name\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"single_nested.name\", err)\n\t}\n\tmsg, err := client.DeepPathEcho(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"single_nested.name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"single_nested.name\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"single_nested.name\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"single_nested.name\", err)\n\t}\n\tmsg, err := server.DeepPathEcho(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Timeout(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tmsg, err := server.Timeout(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.ErrorWithDetails(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tmsg, err := server.ErrorWithDetails(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq MessageWithBody\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Data); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tmsg, err := client.GetMessageWithBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq MessageWithBody\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Data); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tmsg, err := server.GetMessageWithBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Body\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"name\")\n\t}\n\tprotoReq.Name, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"name\", err)\n\t}\n\tmsg, err := client.PostWithEmptyBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Body\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"name\")\n\t}\n\tprotoReq.Name, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"name\", err)\n\t}\n\tmsg, err := server.PostWithEmptyBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_CheckGetQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{\"single_nested\": 0, \"name\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"single_nested.name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"single_nested.name\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"single_nested.name\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"single_nested.name\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.CheckGetQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"single_nested.name\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"single_nested.name\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"single_nested.name\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"single_nested.name\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CheckGetQueryParams(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{\"single_nested\": 0, \"ok\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"single_nested.ok\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"single_nested.ok\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"single_nested.ok\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"single_nested.ok\", err)\n\t}\n\te, err = runtime.Enum(val, ABitOfEverything_Nested_DeepEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", \"single_nested.ok\", err)\n\t}\n\tprotoReq.SingleNested.Ok = ABitOfEverything_Nested_DeepEnum(e)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.CheckNestedEnumGetQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"single_nested.ok\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"single_nested.ok\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"single_nested.ok\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"single_nested.ok\", err)\n\t}\n\te, err = runtime.Enum(val, ABitOfEverything_Nested_DeepEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", \"single_nested.ok\", err)\n\t}\n\tprotoReq.SingleNested.Ok = ABitOfEverything_Nested_DeepEnum(e)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CheckNestedEnumGetQueryParams(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_CheckPostQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{\"single_nested\": 0, \"string_value\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.SingleNested); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"string_value\")\n\t}\n\tprotoReq.StringValue, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"string_value\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.CheckPostQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.SingleNested); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"string_value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"string_value\")\n\t}\n\tprotoReq.StringValue, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"string_value\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CheckPostQueryParams(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_OverwriteRequestContentType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Body\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.OverwriteRequestContentType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_OverwriteRequestContentType_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Body\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.OverwriteRequestContentType(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.OverwriteResponseContentType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tmsg, err := server.OverwriteResponseContentType(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq pathenum.MessageWithPathEnum\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.PathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"value\", err)\n\t}\n\tprotoReq.Value = pathenum.PathEnum(e)\n\tmsg, err := client.CheckExternalPathEnum(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq pathenum.MessageWithPathEnum\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.PathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"value\", err)\n\t}\n\tprotoReq.Value = pathenum.PathEnum(e)\n\tmsg, err := server.CheckExternalPathEnum(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq pathenum.MessageWithNestedPathEnum\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.MessagePathEnum_NestedPathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"value\", err)\n\t}\n\tprotoReq.Value = pathenum.MessagePathEnum_NestedPathEnum(e)\n\tmsg, err := client.CheckExternalNestedPathEnum(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq pathenum.MessageWithNestedPathEnum\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"value\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"value\")\n\t}\n\te, err = runtime.Enum(val, pathenum.MessagePathEnum_NestedPathEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"value\", err)\n\t}\n\tprotoReq.Value = pathenum.MessagePathEnum_NestedPathEnum(e)\n\tmsg, err := server.CheckExternalNestedPathEnum(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CheckStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tmsg, err := server.CheckStatus(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_Exists_0 = &utilities.DoubleArray{Encoding: map[string]int{\"uuid\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_ABitOfEverythingService_Exists_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Exists_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Exists(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_Exists_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Exists_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Exists(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_CustomOptionsRequest_0 = &utilities.DoubleArray{Encoding: map[string]int{\"uuid\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_ABitOfEverythingService_CustomOptionsRequest_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CustomOptionsRequest_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.CustomOptionsRequest(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_CustomOptionsRequest_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CustomOptionsRequest_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CustomOptionsRequest(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_ABitOfEverythingService_TraceRequest_0 = &utilities.DoubleArray{Encoding: map[string]int{\"uuid\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_ABitOfEverythingService_TraceRequest_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_TraceRequest_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.TraceRequest(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_TraceRequest_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ABitOfEverything\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"uuid\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"uuid\")\n\t}\n\tprotoReq.Uuid, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"uuid\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_TraceRequest_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.TraceRequest(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_PostOneofEnum_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq oneofenum.OneofEnumMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif protoReq.One == nil {\n\t\tprotoReq.One = &oneofenum.OneofEnumMessage_ExampleEnum{}\n\t} else if _, ok := protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *oneofenum.OneofEnumMessage_ExampleEnum, but: %t\\n\", protoReq.One)\n\t}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum).ExampleEnum); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.PostOneofEnum(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_PostOneofEnum_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq oneofenum.OneofEnumMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif protoReq.One == nil {\n\t\tprotoReq.One = &oneofenum.OneofEnumMessage_ExampleEnum{}\n\t} else if _, ok := protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *oneofenum.OneofEnumMessage_ExampleEnum, but: %t\\n\", protoReq.One)\n\t}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum).ExampleEnum); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.PostOneofEnum(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ABitOfEverythingService_PostRequiredMessageType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq RequiredMessageTypeRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.PostRequiredMessageType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ABitOfEverythingService_PostRequiredMessageType_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq RequiredMessageTypeRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.PostRequiredMessageType(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Empty(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, server CamelCaseServiceNameServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tmsg, err := server.Empty(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_SnakeEnumService_SnakeEnum_0(ctx context.Context, marshaler runtime.Marshaler, client SnakeEnumServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SnakeEnumRequest\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"who\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"who\")\n\t}\n\te, err = runtime.Enum(val, SnakeCase_0Enum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"who\", err)\n\t}\n\tprotoReq.Who = SnakeCase_0Enum(e)\n\tval, ok = pathParams[\"what\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"what\")\n\t}\n\te, err = runtime.Enum(val, SnakeCaseEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"what\", err)\n\t}\n\tprotoReq.What = SnakeCaseEnum(e)\n\tval, ok = pathParams[\"where\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"where\")\n\t}\n\te, err = runtime.Enum(val, pathenum.SnakeCaseForImport_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"where\", err)\n\t}\n\tprotoReq.Where = pathenum.SnakeCaseForImport(e)\n\tmsg, err := client.SnakeEnum(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_SnakeEnumService_SnakeEnum_0(ctx context.Context, marshaler runtime.Marshaler, server SnakeEnumServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SnakeEnumRequest\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"who\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"who\")\n\t}\n\te, err = runtime.Enum(val, SnakeCase_0Enum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"who\", err)\n\t}\n\tprotoReq.Who = SnakeCase_0Enum(e)\n\tval, ok = pathParams[\"what\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"what\")\n\t}\n\te, err = runtime.Enum(val, SnakeCaseEnum_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"what\", err)\n\t}\n\tprotoReq.What = SnakeCaseEnum(e)\n\tval, ok = pathParams[\"where\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"where\")\n\t}\n\te, err = runtime.Enum(val, pathenum.SnakeCaseForImport_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"where\", err)\n\t}\n\tprotoReq.Where = pathenum.SnakeCaseForImport(e)\n\tmsg, err := server.SnakeEnum(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterABitOfEverythingServiceHandlerServer registers the http handlers for service ABitOfEverythingService to \"mux\".\n// UnaryRPC     :call ABitOfEverythingServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterABitOfEverythingServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Create_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_CreateBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CreateBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CreateBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_CreateBook_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook\", runtime.WithHTTPPathPattern(\"/v1/{parent=publishers/*}/books\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CreateBook_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CreateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_ABitOfEverythingService_UpdateBook_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook\", runtime.WithHTTPPathPattern(\"/v1/{book.name=publishers/*/books/*}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_UpdateBook_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Lookup_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Lookup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_Custom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}:custom\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Custom_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Custom_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Custom_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/custom/{optional_string_value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Custom_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Custom_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_DoubleColon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DoubleColon\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}:custom:custom\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_DoubleColon_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_DoubleColon_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Update_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_ABitOfEverythingService_UpdateV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2\", runtime.WithHTTPPathPattern(\"/v2/example/a_bit_of_everything/{abe.uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_UpdateV2_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateV2_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_ABitOfEverythingService_UpdateV2_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2\", runtime.WithHTTPPathPattern(\"/v2/example/a_bit_of_everything/{abe.uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_UpdateV2_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateV2_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_ABitOfEverythingService_UpdateV2_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2\", runtime.WithHTTPPathPattern(\"/v2a/example/a_bit_of_everything/{abe.uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_UpdateV2_2(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateV2_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_ABitOfEverythingService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Delete_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_GetQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/query/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_GetQuery_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_GetQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_GetRepeatedQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/echo/{value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Echo_2(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_DeepPathEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho\", runtime.WithHTTPPathPattern(\"/v1/example/deep_path/{single_nested.name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Timeout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout\", runtime.WithHTTPPathPattern(\"/v2/example/timeout\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Timeout_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Timeout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_ErrorWithDetails_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails\", runtime.WithHTTPPathPattern(\"/v2/example/errorwithdetails\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_GetMessageWithBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody\", runtime.WithHTTPPathPattern(\"/v2/example/withbody/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_PostWithEmptyBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody\", runtime.WithHTTPPathPattern(\"/v2/example/postwithemptybody/{name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/params/get/{single_nested.name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_CheckPostQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/params/post/{string_value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_OverwriteRequestContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteRequestContentType\", runtime.WithHTTPPathPattern(\"/v2/example/overwriterequestcontenttype\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_OverwriteResponseContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType\", runtime.WithHTTPPathPattern(\"/v2/example/overwriteresponsecontenttype\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckExternalPathEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum\", runtime.WithHTTPPathPattern(\"/v2/{value}:check\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckExternalNestedPathEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum\", runtime.WithHTTPPathPattern(\"/v3/{value}:check\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus\", runtime.WithHTTPPathPattern(\"/v1/example/checkStatus\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CheckStatus_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodHead, pattern_ABitOfEverythingService_Exists_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_Exists_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Exists_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodOptions, pattern_ABitOfEverythingService_CustomOptionsRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodTrace, pattern_ABitOfEverythingService_TraceRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_TraceRequest_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_TraceRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_PostOneofEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostOneofEnum\", runtime.WithHTTPPathPattern(\"/v1/example/oneofenum\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_PostRequiredMessageType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostRequiredMessageType\", runtime.WithHTTPPathPattern(\"/v1/example/requiredmessagetype\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterCamelCaseServiceNameHandlerServer registers the http handlers for service CamelCaseServiceName to \"mux\".\n// UnaryRPC     :call CamelCaseServiceNameServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterCamelCaseServiceNameHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer) error {\n\tmux.Handle(http.MethodGet, pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty\", runtime.WithHTTPPathPattern(\"/v2/example/empty\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_CamelCaseServiceName_Empty_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_CamelCaseServiceName_Empty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterSnakeEnumServiceHandlerServer registers the http handlers for service SnakeEnumService to \"mux\".\n// UnaryRPC     :call SnakeEnumServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSnakeEnumServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterSnakeEnumServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SnakeEnumServiceServer) error {\n\tmux.Handle(http.MethodGet, pattern_SnakeEnumService_SnakeEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService/SnakeEnum\", runtime.WithHTTPPathPattern(\"/v1/example/snake/{who}/{what}/{where}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_SnakeEnumService_SnakeEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_SnakeEnumService_SnakeEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterABitOfEverythingServiceHandlerFromEndpoint is same as RegisterABitOfEverythingServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterABitOfEverythingServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterABitOfEverythingServiceHandler(ctx, mux, conn)\n}\n\n// RegisterABitOfEverythingServiceHandler registers the http handlers for service ABitOfEverythingService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterABitOfEverythingServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterABitOfEverythingServiceHandlerClient(ctx, mux, NewABitOfEverythingServiceClient(conn))\n}\n\n// RegisterABitOfEverythingServiceHandlerClient registers the http handlers for service ABitOfEverythingService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"ABitOfEverythingServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"ABitOfEverythingServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"ABitOfEverythingServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ABitOfEverythingServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Create_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_CreateBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CreateBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CreateBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_CreateBook_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook\", runtime.WithHTTPPathPattern(\"/v1/{parent=publishers/*}/books\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CreateBook_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CreateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_ABitOfEverythingService_UpdateBook_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook\", runtime.WithHTTPPathPattern(\"/v1/{book.name=publishers/*/books/*}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_UpdateBook_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Lookup_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Lookup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_Custom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}:custom\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Custom_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Custom_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Custom_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/custom/{optional_string_value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Custom_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Custom_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_DoubleColon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DoubleColon\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}:custom:custom\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_DoubleColon_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_DoubleColon_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Update_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_ABitOfEverythingService_UpdateV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2\", runtime.WithHTTPPathPattern(\"/v2/example/a_bit_of_everything/{abe.uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_UpdateV2_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateV2_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_ABitOfEverythingService_UpdateV2_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2\", runtime.WithHTTPPathPattern(\"/v2/example/a_bit_of_everything/{abe.uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_UpdateV2_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateV2_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_ABitOfEverythingService_UpdateV2_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2\", runtime.WithHTTPPathPattern(\"/v2a/example/a_bit_of_everything/{abe.uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_UpdateV2_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_UpdateV2_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_ABitOfEverythingService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Delete_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_GetQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/query/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_GetQuery_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_GetQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_GetRepeatedQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/echo/{value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Echo_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_DeepPathEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho\", runtime.WithHTTPPathPattern(\"/v1/example/deep_path/{single_nested.name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_Timeout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout\", runtime.WithHTTPPathPattern(\"/v2/example/timeout\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Timeout_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Timeout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_ErrorWithDetails_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails\", runtime.WithHTTPPathPattern(\"/v2/example/errorwithdetails\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_GetMessageWithBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody\", runtime.WithHTTPPathPattern(\"/v2/example/withbody/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_PostWithEmptyBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody\", runtime.WithHTTPPathPattern(\"/v2/example/postwithemptybody/{name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/params/get/{single_nested.name}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_CheckPostQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/params/post/{string_value}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_OverwriteRequestContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteRequestContentType\", runtime.WithHTTPPathPattern(\"/v2/example/overwriterequestcontenttype\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_OverwriteResponseContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType\", runtime.WithHTTPPathPattern(\"/v2/example/overwriteresponsecontenttype\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckExternalPathEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum\", runtime.WithHTTPPathPattern(\"/v2/{value}:check\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckExternalNestedPathEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum\", runtime.WithHTTPPathPattern(\"/v3/{value}:check\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ABitOfEverythingService_CheckStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus\", runtime.WithHTTPPathPattern(\"/v1/example/checkStatus\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CheckStatus_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CheckStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodHead, pattern_ABitOfEverythingService_Exists_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_Exists_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_Exists_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodOptions, pattern_ABitOfEverythingService_CustomOptionsRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodTrace, pattern_ABitOfEverythingService_TraceRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/{uuid}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_TraceRequest_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_TraceRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_PostOneofEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostOneofEnum\", runtime.WithHTTPPathPattern(\"/v1/example/oneofenum\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ABitOfEverythingService_PostRequiredMessageType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostRequiredMessageType\", runtime.WithHTTPPathPattern(\"/v1/example/requiredmessagetype\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_ABitOfEverythingService_Create_0                        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"float_value\", \"double_value\", \"int64_value\", \"separator\", \"uint64_value\", \"int32_value\", \"fixed64_value\", \"fixed32_value\", \"bool_value\", \"strprefix\", \"string_value\", \"uint32_value\", \"sfixed32_value\", \"sfixed64_value\", \"sint32_value\", \"sint64_value\", \"nonConventionalNameValue\", \"enum_value\", \"path_enum_value\", \"nested_path_enum_value\", \"enum_value_annotation\"}, \"\"))\n\tpattern_ABitOfEverythingService_CreateBody_0                    = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"a_bit_of_everything\"}, \"\"))\n\tpattern_ABitOfEverythingService_CreateBook_0                    = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 2, 5, 2, 2, 3}, []string{\"v1\", \"publishers\", \"parent\", \"books\"}, \"\"))\n\tpattern_ABitOfEverythingService_UpdateBook_0                    = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 2, 2, 1, 0, 4, 4, 5, 3}, []string{\"v1\", \"publishers\", \"books\", \"book.name\"}, \"\"))\n\tpattern_ABitOfEverythingService_Lookup_0                        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_Custom_0                        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"custom\"))\n\tpattern_ABitOfEverythingService_Custom_1                        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"custom\", \"optional_string_value\"}, \"\"))\n\tpattern_ABitOfEverythingService_DoubleColon_0                   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"custom:custom\"))\n\tpattern_ABitOfEverythingService_Update_0                        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_UpdateV2_0                      = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v2\", \"example\", \"a_bit_of_everything\", \"abe.uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_UpdateV2_1                      = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v2\", \"example\", \"a_bit_of_everything\", \"abe.uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_UpdateV2_2                      = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v2a\", \"example\", \"a_bit_of_everything\", \"abe.uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_Delete_0                        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_GetQuery_0                      = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"query\", \"uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_GetRepeatedQuery_0              = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18}, []string{\"v1\", \"example\", \"a_bit_of_everything_repeated\", \"path_repeated_float_value\", \"path_repeated_double_value\", \"path_repeated_int64_value\", \"path_repeated_uint64_value\", \"path_repeated_int32_value\", \"path_repeated_fixed64_value\", \"path_repeated_fixed32_value\", \"path_repeated_bool_value\", \"path_repeated_string_value\", \"path_repeated_bytes_value\", \"path_repeated_uint32_value\", \"path_repeated_enum_value\", \"path_repeated_sfixed32_value\", \"path_repeated_sfixed64_value\", \"path_repeated_sint32_value\", \"path_repeated_sint64_value\"}, \"\"))\n\tpattern_ABitOfEverythingService_Echo_0                          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"echo\", \"value\"}, \"\"))\n\tpattern_ABitOfEverythingService_Echo_1                          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"echo\"}, \"\"))\n\tpattern_ABitOfEverythingService_Echo_2                          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"echo\"}, \"\"))\n\tpattern_ABitOfEverythingService_DeepPathEcho_0                  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"deep_path\", \"single_nested.name\"}, \"\"))\n\tpattern_ABitOfEverythingService_Timeout_0                       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"timeout\"}, \"\"))\n\tpattern_ABitOfEverythingService_ErrorWithDetails_0              = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"errorwithdetails\"}, \"\"))\n\tpattern_ABitOfEverythingService_GetMessageWithBody_0            = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v2\", \"example\", \"withbody\", \"id\"}, \"\"))\n\tpattern_ABitOfEverythingService_PostWithEmptyBody_0             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v2\", \"example\", \"postwithemptybody\", \"name\"}, \"\"))\n\tpattern_ABitOfEverythingService_CheckGetQueryParams_0           = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"params\", \"get\", \"single_nested.name\"}, \"\"))\n\tpattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"params\", \"get\", \"nested_enum\", \"single_nested.ok\"}, \"\"))\n\tpattern_ABitOfEverythingService_CheckPostQueryParams_0          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"params\", \"post\", \"string_value\"}, \"\"))\n\tpattern_ABitOfEverythingService_OverwriteRequestContentType_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"overwriterequestcontenttype\"}, \"\"))\n\tpattern_ABitOfEverythingService_OverwriteResponseContentType_0  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"overwriteresponsecontenttype\"}, \"\"))\n\tpattern_ABitOfEverythingService_CheckExternalPathEnum_0         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{\"v2\", \"value\"}, \"check\"))\n\tpattern_ABitOfEverythingService_CheckExternalNestedPathEnum_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{\"v3\", \"value\"}, \"check\"))\n\tpattern_ABitOfEverythingService_CheckStatus_0                   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"checkStatus\"}, \"\"))\n\tpattern_ABitOfEverythingService_Exists_0                        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_CustomOptionsRequest_0          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_TraceRequest_0                  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"uuid\"}, \"\"))\n\tpattern_ABitOfEverythingService_PostOneofEnum_0                 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"oneofenum\"}, \"\"))\n\tpattern_ABitOfEverythingService_PostRequiredMessageType_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"requiredmessagetype\"}, \"\"))\n)\n\nvar (\n\tforward_ABitOfEverythingService_Create_0                        = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CreateBody_0                    = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CreateBook_0                    = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_UpdateBook_0                    = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Lookup_0                        = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Custom_0                        = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Custom_1                        = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_DoubleColon_0                   = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Update_0                        = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_UpdateV2_0                      = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_UpdateV2_1                      = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_UpdateV2_2                      = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Delete_0                        = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_GetQuery_0                      = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_GetRepeatedQuery_0              = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Echo_0                          = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Echo_1                          = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Echo_2                          = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_DeepPathEcho_0                  = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Timeout_0                       = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_ErrorWithDetails_0              = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_GetMessageWithBody_0            = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_PostWithEmptyBody_0             = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CheckGetQueryParams_0           = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CheckPostQueryParams_0          = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_OverwriteRequestContentType_0   = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_OverwriteResponseContentType_0  = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CheckExternalPathEnum_0         = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CheckExternalNestedPathEnum_0   = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CheckStatus_0                   = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_Exists_0                        = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_CustomOptionsRequest_0          = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_TraceRequest_0                  = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_PostOneofEnum_0                 = runtime.ForwardResponseMessage\n\tforward_ABitOfEverythingService_PostRequiredMessageType_0       = runtime.ForwardResponseMessage\n)\n\n// RegisterCamelCaseServiceNameHandlerFromEndpoint is same as RegisterCamelCaseServiceNameHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterCamelCaseServiceNameHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterCamelCaseServiceNameHandler(ctx, mux, conn)\n}\n\n// RegisterCamelCaseServiceNameHandler registers the http handlers for service CamelCaseServiceName to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterCamelCaseServiceNameHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterCamelCaseServiceNameHandlerClient(ctx, mux, NewCamelCaseServiceNameClient(conn))\n}\n\n// RegisterCamelCaseServiceNameHandlerClient registers the http handlers for service CamelCaseServiceName\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"CamelCaseServiceNameClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"CamelCaseServiceNameClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"CamelCaseServiceNameClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime.ServeMux, client CamelCaseServiceNameClient) error {\n\tmux.Handle(http.MethodGet, pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty\", runtime.WithHTTPPathPattern(\"/v2/example/empty\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_CamelCaseServiceName_Empty_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_CamelCaseServiceName_Empty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_CamelCaseServiceName_Empty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"empty\"}, \"\"))\n)\n\nvar (\n\tforward_CamelCaseServiceName_Empty_0 = runtime.ForwardResponseMessage\n)\n\n// RegisterSnakeEnumServiceHandlerFromEndpoint is same as RegisterSnakeEnumServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterSnakeEnumServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterSnakeEnumServiceHandler(ctx, mux, conn)\n}\n\n// RegisterSnakeEnumServiceHandler registers the http handlers for service SnakeEnumService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterSnakeEnumServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterSnakeEnumServiceHandlerClient(ctx, mux, NewSnakeEnumServiceClient(conn))\n}\n\n// RegisterSnakeEnumServiceHandlerClient registers the http handlers for service SnakeEnumService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"SnakeEnumServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"SnakeEnumServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"SnakeEnumServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterSnakeEnumServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SnakeEnumServiceClient) error {\n\tmux.Handle(http.MethodGet, pattern_SnakeEnumService_SnakeEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService/SnakeEnum\", runtime.WithHTTPPathPattern(\"/v1/example/snake/{who}/{what}/{where}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_SnakeEnumService_SnakeEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_SnakeEnumService_SnakeEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_SnakeEnumService_SnakeEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{\"v1\", \"example\", \"snake\", \"who\", \"what\", \"where\"}, \"\"))\n)\n\nvar (\n\tforward_SnakeEnumService_SnakeEnum_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/a_bit_of_everything.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"examples/internal/proto/oneofenum/oneof_enum.proto\";\nimport \"examples/internal/proto/pathenum/path_enum.proto\";\nimport \"examples/internal/proto/sub/message.proto\";\nimport \"examples/internal/proto/sub2/message.proto\";\nimport \"google/api/annotations.proto\";\nimport \"google/api/field_behavior.proto\";\nimport \"google/protobuf/duration.proto\";\nimport \"google/protobuf/empty.proto\";\nimport \"google/protobuf/field_mask.proto\";\nimport \"google/protobuf/timestamp.proto\";\nimport \"google/protobuf/wrappers.proto\";\nimport \"google/rpc/status.proto\";\nimport \"protoc-gen-openapiv2/options/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\noption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n  info: {\n    title: \"A Bit of Everything\"\n    version: \"1.0\"\n    contact: {\n      name: \"gRPC-Gateway project\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      email: \"none@example.com\"\n    }\n    license: {\n      name: \"BSD 3-Clause License\"\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\"\n    }\n    extensions: {\n      key: \"x-something-something\"\n      value: {string_value: \"yadda\"}\n    }\n  }\n  // Overwriting host entry breaks tests, so this is not done here.\n  external_docs: {\n    url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n    description: \"More about gRPC-Gateway\"\n  }\n  schemes: HTTP\n  schemes: HTTPS\n  schemes: WSS\n  consumes: \"application/json\"\n  consumes: \"application/x-foo-mime\"\n  produces: \"application/json\"\n  produces: \"application/x-foo-mime\"\n  security_definitions: {\n    security: {\n      key: \"BasicAuth\"\n      value: {type: TYPE_BASIC}\n    }\n    security: {\n      key: \"ApiKeyAuth\"\n      value: {\n        type: TYPE_API_KEY\n        in: IN_HEADER\n        name: \"X-API-Key\"\n        extensions: {\n          key: \"x-amazon-apigateway-authtype\"\n          value: {string_value: \"oauth2\"}\n        }\n        extensions: {\n          key: \"x-amazon-apigateway-authorizer\"\n          value: {\n            struct_value: {\n              fields: {\n                key: \"type\"\n                value: {string_value: \"token\"}\n              }\n              fields: {\n                key: \"authorizerResultTtlInSeconds\"\n                value: {number_value: 60}\n              }\n            }\n          }\n        }\n      }\n    }\n    security: {\n      key: \"OAuth2\"\n      value: {\n        type: TYPE_OAUTH2\n        flow: FLOW_ACCESS_CODE\n        authorization_url: \"https://example.com/oauth/authorize\"\n        token_url: \"https://example.com/oauth/token\"\n        scopes: {\n          scope: {\n            key: \"read\"\n            value: \"Grants read access\"\n          }\n          scope: {\n            key: \"write\"\n            value: \"Grants write access\"\n          }\n          scope: {\n            key: \"admin\"\n            value: \"Grants read and write access to administrative information\"\n          }\n        }\n      }\n    }\n  }\n  security: {\n    security_requirement: {\n      key: \"BasicAuth\"\n      value: {}\n    }\n    security_requirement: {\n      key: \"ApiKeyAuth\"\n      value: {}\n    }\n  }\n  security: {\n    security_requirement: {\n      key: \"OAuth2\"\n      value: {\n        scope: \"read\"\n        scope: \"write\"\n      }\n    }\n    security_requirement: {\n      key: \"ApiKeyAuth\"\n      value: {}\n    }\n  }\n  responses: {\n    key: \"403\"\n    value: {description: \"Returned when the user does not have permission to access the resource.\"}\n  }\n  responses: {\n    key: \"404\"\n    value: {\n      description: \"Returned when the resource does not exist.\"\n      schema: {\n        json_schema: {type: STRING}\n      }\n    }\n  }\n  responses: {\n    key: \"418\"\n    value: {\n      description: \"I'm a teapot.\"\n      schema: {\n        json_schema: {ref: \".grpc.gateway.examples.internal.proto.examplepb.NumericEnum\"}\n      }\n    }\n  }\n  responses: {\n    key: \"500\"\n    value: {\n      description: \"Server error\"\n      headers: {\n        key: \"X-Correlation-Id\"\n        value: {\n          description: \"Unique event identifier for server requests\"\n          type: \"string\"\n          format: \"uuid\"\n          default: \"\\\"2438ac3c-37eb-4902-adef-ed16b4431030\\\"\"\n          pattern: \"^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$\"\n        }\n      }\n      schema: {\n        json_schema: {ref: \".grpc.gateway.examples.internal.proto.examplepb.ErrorResponse\"}\n      }\n    }\n  }\n  tags: {\n    name: \"echo rpc\"\n    description: \"Echo Rpc description\"\n    extensions: {\n      key: \"x-traitTag\"\n      value: {bool_value: true}\n    }\n  }\n  extensions: {\n    key: \"x-grpc-gateway-foo\"\n    value: {string_value: \"bar\"}\n  }\n  extensions: {\n    key: \"x-grpc-gateway-baz-list\"\n    value: {\n      list_value: {\n        values: {string_value: \"one\"}\n        values: {bool_value: true}\n      }\n    }\n  }\n};\n\nmessage ErrorResponse {\n  string correlationId = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    pattern: \"^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$\"\n    title: \"x-correlation-id\"\n    description: \"Unique event identifier for server requests\"\n    format: \"uuid\"\n    example: \"\\\"2438ac3c-37eb-4902-adef-ed16b4431030\\\"\"\n  }];\n  ErrorObject error = 2;\n}\n\nmessage ErrorObject {\n  int32 code = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    pattern: \"^[0-9]$\"\n    title: \"code\"\n    description: \"Response code\"\n    format: \"integer\"\n  }];\n  string message = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    pattern: \"^[a-zA-Z0-9]{1, 32}$\"\n    title: \"message\"\n    description: \"Response message\"\n  }];\n}\n\n// Intentionally complicated message type to cover many features of Protobuf.\nmessage ABitOfEverything {\n  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n    json_schema: {\n      title: \"A bit of everything\"\n      description: \"Intentionally complicated message type to cover many features of Protobuf.\"\n      required: [\n        \"uuid\",\n        \"int64_value\",\n        \"double_value\",\n        \"required_field_schema_json_name\"\n      ]\n      extensions: {\n        key: \"x-a-bit-of-everything-foo\"\n        value: {string_value: \"bar\"}\n      }\n    }\n    external_docs: {\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      description: \"Find out more about ABitOfEverything\"\n    }\n    example: \"{\\\"int64_value\\\": 12, \\\"double_value\\\": 12.3}\"\n  };\n\n  // Nested is nested type.\n  message Nested {\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {example: \"{\\\"ok\\\": \\\"TRUE\\\"}\"};\n    // name is nested field.\n    string name = 1;\n    uint32 amount = 2;\n    // DeepEnum is one or zero.\n    enum DeepEnum {\n      // FALSE is false.\n      FALSE = 0;\n      // TRUE is true.\n      TRUE = 1;\n    }\n\n    // DeepEnum comment.\n    DeepEnum ok = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: \"DeepEnum description.\"}];\n  }\n  Nested single_nested = 25;\n\n  string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    pattern: \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\"\n    min_length: 1\n    field_configuration: {path_param_name: \"uuidName\"}\n    format: \"uuid\"\n    extensions: {\n      key: \"x-internal\"\n      value: {bool_value: true}\n    }\n  }];\n  repeated Nested nested = 2;\n  float float_value = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    description: \"Float value field\"\n    default: \"0.2\"\n    required: [\"float_value\"]\n  }];\n  double double_value = 4;\n  int64 int64_value = 5;\n  uint64 uint64_value = 6;\n  int32 int32_value = 7;\n  fixed64 fixed64_value = 8;\n  fixed32 fixed32_value = 9;\n  bool bool_value = 10;\n  string string_value = 11;\n  bytes bytes_value = 29;\n  uint32 uint32_value = 13;\n  NumericEnum enum_value = 14;\n  pathenum.PathEnum path_enum_value = 30;\n  pathenum.MessagePathEnum.NestedPathEnum nested_path_enum_value = 31;\n  sfixed32 sfixed32_value = 15;\n  sfixed64 sfixed64_value = 16;\n  sint32 sint32_value = 17;\n  sint64 sint64_value = 18;\n  repeated string repeated_string_value = 19;\n  oneof oneof_value {\n    google.protobuf.Empty oneof_empty = 20;\n    string oneof_string = 21;\n  }\n\n  // map of numeric enum\n  map<string, NumericEnum> map_value = 22;\n\n  // map of string  (This comment is overridden by the field annotation)\n  map<string, string> mapped_string_value = 23 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    title: \"Map of string title\"\n    description: \"Map of string description.\"\n  }];\n\n  map<string, Nested> mapped_nested_value = 24;\n\n  string nonConventionalNameValue = 26;\n\n  google.protobuf.Timestamp timestamp_value = 27;\n\n  // repeated enum value. it is comma-separated in query\n  repeated NumericEnum repeated_enum_value = 28;\n\n  // repeated numeric enum comment (This comment is overridden by the field annotation)\n  repeated NumericEnum repeated_enum_annotation = 32 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    title: \"Repeated numeric enum title\"\n    description: \"Repeated numeric enum description.\"\n  }];\n\n  // numeric enum comment (This comment is overridden by the field annotation)\n  NumericEnum enum_value_annotation = 33 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    title: \"Numeric enum title\"\n    description: \"Numeric enum description.\"\n  }];\n\n  // repeated string comment (This comment is overridden by the field annotation)\n  repeated string repeated_string_annotation = 34 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    title: \"Repeated string title\"\n    description: \"Repeated string description.\"\n  }];\n\n  // repeated nested object comment (This comment is overridden by the field annotation)\n  repeated Nested repeated_nested_annotation = 35 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    title: \"Repeated nested object title\"\n    description: \"Repeated nested object description.\"\n  }];\n\n  // nested object comments (This comment is overridden by the field annotation)\n  Nested nested_annotation = 36 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    title: \"Nested object title\"\n    description: \"Nested object description.\"\n  }];\n\n  int64 int64_override_type = 37 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {type: INTEGER}];\n\n  // mark a field as required in Open API definition\n  string required_string_via_field_behavior_annotation = 38 [(google.api.field_behavior) = REQUIRED];\n\n  // mark a field as readonly in Open API definition\n  string output_only_string_via_field_behavior_annotation = 39 [(google.api.field_behavior) = OUTPUT_ONLY];\n\n  optional string optional_string_value = 40;\n\n  // Test openapiv2 generation of repeated fields\n  repeated string product_id = 41 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n    pattern: \"^[0-9]+$\"\n    max_length: 19\n    min_length: 1\n    description: \"Only digits are allowed.\"\n  }];\n\n  // Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\n  string optional_string_field = 42;\n  string required_string_field_1 = 43 [(google.api.field_behavior) = REQUIRED];\n  string required_string_field_2 = 44 [(google.api.field_behavior) = REQUIRED];\n\n  // Test openapiv2 handling of required json_name fields\n  string required_field_behavior_json_name = 45 [\n    json_name = \"required_field_behavior_json_name_custom\",\n    (google.api.field_behavior) = REQUIRED\n  ];\n  string required_field_schema_json_name = 46 [json_name = \"required_field_schema_json_name_custom\"];\n\n  string trailing_only = 47; // Trailing only\n  string trailing_only_dot = 48; // Trailing only dot.\n  // Leading both\n  string trailing_both = 49; // Trailing both.\n  // Leading multiline\n  //\n  // This is an example of a multi-line comment.\n  string trailing_multiline = 50; // Trailing multiline.\n\n  // Specify a custom format of repeated field items\n  repeated string uuids = 51 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {format: \"uuid\"}];\n}\n\n// ABitOfEverythingRepeated is used to validate repeated path parameter functionality\nmessage ABitOfEverythingRepeated {\n  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {example: \"{\\\"path_repeated_bool_value\\\": [true, true, false, true], \\\"path_repeated_int32_value\\\": [1, 2, 3]}\"};\n\n  // repeated values. they are comma-separated in path\n  repeated float path_repeated_float_value = 1;\n  repeated double path_repeated_double_value = 2;\n  repeated int64 path_repeated_int64_value = 3;\n  repeated uint64 path_repeated_uint64_value = 4;\n  repeated int32 path_repeated_int32_value = 5;\n  repeated fixed64 path_repeated_fixed64_value = 6;\n  repeated fixed32 path_repeated_fixed32_value = 7;\n  repeated bool path_repeated_bool_value = 8;\n  repeated string path_repeated_string_value = 9;\n  repeated bytes path_repeated_bytes_value = 10;\n  repeated uint32 path_repeated_uint32_value = 11;\n  repeated NumericEnum path_repeated_enum_value = 12;\n  repeated sfixed32 path_repeated_sfixed32_value = 13;\n  repeated sfixed64 path_repeated_sfixed64_value = 14;\n  repeated sint32 path_repeated_sint32_value = 15;\n  repeated sint64 path_repeated_sint64_value = 16;\n}\n\nmessage CheckStatusResponse {\n  google.rpc.Status status = 1;\n}\n\nmessage Body {\n  string name = 1;\n}\n\nmessage MessageWithBody {\n  string id = 1;\n  Body data = 2;\n}\n\n// NumericEnum is one or zero.\nenum NumericEnum {\n  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum) = {\n    description: \"NumericEnum is one or zero.\"\n    title: \"NumericEnum\"\n    extensions: {\n      key: \"x-a-bit-of-everything-foo\"\n      value: {string_value: \"bar\"}\n    }\n    external_docs: {\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      description: \"Find out more about ABitOfEverything\"\n    }\n    example: \"\\\"ZERO\\\"\"\n  };\n  // ZERO means 0\n  ZERO = 0;\n  // ONE means 1\n  ONE = 1;\n}\n\n// UpdateV2Request request for update includes the message and the update mask\nmessage UpdateV2Request {\n  ABitOfEverything abe = 1;\n  // The paths to update.\n  google.protobuf.FieldMask update_mask = 2;\n}\n\n// An example resource type from AIP-123 used to test the behavior described in\n// the CreateBookRequest message.\n//\n// See: https://google.aip.dev/123\nmessage Book {\n  // The resource name of the book.\n  //\n  // Format: `publishers/{publisher}/books/{book}`\n  //\n  // Example: `publishers/1257894000000000000/books/my-book`\n  string name = 1;\n\n  // Output only. The book's ID.\n  string id = 2;\n\n  // Output only. Creation time of the book.\n  google.protobuf.Timestamp create_time = 3;\n}\n\n// A standard Create message from AIP-133 with a user-specified ID.\n// The user-specified ID (the `book_id` field in this example) must become a\n// query parameter in the OpenAPI spec.\n//\n// See: https://google.aip.dev/133#user-specified-ids\nmessage CreateBookRequest {\n  // The publisher in which to create the book.\n  //\n  // Format: `publishers/{publisher}`\n  //\n  // Example: `publishers/1257894000000000000`\n  string parent = 1;\n\n  // The book to create.\n  Book book = 2 [(google.api.field_behavior) = REQUIRED];\n\n  // The ID to use for the book.\n  //\n  // This must start with an alphanumeric character.\n  string book_id = 3;\n}\n\n// A standard Update message from AIP-134\n//\n// See: https://google.aip.dev/134#request-message\nmessage UpdateBookRequest {\n  // The book to update.\n  //\n  // The book's `name` field is used to identify the book to be updated.\n  // Format: publishers/{publisher}/books/{book}\n  Book book = 1 [(google.api.field_behavior) = REQUIRED];\n\n  // The list of fields to be updated.\n  google.protobuf.FieldMask update_mask = 2;\n\n  // If set to true, and the book is not found, a new book will be created.\n  // In this situation, `update_mask` is ignored.\n  bool allow_missing = 3;\n}\n\n// ABitOfEverything service is used to validate that APIs with complicated\n// proto messages and URL templates are still processed correctly.\nservice ABitOfEverythingService {\n  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = {\n    name: \"ABitOfEverything\"\n    description: \"ABitOfEverythingService description -- which should not be used in place of the documentation comment!\"\n    external_docs: {\n      url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      description: \"Find out more about EchoService\"\n    }\n  };\n\n  // Create a new ABitOfEverything\n  //\n  // This API creates a new ABitOfEverything\n  rpc Create(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {post: \"/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}\"};\n  }\n  rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {\n      post: \"/v1/example/a_bit_of_everything\"\n      body: \"*\"\n    };\n  }\n  // Create a book.\n  rpc CreateBook(CreateBookRequest) returns (Book) {\n    option (google.api.http) = {\n      post: \"/v1/{parent=publishers/*}/books\"\n      body: \"book\"\n    };\n  }\n  rpc UpdateBook(UpdateBookRequest) returns (Book) {\n    option (google.api.http) = {\n      patch: \"/v1/{book.name=publishers/*/books/*}\"\n      body: \"book\"\n    };\n  }\n  rpc Lookup(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (ABitOfEverything) {\n    option (google.api.http) = {get: \"/v1/example/a_bit_of_everything/{uuid}\"};\n  }\n  rpc Custom(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {\n      post: \"/v1/example/a_bit_of_everything/{uuid}:custom\"\n      additional_bindings: {\n        // Testing proto3 optional field\n        get: \"/v1/example/a_bit_of_everything/custom/{optional_string_value}\"\n      }\n    };\n  }\n  rpc DoubleColon(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {post: \"/v1/example/a_bit_of_everything/{uuid}:custom:custom\"};\n  }\n  rpc Update(ABitOfEverything) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      put: \"/v1/example/a_bit_of_everything/{uuid}\"\n      body: \"*\"\n    };\n  }\n  rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      put: \"/v2/example/a_bit_of_everything/{abe.uuid}\"\n      body: \"abe\"\n      additional_bindings: [\n        {\n          patch: \"/v2/example/a_bit_of_everything/{abe.uuid}\"\n          body: \"abe\"\n        },\n        {\n          patch: \"/v2a/example/a_bit_of_everything/{abe.uuid}\"\n          body: \"*\"\n        }\n      ]\n    };\n  }\n\n  rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) {\n    option (google.api.http) = {delete: \"/v1/example/a_bit_of_everything/{uuid}\"};\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n      security: {\n        security_requirement: {\n          key: \"ApiKeyAuth\"\n          value: {}\n        }\n        security_requirement: {\n          key: \"OAuth2\"\n          value: {\n            scope: \"read\"\n            scope: \"write\"\n          }\n        }\n      }\n      extensions: {\n        key: \"x-irreversible\"\n        value: {bool_value: true}\n      }\n    };\n  }\n  rpc GetQuery(ABitOfEverything) returns (google.protobuf.Empty) {\n    option (google.api.http) = {get: \"/v1/example/a_bit_of_everything/query/{uuid}\"};\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n      deprecated: true // For testing purposes.\n      external_docs: {\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        description: \"Find out more about GetQuery\"\n      }\n      security: {}\n    };\n  }\n  rpc GetRepeatedQuery(ABitOfEverythingRepeated) returns (ABitOfEverythingRepeated) {\n    option (google.api.http) = {get: \"/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}\"};\n  }\n  // Echo allows posting a StringMessage value.\n  //\n  // It also exposes multiple bindings.\n  //\n  // This makes it useful when validating that the OpenAPI v2 API\n  // description exposes documentation correctly on all paths\n  // defined as additional_bindings in the proto.\n  rpc Echo(grpc.gateway.examples.internal.proto.sub.StringMessage) returns (grpc.gateway.examples.internal.proto.sub.StringMessage) {\n    option (google.api.http) = {\n      get: \"/v1/example/a_bit_of_everything/echo/{value}\"\n      additional_bindings: {\n        post: \"/v2/example/echo\"\n        body: \"value\"\n      }\n      additional_bindings: {get: \"/v2/example/echo\"}\n    };\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n      description: \"Description Echo\"\n      summary: \"Summary: Echo rpc\"\n      tags: \"echo rpc\"\n      external_docs: {\n        url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        description: \"Find out more Echo\"\n      }\n      responses: {\n        key: \"200\"\n        value: {\n          examples: {\n            key: \"application/json\"\n            value: \"{\\\"value\\\": \\\"the input value\\\"}\"\n          }\n        }\n      }\n      responses: {\n        key: \"503\"\n        value: {\n          description: \"Returned when the resource is temporarily unavailable.\"\n          extensions: {\n            key: \"x-number\"\n            value: {number_value: 100}\n          }\n        }\n      }\n      responses: {\n        // Overwrites global definition.\n        key: \"404\"\n        value: {\n          description: \"Returned when the resource does not exist.\"\n          schema: {\n            json_schema: {type: INTEGER}\n          }\n        }\n      }\n    };\n  }\n  rpc DeepPathEcho(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {\n      post: \"/v1/example/deep_path/{single_nested.name}\"\n      body: \"*\"\n    };\n  }\n  rpc NoBindings(google.protobuf.Duration) returns (google.protobuf.Empty) {}\n  rpc Timeout(google.protobuf.Empty) returns (google.protobuf.Empty) {\n    option (google.api.http) = {get: \"/v2/example/timeout\"};\n  }\n  rpc ErrorWithDetails(google.protobuf.Empty) returns (google.protobuf.Empty) {\n    option (google.api.http) = {get: \"/v2/example/errorwithdetails\"};\n  }\n  rpc GetMessageWithBody(MessageWithBody) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v2/example/withbody/{id}\"\n      body: \"data\"\n    };\n  }\n  rpc PostWithEmptyBody(Body) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v2/example/postwithemptybody/{name}\"\n      body: \"*\"\n    };\n  }\n  rpc CheckGetQueryParams(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {get: \"/v1/example/a_bit_of_everything/params/get/{single_nested.name}\"};\n  }\n  rpc CheckNestedEnumGetQueryParams(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {get: \"/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}\"};\n  }\n  rpc CheckPostQueryParams(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {\n      post: \"/v1/example/a_bit_of_everything/params/post/{string_value}\"\n      body: \"single_nested\"\n    };\n  }\n  rpc OverwriteRequestContentType(Body) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v2/example/overwriterequestcontenttype\"\n      body: \"*\"\n    };\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {consumes: \"application/x-bar-mime\"};\n  }\n  rpc OverwriteResponseContentType(google.protobuf.Empty) returns (google.protobuf.StringValue) {\n    option (google.api.http) = {get: \"/v2/example/overwriteresponsecontenttype\"};\n    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {produces: \"application/text\"};\n  }\n  rpc CheckExternalPathEnum(pathenum.MessageWithPathEnum) returns (google.protobuf.Empty) {\n    option (google.api.http) = {get: \"/v2/{value}:check\"};\n  }\n  rpc CheckExternalNestedPathEnum(pathenum.MessageWithNestedPathEnum) returns (google.protobuf.Empty) {\n    option (google.api.http) = {get: \"/v3/{value}:check\"};\n  }\n\n  rpc CheckStatus(google.protobuf.Empty) returns (CheckStatusResponse) {\n    option (google.api.http) = {get: \"/v1/example/checkStatus\"};\n  }\n\n  rpc Exists(ABitOfEverything) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      custom: {\n        kind: \"HEAD\"\n        path: \"/v1/example/a_bit_of_everything/{uuid}\"\n      }\n    };\n  }\n\n  rpc CustomOptionsRequest(ABitOfEverything) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      custom: {\n        kind: \"OPTIONS\"\n        path: \"/v1/example/a_bit_of_everything/{uuid}\"\n      }\n    };\n  }\n\n  rpc TraceRequest(ABitOfEverything) returns (ABitOfEverything) {\n    option (google.api.http) = {\n      custom: {\n        kind: \"TRACE\"\n        path: \"/v1/example/a_bit_of_everything/{uuid}\"\n      }\n    };\n  }\n\n  rpc PostOneofEnum(grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v1/example/oneofenum\"\n      body: \"example_enum\"\n    };\n  }\n\n  rpc PostRequiredMessageType(RequiredMessageTypeRequest) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v1/example/requiredmessagetype\"\n      body: \"*\"\n    };\n  }\n}\n\n// camelCase and lowercase service names are valid but not recommended (use TitleCase instead)\nservice camelCaseServiceName {\n  rpc Empty(google.protobuf.Empty) returns (google.protobuf.Empty) {\n    option (google.api.http) = {get: \"/v2/example/empty\"};\n  }\n}\nservice AnotherServiceWithNoBindings {\n  rpc NoBindings(google.protobuf.Empty) returns (google.protobuf.Empty) {}\n}\n\nservice SnakeEnumService {\n  rpc SnakeEnum(SnakeEnumRequest) returns (SnakeEnumResponse) {\n    option (google.api.http) = {get: \"/v1/example/snake/{who}/{what}/{where}\"};\n  }\n}\n\n// Ignoring lint warnings as this enum type exist to validate proper functionality\n// for projects that don't follow these lint rules.\n// buf:lint:ignore ENUM_PASCAL_CASE\nenum snake_case_enum {\n  // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n  value_c = 0;\n  // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n  value_d = 1;\n}\n\n// Ignoring lint warnings as this enum type exist to validate proper functionality\n// for projects that don't follow these lint rules.\n// buf:lint:ignore ENUM_PASCAL_CASE\nenum snake_case_0_enum {\n  // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n  value_e = 0;\n  // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n  value_f = 1;\n}\n\nmessage SnakeEnumRequest {\n  snake_case_enum what = 1;\n  snake_case_0_enum who = 2;\n  pathenum.snake_case_for_import where = 3;\n}\n\nmessage SnakeEnumResponse {}\n\n// Required message type -> OpenAPI\n// https://github.com/grpc-ecosystem/grpc-gateway/issues/2837\nmessage RequiredMessageTypeRequest {\n  string id = 1 [(google.api.field_behavior) = REQUIRED];\n  Foo foo = 2 [(google.api.field_behavior) = REQUIRED];\n}\n\nmessage Foo {\n  Bar bar = 1 [(google.api.field_behavior) = REQUIRED];\n}\n\nmessage Bar {\n  string id = 1 [(google.api.field_behavior) = REQUIRED];\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/a_bit_of_everything.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"A Bit of Everything\",\n    \"version\": \"1.0\",\n    \"contact\": {\n      \"name\": \"gRPC-Gateway project\",\n      \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\",\n      \"email\": \"none@example.com\"\n    },\n    \"license\": {\n      \"name\": \"BSD 3-Clause License\",\n      \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\"\n    },\n    \"x-something-something\": \"yadda\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"echo rpc\",\n      \"description\": \"Echo Rpc description\",\n      \"x-traitTag\": true\n    },\n    {\n      \"name\": \"ABitOfEverything\",\n      \"description\": \"ABitOfEverythingService description -- which should not be used in place of the documentation comment!\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about EchoService\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      }\n    },\n    {\n      \"name\": \"camelCaseServiceName\"\n    },\n    {\n      \"name\": \"AnotherServiceWithNoBindings\"\n    },\n    {\n      \"name\": \"SnakeEnumService\"\n    }\n  ],\n  \"schemes\": [\n    \"http\",\n    \"https\",\n    \"wss\"\n  ],\n  \"consumes\": [\n    \"application/json\",\n    \"application/x-foo-mime\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"application/x-foo-mime\"\n  ],\n  \"paths\": {\n    \"/v1/example/a_bit_of_everything\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_CreateBody\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/custom/{optionalStringValue}\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_Custom2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"uuid\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/echo/{value}\": {\n      \"get\": {\n        \"summary\": \"Summary: Echo rpc\",\n        \"description\": \"Description Echo\",\n        \"operationId\": \"ABitOfEverythingService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/subStringMessage\"\n            },\n            \"examples\": {\n              \"application/json\": {\n                \"value\": \"the input value\"\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"integer\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"503\": {\n            \"description\": \"Returned when the resource is temporarily unavailable.\",\n            \"schema\": {},\n            \"x-number\": 100\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"echo rpc\"\n        ],\n        \"externalDocs\": {\n          \"description\": \"Find out more Echo\",\n          \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        }\n      }\n    },\n    \"/v1/example/a_bit_of_everything/params/get/nested_enum/{singleNested.ok}\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_CheckNestedEnumGetQueryParams\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ]\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uuid\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/params/get/{singleNested.name}\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_CheckGetQueryParams\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"uuid\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/params/post/{stringValue}\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_CheckPostQueryParams\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n            }\n          },\n          {\n            \"name\": \"uuid\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/query/{uuidName}\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_GetQuery\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ],\n        \"deprecated\": true,\n        \"security\": [],\n        \"externalDocs\": {\n          \"description\": \"Find out more about GetQuery\",\n          \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        }\n      }\n    },\n    \"/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}\": {\n      \"post\": {\n        \"summary\": \"Create a new ABitOfEverything\",\n        \"description\": \"This API creates a new ABitOfEverything\",\n        \"operationId\": \"ABitOfEverythingService_Create\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"pattern\": \"strprefix/[^/]+\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ]\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ]\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ]\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum description.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ]\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"uuid\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/{uuidName}\": {\n      \"put\": {\n        \"operationId\": \"ABitOfEverythingService_Update\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverythingServiceUpdateBody\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      },\n      \"head\": {\n        \"operationId\": \"ABitOfEverythingService_Exists\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      },\n      \"options\": {\n        \"operationId\": \"ABitOfEverythingService_CustomOptionsRequest\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/{uuidName}:custom\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_Custom\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/{uuidName}:custom:custom\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_DoubleColon\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"singleNested.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"singleNested.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"floatValue\",\n            \"description\": \"Float value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"float\",\n            \"default\": \"0.2\"\n          },\n          {\n            \"name\": \"doubleValue\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"int64Value\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"uint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"int32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"fixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          },\n          {\n            \"name\": \"fixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"boolValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"stringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"bytesValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          },\n          {\n            \"name\": \"uint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"enumValue\",\n            \"description\": \" - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"pathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ],\n            \"default\": \"ABC\"\n          },\n          {\n            \"name\": \"nestedPathEnumValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ],\n            \"default\": \"GHI\"\n          },\n          {\n            \"name\": \"sfixed32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sfixed64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"sint32Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"sint64Value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"repeatedStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"oneofEmpty\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"object\"\n          },\n          {\n            \"name\": \"oneofString\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mapValue\",\n            \"description\": \"map of numeric enum\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"mappedStringValue\",\n            \"description\": \"Map of string title\\n\\nMap of string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"mappedNestedValue\",\n            \"in\": \"query\",\n            \"required\": false\n          },\n          {\n            \"name\": \"nonConventionalNameValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"timestampValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"repeatedEnumValue\",\n            \"description\": \"repeated enum value. it is comma-separated in query\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"repeatedEnumAnnotation\",\n            \"description\": \"Repeated numeric enum title\\n\\nRepeated numeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"enumValueAnnotation\",\n            \"description\": \"Numeric enum title\\n\\nNumeric enum description.\\n\\n - ZERO: ZERO means 0\\n - ONE: ONE means 1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ZERO\",\n              \"ONE\"\n            ],\n            \"default\": \"ZERO\"\n          },\n          {\n            \"name\": \"repeatedStringAnnotation\",\n            \"description\": \"Repeated string title\\n\\nRepeated string description.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"nestedAnnotation.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nestedAnnotation.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"nestedAnnotation.ok\",\n            \"description\": \"DeepEnum description.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"FALSE\",\n              \"TRUE\"\n            ],\n            \"default\": \"FALSE\"\n          },\n          {\n            \"name\": \"int64OverrideType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"requiredStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as required in Open API definition\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"outputOnlyStringViaFieldBehaviorAnnotation\",\n            \"description\": \"mark a field as readonly in Open API definition\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"optionalStringValue\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"productId\",\n            \"description\": \"Test openapiv2 generation of repeated fields\\n\\nOnly digits are allowed.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"maxLength\": 19,\n              \"minLength\": 1,\n              \"pattern\": \"^[0-9]+$\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"optionalStringField\",\n            \"description\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"requiredStringField2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_behavior_json_name_custom\",\n            \"description\": \"Test openapiv2 handling of required json_name fields\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"required_field_schema_json_name_custom\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnly\",\n            \"description\": \"Trailing only\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingOnlyDot\",\n            \"description\": \"Trailing only dot.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingBoth\",\n            \"description\": \"Leading both\\n\\nTrailing both.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"trailingMultiline\",\n            \"description\": \"Leading multiline\\n\\nThis is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uuids\",\n            \"description\": \"Specify a custom format of repeated field items\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uuid\"\n            },\n            \"collectionFormat\": \"multi\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/{uuid}\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_Lookup\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuid\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      },\n      \"delete\": {\n        \"operationId\": \"ABitOfEverythingService_Delete\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuid\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ],\n        \"security\": [\n          {\n            \"ApiKeyAuth\": [],\n            \"OAuth2\": [\n              \"read\",\n              \"write\"\n            ]\n          }\n        ],\n        \"x-irreversible\": true\n      }\n    },\n    \"/v1/example/a_bit_of_everything_repeated/{pathRepeatedFloatValue}/{pathRepeatedDoubleValue}/{pathRepeatedInt64Value}/{pathRepeatedUint64Value}/{pathRepeatedInt32Value}/{pathRepeatedFixed64Value}/{pathRepeatedFixed32Value}/{pathRepeatedBoolValue}/{pathRepeatedStringValue}/{pathRepeatedBytesValue}/{pathRepeatedUint32Value}/{pathRepeatedEnumValue}/{pathRepeatedSfixed32Value}/{pathRepeatedSfixed64Value}/{pathRepeatedSint32Value}/{pathRepeatedSint64Value}\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_GetRepeatedQuery\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverythingRepeated\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"pathRepeatedFloatValue\",\n            \"description\": \"repeated values. they are comma-separated in path\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"number\",\n              \"format\": \"float\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedDoubleValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"number\",\n              \"format\": \"double\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedInt64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedUint64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uint64\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedInt32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedFixed64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"uint64\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedFixed32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedBoolValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"boolean\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedStringValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedBytesValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"byte\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedUint32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedEnumValue\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ZERO\",\n                \"ONE\"\n              ]\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedSfixed32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedSfixed64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedSint32Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          },\n          {\n            \"name\": \"pathRepeatedSint64Value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            },\n            \"collectionFormat\": \"csv\",\n            \"minItems\": 1\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/checkStatus\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_CheckStatus\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbCheckStatusResponse\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/deep_path/{singleNested.name}\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_DeepPathEcho\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"singleNested.name\",\n            \"description\": \"name is nested field.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ABitOfEverythingServiceDeepPathEchoBody\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/oneofenum\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_PostOneofEnum\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"exampleEnum\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/oneofenumExampleEnum\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/requiredmessagetype\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_PostRequiredMessageType\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbRequiredMessageTypeRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/example/snake/{who}/{what}/{where}\": {\n      \"get\": {\n        \"operationId\": \"SnakeEnumService_SnakeEnum\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSnakeEnumResponse\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"who\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"value_e\",\n              \"value_f\"\n            ]\n          },\n          {\n            \"name\": \"what\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"value_c\",\n              \"value_d\"\n            ]\n          },\n          {\n            \"name\": \"where\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"value_x\",\n              \"value_y\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"SnakeEnumService\"\n        ]\n      }\n    },\n    \"/v1/{book.name}\": {\n      \"patch\": {\n        \"operationId\": \"ABitOfEverythingService_UpdateBook\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbBook\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"book.name\",\n            \"description\": \"The resource name of the book.\\n\\nFormat: `publishers/{publisher}/books/{book}`\\n\\nExample: `publishers/1257894000000000000/books/my-book`\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"pattern\": \"publishers/[^/]+/books/[^/]+\"\n          },\n          {\n            \"name\": \"book\",\n            \"description\": \"The book to update.\\n\\nThe book's `name` field is used to identify the book to be updated.\\nFormat: publishers/{publisher}/books/{book}\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"id\": {\n                  \"type\": \"string\",\n                  \"description\": \"Output only. The book's ID.\",\n                  \"readOnly\": true\n                },\n                \"createTime\": {\n                  \"type\": \"string\",\n                  \"format\": \"date-time\",\n                  \"description\": \"Output only. Creation time of the book.\",\n                  \"readOnly\": true\n                }\n              },\n              \"description\": \"The book's `name` field is used to identify the book to be updated.\\nFormat: publishers/{publisher}/books/{book}\",\n              \"title\": \"The book to update.\"\n            }\n          },\n          {\n            \"name\": \"allowMissing\",\n            \"description\": \"If set to true, and the book is not found, a new book will be created.\\nIn this situation, `update_mask` is ignored.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v1/{parent}/books\": {\n      \"post\": {\n        \"summary\": \"Create a book.\",\n        \"operationId\": \"ABitOfEverythingService_CreateBook\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbBook\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"parent\",\n            \"description\": \"The publisher in which to create the book.\\n\\nFormat: `publishers/{publisher}`\\n\\nExample: `publishers/1257894000000000000`\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"pattern\": \"publishers/[^/]+\"\n          },\n          {\n            \"name\": \"book\",\n            \"description\": \"The book to create.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbBook\"\n            }\n          },\n          {\n            \"name\": \"bookId\",\n            \"description\": \"The ID to use for the book.\\n\\nThis must start with an alphanumeric character.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v2/example/a_bit_of_everything/{uuidName}\": {\n      \"put\": {\n        \"operationId\": \"ABitOfEverythingService_UpdateV2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"abe\",\n            \"description\": \"A bit of everything\\n\\nIntentionally complicated message type to cover many features of Protobuf.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"object\",\n              \"example\": {\n                \"int64_value\": 12,\n                \"double_value\": 12.3\n              },\n              \"properties\": {\n                \"singleNested\": {\n                  \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                },\n                \"nested\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"object\",\n                    \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                  }\n                },\n                \"floatValue\": {\n                  \"type\": \"number\",\n                  \"format\": \"float\",\n                  \"default\": \"0.2\",\n                  \"description\": \"Float value field\"\n                },\n                \"doubleValue\": {\n                  \"type\": \"number\",\n                  \"format\": \"double\"\n                },\n                \"int64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"int64\"\n                },\n                \"uint64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"uint64\"\n                },\n                \"int32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int32\"\n                },\n                \"fixed64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"uint64\"\n                },\n                \"fixed32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int64\"\n                },\n                \"boolValue\": {\n                  \"type\": \"boolean\"\n                },\n                \"stringValue\": {\n                  \"type\": \"string\"\n                },\n                \"bytesValue\": {\n                  \"type\": \"string\",\n                  \"format\": \"byte\"\n                },\n                \"uint32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int64\"\n                },\n                \"enumValue\": {\n                  \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                },\n                \"pathEnumValue\": {\n                  \"$ref\": \"#/definitions/pathenumPathEnum\"\n                },\n                \"nestedPathEnumValue\": {\n                  \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n                },\n                \"sfixed32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int32\"\n                },\n                \"sfixed64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"int64\"\n                },\n                \"sint32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int32\"\n                },\n                \"sint64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"int64\"\n                },\n                \"repeatedStringValue\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"oneofEmpty\": {\n                  \"type\": \"object\",\n                  \"properties\": {}\n                },\n                \"oneofString\": {\n                  \"type\": \"string\"\n                },\n                \"mapValue\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                  },\n                  \"title\": \"map of numeric enum\"\n                },\n                \"mappedStringValue\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Map of string description.\",\n                  \"title\": \"Map of string title\"\n                },\n                \"mappedNestedValue\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                  }\n                },\n                \"nonConventionalNameValue\": {\n                  \"type\": \"string\"\n                },\n                \"timestampValue\": {\n                  \"type\": \"string\",\n                  \"format\": \"date-time\"\n                },\n                \"repeatedEnumValue\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                  },\n                  \"title\": \"repeated enum value. it is comma-separated in query\"\n                },\n                \"repeatedEnumAnnotation\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                  },\n                  \"description\": \"Repeated numeric enum description.\",\n                  \"title\": \"Repeated numeric enum title\"\n                },\n                \"enumValueAnnotation\": {\n                  \"$ref\": \"#/definitions/examplepbNumericEnum\",\n                  \"description\": \"Numeric enum description.\",\n                  \"title\": \"Numeric enum title\"\n                },\n                \"repeatedStringAnnotation\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Repeated string description.\",\n                  \"title\": \"Repeated string title\"\n                },\n                \"repeatedNestedAnnotation\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"object\",\n                    \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                  },\n                  \"description\": \"Repeated nested object description.\",\n                  \"title\": \"Repeated nested object title\"\n                },\n                \"nestedAnnotation\": {\n                  \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n                  \"description\": \"Nested object description.\",\n                  \"title\": \"Nested object title\"\n                },\n                \"int64OverrideType\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int64\"\n                },\n                \"requiredStringViaFieldBehaviorAnnotation\": {\n                  \"type\": \"string\",\n                  \"title\": \"mark a field as required in Open API definition\"\n                },\n                \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n                  \"type\": \"string\",\n                  \"title\": \"mark a field as readonly in Open API definition\",\n                  \"readOnly\": true\n                },\n                \"optionalStringValue\": {\n                  \"type\": \"string\"\n                },\n                \"productId\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 19,\n                    \"minLength\": 1,\n                    \"pattern\": \"^[0-9]+$\"\n                  },\n                  \"description\": \"Only digits are allowed.\",\n                  \"title\": \"Test openapiv2 generation of repeated fields\"\n                },\n                \"optionalStringField\": {\n                  \"type\": \"string\",\n                  \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n                },\n                \"requiredStringField1\": {\n                  \"type\": \"string\"\n                },\n                \"requiredStringField2\": {\n                  \"type\": \"string\"\n                },\n                \"required_field_behavior_json_name_custom\": {\n                  \"type\": \"string\",\n                  \"title\": \"Test openapiv2 handling of required json_name fields\"\n                },\n                \"required_field_schema_json_name_custom\": {\n                  \"type\": \"string\"\n                },\n                \"trailingOnly\": {\n                  \"type\": \"string\",\n                  \"title\": \"Trailing only\"\n                },\n                \"trailingOnlyDot\": {\n                  \"type\": \"string\",\n                  \"description\": \"Trailing only dot.\"\n                },\n                \"trailingBoth\": {\n                  \"type\": \"string\",\n                  \"description\": \"Trailing both.\",\n                  \"title\": \"Leading both\"\n                },\n                \"trailingMultiline\": {\n                  \"type\": \"string\",\n                  \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n                  \"title\": \"Leading multiline\"\n                },\n                \"uuids\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\",\n                    \"format\": \"uuid\"\n                  },\n                  \"title\": \"Specify a custom format of repeated field items\"\n                }\n              },\n              \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n              \"title\": \"A bit of everything\",\n              \"externalDocs\": {\n                \"description\": \"Find out more about ABitOfEverything\",\n                \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n              },\n              \"required\": [\n                \"int64Value\",\n                \"doubleValue\",\n                \"required_field_schema_json_name_custom\",\n                \"floatValue\",\n                \"requiredStringViaFieldBehaviorAnnotation\",\n                \"requiredStringField1\",\n                \"requiredStringField2\",\n                \"required_field_behavior_json_name_custom\"\n              ],\n              \"x-a-bit-of-everything-foo\": \"bar\"\n            }\n          },\n          {\n            \"name\": \"updateMask\",\n            \"description\": \"The paths to update.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      },\n      \"patch\": {\n        \"operationId\": \"ABitOfEverythingService_UpdateV22\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"abe\",\n            \"description\": \"A bit of everything\\n\\nIntentionally complicated message type to cover many features of Protobuf.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"object\",\n              \"example\": {\n                \"int64_value\": 12,\n                \"double_value\": 12.3\n              },\n              \"properties\": {\n                \"singleNested\": {\n                  \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                },\n                \"nested\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"object\",\n                    \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                  }\n                },\n                \"floatValue\": {\n                  \"type\": \"number\",\n                  \"format\": \"float\",\n                  \"default\": \"0.2\",\n                  \"description\": \"Float value field\"\n                },\n                \"doubleValue\": {\n                  \"type\": \"number\",\n                  \"format\": \"double\"\n                },\n                \"int64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"int64\"\n                },\n                \"uint64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"uint64\"\n                },\n                \"int32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int32\"\n                },\n                \"fixed64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"uint64\"\n                },\n                \"fixed32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int64\"\n                },\n                \"boolValue\": {\n                  \"type\": \"boolean\"\n                },\n                \"stringValue\": {\n                  \"type\": \"string\"\n                },\n                \"bytesValue\": {\n                  \"type\": \"string\",\n                  \"format\": \"byte\"\n                },\n                \"uint32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int64\"\n                },\n                \"enumValue\": {\n                  \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                },\n                \"pathEnumValue\": {\n                  \"$ref\": \"#/definitions/pathenumPathEnum\"\n                },\n                \"nestedPathEnumValue\": {\n                  \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n                },\n                \"sfixed32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int32\"\n                },\n                \"sfixed64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"int64\"\n                },\n                \"sint32Value\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int32\"\n                },\n                \"sint64Value\": {\n                  \"type\": \"string\",\n                  \"format\": \"int64\"\n                },\n                \"repeatedStringValue\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"oneofEmpty\": {\n                  \"type\": \"object\",\n                  \"properties\": {}\n                },\n                \"oneofString\": {\n                  \"type\": \"string\"\n                },\n                \"mapValue\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                  },\n                  \"title\": \"map of numeric enum\"\n                },\n                \"mappedStringValue\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Map of string description.\",\n                  \"title\": \"Map of string title\"\n                },\n                \"mappedNestedValue\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                  }\n                },\n                \"nonConventionalNameValue\": {\n                  \"type\": \"string\"\n                },\n                \"timestampValue\": {\n                  \"type\": \"string\",\n                  \"format\": \"date-time\"\n                },\n                \"repeatedEnumValue\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                  },\n                  \"title\": \"repeated enum value. it is comma-separated in query\"\n                },\n                \"repeatedEnumAnnotation\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/definitions/examplepbNumericEnum\"\n                  },\n                  \"description\": \"Repeated numeric enum description.\",\n                  \"title\": \"Repeated numeric enum title\"\n                },\n                \"enumValueAnnotation\": {\n                  \"$ref\": \"#/definitions/examplepbNumericEnum\",\n                  \"description\": \"Numeric enum description.\",\n                  \"title\": \"Numeric enum title\"\n                },\n                \"repeatedStringAnnotation\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Repeated string description.\",\n                  \"title\": \"Repeated string title\"\n                },\n                \"repeatedNestedAnnotation\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"object\",\n                    \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n                  },\n                  \"description\": \"Repeated nested object description.\",\n                  \"title\": \"Repeated nested object title\"\n                },\n                \"nestedAnnotation\": {\n                  \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n                  \"description\": \"Nested object description.\",\n                  \"title\": \"Nested object title\"\n                },\n                \"int64OverrideType\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int64\"\n                },\n                \"requiredStringViaFieldBehaviorAnnotation\": {\n                  \"type\": \"string\",\n                  \"title\": \"mark a field as required in Open API definition\"\n                },\n                \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n                  \"type\": \"string\",\n                  \"title\": \"mark a field as readonly in Open API definition\",\n                  \"readOnly\": true\n                },\n                \"optionalStringValue\": {\n                  \"type\": \"string\"\n                },\n                \"productId\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 19,\n                    \"minLength\": 1,\n                    \"pattern\": \"^[0-9]+$\"\n                  },\n                  \"description\": \"Only digits are allowed.\",\n                  \"title\": \"Test openapiv2 generation of repeated fields\"\n                },\n                \"optionalStringField\": {\n                  \"type\": \"string\",\n                  \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n                },\n                \"requiredStringField1\": {\n                  \"type\": \"string\"\n                },\n                \"requiredStringField2\": {\n                  \"type\": \"string\"\n                },\n                \"required_field_behavior_json_name_custom\": {\n                  \"type\": \"string\",\n                  \"title\": \"Test openapiv2 handling of required json_name fields\"\n                },\n                \"required_field_schema_json_name_custom\": {\n                  \"type\": \"string\"\n                },\n                \"trailingOnly\": {\n                  \"type\": \"string\",\n                  \"title\": \"Trailing only\"\n                },\n                \"trailingOnlyDot\": {\n                  \"type\": \"string\",\n                  \"description\": \"Trailing only dot.\"\n                },\n                \"trailingBoth\": {\n                  \"type\": \"string\",\n                  \"description\": \"Trailing both.\",\n                  \"title\": \"Leading both\"\n                },\n                \"trailingMultiline\": {\n                  \"type\": \"string\",\n                  \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n                  \"title\": \"Leading multiline\"\n                },\n                \"uuids\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\",\n                    \"format\": \"uuid\"\n                  },\n                  \"title\": \"Specify a custom format of repeated field items\"\n                }\n              },\n              \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n              \"title\": \"A bit of everything\",\n              \"externalDocs\": {\n                \"description\": \"Find out more about ABitOfEverything\",\n                \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n              },\n              \"required\": [\n                \"int64Value\",\n                \"doubleValue\",\n                \"required_field_schema_json_name_custom\",\n                \"floatValue\",\n                \"requiredStringViaFieldBehaviorAnnotation\",\n                \"requiredStringField1\",\n                \"requiredStringField2\",\n                \"required_field_behavior_json_name_custom\"\n              ],\n              \"x-a-bit-of-everything-foo\": \"bar\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v2/example/echo\": {\n      \"get\": {\n        \"summary\": \"Summary: Echo rpc\",\n        \"description\": \"Description Echo\",\n        \"operationId\": \"ABitOfEverythingService_Echo3\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/subStringMessage\"\n            },\n            \"examples\": {\n              \"application/json\": {\n                \"value\": \"the input value\"\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"integer\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"503\": {\n            \"description\": \"Returned when the resource is temporarily unavailable.\",\n            \"schema\": {},\n            \"x-number\": 100\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"value\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"echo rpc\"\n        ],\n        \"externalDocs\": {\n          \"description\": \"Find out more Echo\",\n          \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        }\n      },\n      \"post\": {\n        \"summary\": \"Summary: Echo rpc\",\n        \"description\": \"Description Echo\",\n        \"operationId\": \"ABitOfEverythingService_Echo2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/subStringMessage\"\n            },\n            \"examples\": {\n              \"application/json\": {\n                \"value\": \"the input value\"\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"integer\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"503\": {\n            \"description\": \"Returned when the resource is temporarily unavailable.\",\n            \"schema\": {},\n            \"x-number\": 100\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"value\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"echo rpc\"\n        ],\n        \"externalDocs\": {\n          \"description\": \"Find out more Echo\",\n          \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        }\n      }\n    },\n    \"/v2/example/empty\": {\n      \"get\": {\n        \"operationId\": \"camelCaseServiceName_Empty\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"camelCaseServiceName\"\n        ]\n      }\n    },\n    \"/v2/example/errorwithdetails\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_ErrorWithDetails\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v2/example/overwriterequestcontenttype\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_OverwriteRequestContentType\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbBody\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ],\n        \"consumes\": [\n          \"application/x-bar-mime\"\n        ]\n      }\n    },\n    \"/v2/example/overwriteresponsecontenttype\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_OverwriteResponseContentType\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"ABitOfEverything\"\n        ],\n        \"produces\": [\n          \"application/text\"\n        ]\n      }\n    },\n    \"/v2/example/postwithemptybody/{name}\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_PostWithEmptyBody\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ABitOfEverythingServicePostWithEmptyBodyBody\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v2/example/timeout\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_Timeout\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v2/example/withbody/{id}\": {\n      \"post\": {\n        \"operationId\": \"ABitOfEverythingService_GetMessageWithBody\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"data\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbBody\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v2/{value}:check\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_CheckExternalPathEnum\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"ABC\",\n              \"DEF\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v2a/example/a_bit_of_everything/{uuidName}\": {\n      \"patch\": {\n        \"operationId\": \"ABitOfEverythingService_UpdateV23\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uuidName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"uuid\",\n            \"x-internal\": true\n          },\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ABitOfEverythingServiceUpdateV2Body\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    },\n    \"/v3/{value}:check\": {\n      \"get\": {\n        \"operationId\": \"ABitOfEverythingService_CheckExternalNestedPathEnum\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"418\": {\n            \"description\": \"I'm a teapot.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            }\n          },\n          \"500\": {\n            \"description\": \"Server error\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbErrorResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"value\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"GHI\",\n              \"JKL\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"ABitOfEverything\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"ABitOfEverythingNested\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"ok\": \"TRUE\"\n      },\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"name is nested field.\"\n        },\n        \"amount\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"ok\": {\n          \"$ref\": \"#/definitions/NestedDeepEnum\",\n          \"description\": \"DeepEnum description.\"\n        }\n      },\n      \"description\": \"Nested is nested type.\"\n    },\n    \"ABitOfEverythingServiceDeepPathEchoBody\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"int64_value\": 12,\n        \"double_value\": 12.3\n      },\n      \"properties\": {\n        \"singleNested\": {\n          \"type\": \"object\",\n          \"example\": {\n            \"ok\": \"TRUE\"\n          },\n          \"properties\": {\n            \"amount\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            },\n            \"ok\": {\n              \"$ref\": \"#/definitions/NestedDeepEnum\",\n              \"description\": \"DeepEnum description.\"\n            }\n          },\n          \"description\": \"Nested is nested type.\"\n        },\n        \"uuid\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\",\n          \"minLength\": 1,\n          \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n          \"x-internal\": true\n        },\n        \"nested\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"floatValue\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"default\": \"0.2\",\n          \"description\": \"Float value field\"\n        },\n        \"doubleValue\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"int64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"uint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"int32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"fixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"fixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"boolValue\": {\n          \"type\": \"boolean\"\n        },\n        \"stringValue\": {\n          \"type\": \"string\"\n        },\n        \"bytesValue\": {\n          \"type\": \"string\",\n          \"format\": \"byte\"\n        },\n        \"uint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"enumValue\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\"\n        },\n        \"pathEnumValue\": {\n          \"$ref\": \"#/definitions/pathenumPathEnum\"\n        },\n        \"nestedPathEnumValue\": {\n          \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n        },\n        \"sfixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sfixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"sint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"repeatedStringValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"oneofEmpty\": {\n          \"type\": \"object\",\n          \"properties\": {}\n        },\n        \"oneofString\": {\n          \"type\": \"string\"\n        },\n        \"mapValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"map of numeric enum\"\n        },\n        \"mappedStringValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Map of string description.\",\n          \"title\": \"Map of string title\"\n        },\n        \"mappedNestedValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"nonConventionalNameValue\": {\n          \"type\": \"string\"\n        },\n        \"timestampValue\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"repeatedEnumValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"repeated enum value. it is comma-separated in query\"\n        },\n        \"repeatedEnumAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"description\": \"Repeated numeric enum description.\",\n          \"title\": \"Repeated numeric enum title\"\n        },\n        \"enumValueAnnotation\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\",\n          \"description\": \"Numeric enum description.\",\n          \"title\": \"Numeric enum title\"\n        },\n        \"repeatedStringAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Repeated string description.\",\n          \"title\": \"Repeated string title\"\n        },\n        \"repeatedNestedAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          },\n          \"description\": \"Repeated nested object description.\",\n          \"title\": \"Repeated nested object title\"\n        },\n        \"nestedAnnotation\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n          \"description\": \"Nested object description.\",\n          \"title\": \"Nested object title\"\n        },\n        \"int64OverrideType\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"requiredStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as required in Open API definition\"\n        },\n        \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as readonly in Open API definition\",\n          \"readOnly\": true\n        },\n        \"optionalStringValue\": {\n          \"type\": \"string\"\n        },\n        \"productId\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"maxLength\": 19,\n            \"minLength\": 1,\n            \"pattern\": \"^[0-9]+$\"\n          },\n          \"description\": \"Only digits are allowed.\",\n          \"title\": \"Test openapiv2 generation of repeated fields\"\n        },\n        \"optionalStringField\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n        },\n        \"requiredStringField1\": {\n          \"type\": \"string\"\n        },\n        \"requiredStringField2\": {\n          \"type\": \"string\"\n        },\n        \"required_field_behavior_json_name_custom\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 handling of required json_name fields\"\n        },\n        \"required_field_schema_json_name_custom\": {\n          \"type\": \"string\"\n        },\n        \"trailingOnly\": {\n          \"type\": \"string\",\n          \"title\": \"Trailing only\"\n        },\n        \"trailingOnlyDot\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing only dot.\"\n        },\n        \"trailingBoth\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing both.\",\n          \"title\": \"Leading both\"\n        },\n        \"trailingMultiline\": {\n          \"type\": \"string\",\n          \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n          \"title\": \"Leading multiline\"\n        },\n        \"uuids\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"title\": \"Specify a custom format of repeated field items\"\n        }\n      },\n      \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n      \"title\": \"A bit of everything\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"required\": [\n        \"uuid\",\n        \"int64Value\",\n        \"doubleValue\",\n        \"required_field_schema_json_name_custom\",\n        \"floatValue\",\n        \"requiredStringViaFieldBehaviorAnnotation\",\n        \"requiredStringField1\",\n        \"requiredStringField2\",\n        \"required_field_behavior_json_name_custom\"\n      ],\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"ABitOfEverythingServicePostWithEmptyBodyBody\": {\n      \"type\": \"object\"\n    },\n    \"ABitOfEverythingServiceUpdateV2Body\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"abe\": {\n          \"type\": \"object\",\n          \"example\": {\n            \"int64_value\": 12,\n            \"double_value\": 12.3\n          },\n          \"properties\": {\n            \"singleNested\": {\n              \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n            },\n            \"nested\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"object\",\n                \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n              }\n            },\n            \"floatValue\": {\n              \"type\": \"number\",\n              \"format\": \"float\",\n              \"default\": \"0.2\",\n              \"description\": \"Float value field\"\n            },\n            \"doubleValue\": {\n              \"type\": \"number\",\n              \"format\": \"double\"\n            },\n            \"int64Value\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            },\n            \"uint64Value\": {\n              \"type\": \"string\",\n              \"format\": \"uint64\"\n            },\n            \"int32Value\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            },\n            \"fixed64Value\": {\n              \"type\": \"string\",\n              \"format\": \"uint64\"\n            },\n            \"fixed32Value\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            },\n            \"boolValue\": {\n              \"type\": \"boolean\"\n            },\n            \"stringValue\": {\n              \"type\": \"string\"\n            },\n            \"bytesValue\": {\n              \"type\": \"string\",\n              \"format\": \"byte\"\n            },\n            \"uint32Value\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            },\n            \"enumValue\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\"\n            },\n            \"pathEnumValue\": {\n              \"$ref\": \"#/definitions/pathenumPathEnum\"\n            },\n            \"nestedPathEnumValue\": {\n              \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n            },\n            \"sfixed32Value\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            },\n            \"sfixed64Value\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            },\n            \"sint32Value\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            },\n            \"sint64Value\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            },\n            \"repeatedStringValue\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\"\n              }\n            },\n            \"oneofEmpty\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            },\n            \"oneofString\": {\n              \"type\": \"string\"\n            },\n            \"mapValue\": {\n              \"type\": \"object\",\n              \"additionalProperties\": {\n                \"$ref\": \"#/definitions/examplepbNumericEnum\"\n              },\n              \"title\": \"map of numeric enum\"\n            },\n            \"mappedStringValue\": {\n              \"type\": \"object\",\n              \"additionalProperties\": {\n                \"type\": \"string\"\n              },\n              \"description\": \"Map of string description.\",\n              \"title\": \"Map of string title\"\n            },\n            \"mappedNestedValue\": {\n              \"type\": \"object\",\n              \"additionalProperties\": {\n                \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n              }\n            },\n            \"nonConventionalNameValue\": {\n              \"type\": \"string\"\n            },\n            \"timestampValue\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\"\n            },\n            \"repeatedEnumValue\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/examplepbNumericEnum\"\n              },\n              \"title\": \"repeated enum value. it is comma-separated in query\"\n            },\n            \"repeatedEnumAnnotation\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/examplepbNumericEnum\"\n              },\n              \"description\": \"Repeated numeric enum description.\",\n              \"title\": \"Repeated numeric enum title\"\n            },\n            \"enumValueAnnotation\": {\n              \"$ref\": \"#/definitions/examplepbNumericEnum\",\n              \"description\": \"Numeric enum description.\",\n              \"title\": \"Numeric enum title\"\n            },\n            \"repeatedStringAnnotation\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\"\n              },\n              \"description\": \"Repeated string description.\",\n              \"title\": \"Repeated string title\"\n            },\n            \"repeatedNestedAnnotation\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"object\",\n                \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n              },\n              \"description\": \"Repeated nested object description.\",\n              \"title\": \"Repeated nested object title\"\n            },\n            \"nestedAnnotation\": {\n              \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n              \"description\": \"Nested object description.\",\n              \"title\": \"Nested object title\"\n            },\n            \"int64OverrideType\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            },\n            \"requiredStringViaFieldBehaviorAnnotation\": {\n              \"type\": \"string\",\n              \"title\": \"mark a field as required in Open API definition\"\n            },\n            \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n              \"type\": \"string\",\n              \"title\": \"mark a field as readonly in Open API definition\",\n              \"readOnly\": true\n            },\n            \"optionalStringValue\": {\n              \"type\": \"string\"\n            },\n            \"productId\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\",\n                \"maxLength\": 19,\n                \"minLength\": 1,\n                \"pattern\": \"^[0-9]+$\"\n              },\n              \"description\": \"Only digits are allowed.\",\n              \"title\": \"Test openapiv2 generation of repeated fields\"\n            },\n            \"optionalStringField\": {\n              \"type\": \"string\",\n              \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n            },\n            \"requiredStringField1\": {\n              \"type\": \"string\"\n            },\n            \"requiredStringField2\": {\n              \"type\": \"string\"\n            },\n            \"required_field_behavior_json_name_custom\": {\n              \"type\": \"string\",\n              \"title\": \"Test openapiv2 handling of required json_name fields\"\n            },\n            \"required_field_schema_json_name_custom\": {\n              \"type\": \"string\"\n            },\n            \"trailingOnly\": {\n              \"type\": \"string\",\n              \"title\": \"Trailing only\"\n            },\n            \"trailingOnlyDot\": {\n              \"type\": \"string\",\n              \"description\": \"Trailing only dot.\"\n            },\n            \"trailingBoth\": {\n              \"type\": \"string\",\n              \"description\": \"Trailing both.\",\n              \"title\": \"Leading both\"\n            },\n            \"trailingMultiline\": {\n              \"type\": \"string\",\n              \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n              \"title\": \"Leading multiline\"\n            },\n            \"uuids\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"title\": \"Specify a custom format of repeated field items\"\n            }\n          },\n          \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n          \"title\": \"A bit of everything\",\n          \"externalDocs\": {\n            \"description\": \"Find out more about ABitOfEverything\",\n            \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n          },\n          \"required\": [\n            \"int64Value\",\n            \"doubleValue\",\n            \"required_field_schema_json_name_custom\",\n            \"floatValue\",\n            \"requiredStringViaFieldBehaviorAnnotation\",\n            \"requiredStringField1\",\n            \"requiredStringField2\",\n            \"required_field_behavior_json_name_custom\"\n          ],\n          \"x-a-bit-of-everything-foo\": \"bar\"\n        },\n        \"updateMask\": {\n          \"type\": \"string\",\n          \"description\": \"The paths to update.\"\n        }\n      },\n      \"title\": \"UpdateV2Request request for update includes the message and the update mask\"\n    },\n    \"MessagePathEnumNestedPathEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"GHI\",\n        \"JKL\"\n      ],\n      \"default\": \"GHI\"\n    },\n    \"NestedDeepEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"FALSE\",\n        \"TRUE\"\n      ],\n      \"default\": \"FALSE\",\n      \"description\": \"DeepEnum is one or zero.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\"\n    },\n    \"examplepbABitOfEverything\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"int64_value\": 12,\n        \"double_value\": 12.3\n      },\n      \"properties\": {\n        \"singleNested\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n        },\n        \"uuid\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\",\n          \"minLength\": 1,\n          \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n          \"x-internal\": true\n        },\n        \"nested\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"floatValue\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"default\": \"0.2\",\n          \"description\": \"Float value field\"\n        },\n        \"doubleValue\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"int64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"uint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"int32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"fixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"fixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"boolValue\": {\n          \"type\": \"boolean\"\n        },\n        \"stringValue\": {\n          \"type\": \"string\"\n        },\n        \"bytesValue\": {\n          \"type\": \"string\",\n          \"format\": \"byte\"\n        },\n        \"uint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"enumValue\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\"\n        },\n        \"pathEnumValue\": {\n          \"$ref\": \"#/definitions/pathenumPathEnum\"\n        },\n        \"nestedPathEnumValue\": {\n          \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n        },\n        \"sfixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sfixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"sint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"repeatedStringValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"oneofEmpty\": {\n          \"type\": \"object\",\n          \"properties\": {}\n        },\n        \"oneofString\": {\n          \"type\": \"string\"\n        },\n        \"mapValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"map of numeric enum\"\n        },\n        \"mappedStringValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Map of string description.\",\n          \"title\": \"Map of string title\"\n        },\n        \"mappedNestedValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"nonConventionalNameValue\": {\n          \"type\": \"string\"\n        },\n        \"timestampValue\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"repeatedEnumValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"repeated enum value. it is comma-separated in query\"\n        },\n        \"repeatedEnumAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"description\": \"Repeated numeric enum description.\",\n          \"title\": \"Repeated numeric enum title\"\n        },\n        \"enumValueAnnotation\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\",\n          \"description\": \"Numeric enum description.\",\n          \"title\": \"Numeric enum title\"\n        },\n        \"repeatedStringAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Repeated string description.\",\n          \"title\": \"Repeated string title\"\n        },\n        \"repeatedNestedAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          },\n          \"description\": \"Repeated nested object description.\",\n          \"title\": \"Repeated nested object title\"\n        },\n        \"nestedAnnotation\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n          \"description\": \"Nested object description.\",\n          \"title\": \"Nested object title\"\n        },\n        \"int64OverrideType\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"requiredStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as required in Open API definition\"\n        },\n        \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as readonly in Open API definition\",\n          \"readOnly\": true\n        },\n        \"optionalStringValue\": {\n          \"type\": \"string\"\n        },\n        \"productId\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"maxLength\": 19,\n            \"minLength\": 1,\n            \"pattern\": \"^[0-9]+$\"\n          },\n          \"description\": \"Only digits are allowed.\",\n          \"title\": \"Test openapiv2 generation of repeated fields\"\n        },\n        \"optionalStringField\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n        },\n        \"requiredStringField1\": {\n          \"type\": \"string\"\n        },\n        \"requiredStringField2\": {\n          \"type\": \"string\"\n        },\n        \"required_field_behavior_json_name_custom\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 handling of required json_name fields\"\n        },\n        \"required_field_schema_json_name_custom\": {\n          \"type\": \"string\"\n        },\n        \"trailingOnly\": {\n          \"type\": \"string\",\n          \"title\": \"Trailing only\"\n        },\n        \"trailingOnlyDot\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing only dot.\"\n        },\n        \"trailingBoth\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing both.\",\n          \"title\": \"Leading both\"\n        },\n        \"trailingMultiline\": {\n          \"type\": \"string\",\n          \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n          \"title\": \"Leading multiline\"\n        },\n        \"uuids\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"title\": \"Specify a custom format of repeated field items\"\n        }\n      },\n      \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n      \"title\": \"A bit of everything\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"required\": [\n        \"uuid\",\n        \"int64Value\",\n        \"doubleValue\",\n        \"required_field_schema_json_name_custom\",\n        \"floatValue\",\n        \"requiredStringViaFieldBehaviorAnnotation\",\n        \"requiredStringField1\",\n        \"requiredStringField2\",\n        \"required_field_behavior_json_name_custom\"\n      ],\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"examplepbABitOfEverythingRepeated\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"path_repeated_bool_value\": [\n          true,\n          true,\n          false,\n          true\n        ],\n        \"path_repeated_int32_value\": [\n          1,\n          2,\n          3\n        ]\n      },\n      \"properties\": {\n        \"pathRepeatedFloatValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"number\",\n            \"format\": \"float\"\n          },\n          \"title\": \"repeated values. they are comma-separated in path\"\n        },\n        \"pathRepeatedDoubleValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"number\",\n            \"format\": \"double\"\n          }\n        },\n        \"pathRepeatedInt64Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          }\n        },\n        \"pathRepeatedUint64Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        },\n        \"pathRepeatedInt32Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          }\n        },\n        \"pathRepeatedFixed64Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uint64\"\n          }\n        },\n        \"pathRepeatedFixed32Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          }\n        },\n        \"pathRepeatedBoolValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"boolean\"\n          }\n        },\n        \"pathRepeatedStringValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"pathRepeatedBytesValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"byte\"\n          }\n        },\n        \"pathRepeatedUint32Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"format\": \"int64\"\n          }\n        },\n        \"pathRepeatedEnumValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          }\n        },\n        \"pathRepeatedSfixed32Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          }\n        },\n        \"pathRepeatedSfixed64Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          }\n        },\n        \"pathRepeatedSint32Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          }\n        },\n        \"pathRepeatedSint64Value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          }\n        }\n      },\n      \"title\": \"ABitOfEverythingRepeated is used to validate repeated path parameter functionality\"\n    },\n    \"examplepbABitOfEverythingServiceUpdateBody\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"int64_value\": 12,\n        \"double_value\": 12.3\n      },\n      \"properties\": {\n        \"singleNested\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n        },\n        \"nested\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"floatValue\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"default\": \"0.2\",\n          \"description\": \"Float value field\"\n        },\n        \"doubleValue\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"int64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"uint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"int32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"fixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"fixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"boolValue\": {\n          \"type\": \"boolean\"\n        },\n        \"stringValue\": {\n          \"type\": \"string\"\n        },\n        \"bytesValue\": {\n          \"type\": \"string\",\n          \"format\": \"byte\"\n        },\n        \"uint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"enumValue\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\"\n        },\n        \"pathEnumValue\": {\n          \"$ref\": \"#/definitions/pathenumPathEnum\"\n        },\n        \"nestedPathEnumValue\": {\n          \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n        },\n        \"sfixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sfixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"sint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"repeatedStringValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"oneofEmpty\": {\n          \"type\": \"object\",\n          \"properties\": {}\n        },\n        \"oneofString\": {\n          \"type\": \"string\"\n        },\n        \"mapValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"map of numeric enum\"\n        },\n        \"mappedStringValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Map of string description.\",\n          \"title\": \"Map of string title\"\n        },\n        \"mappedNestedValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"nonConventionalNameValue\": {\n          \"type\": \"string\"\n        },\n        \"timestampValue\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"repeatedEnumValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"repeated enum value. it is comma-separated in query\"\n        },\n        \"repeatedEnumAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"description\": \"Repeated numeric enum description.\",\n          \"title\": \"Repeated numeric enum title\"\n        },\n        \"enumValueAnnotation\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\",\n          \"description\": \"Numeric enum description.\",\n          \"title\": \"Numeric enum title\"\n        },\n        \"repeatedStringAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Repeated string description.\",\n          \"title\": \"Repeated string title\"\n        },\n        \"repeatedNestedAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          },\n          \"description\": \"Repeated nested object description.\",\n          \"title\": \"Repeated nested object title\"\n        },\n        \"nestedAnnotation\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n          \"description\": \"Nested object description.\",\n          \"title\": \"Nested object title\"\n        },\n        \"int64OverrideType\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"requiredStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as required in Open API definition\"\n        },\n        \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as readonly in Open API definition\",\n          \"readOnly\": true\n        },\n        \"optionalStringValue\": {\n          \"type\": \"string\"\n        },\n        \"productId\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"maxLength\": 19,\n            \"minLength\": 1,\n            \"pattern\": \"^[0-9]+$\"\n          },\n          \"description\": \"Only digits are allowed.\",\n          \"title\": \"Test openapiv2 generation of repeated fields\"\n        },\n        \"optionalStringField\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n        },\n        \"requiredStringField1\": {\n          \"type\": \"string\"\n        },\n        \"requiredStringField2\": {\n          \"type\": \"string\"\n        },\n        \"required_field_behavior_json_name_custom\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 handling of required json_name fields\"\n        },\n        \"required_field_schema_json_name_custom\": {\n          \"type\": \"string\"\n        },\n        \"trailingOnly\": {\n          \"type\": \"string\",\n          \"title\": \"Trailing only\"\n        },\n        \"trailingOnlyDot\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing only dot.\"\n        },\n        \"trailingBoth\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing both.\",\n          \"title\": \"Leading both\"\n        },\n        \"trailingMultiline\": {\n          \"type\": \"string\",\n          \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n          \"title\": \"Leading multiline\"\n        },\n        \"uuids\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"title\": \"Specify a custom format of repeated field items\"\n        }\n      },\n      \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n      \"title\": \"A bit of everything\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"required\": [\n        \"int64Value\",\n        \"doubleValue\",\n        \"required_field_schema_json_name_custom\",\n        \"floatValue\",\n        \"requiredStringViaFieldBehaviorAnnotation\",\n        \"requiredStringField1\",\n        \"requiredStringField2\",\n        \"required_field_behavior_json_name_custom\"\n      ],\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"examplepbBar\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"id\"\n      ]\n    },\n    \"examplepbBody\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"examplepbBook\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The resource name of the book.\\n\\nFormat: `publishers/{publisher}/books/{book}`\\n\\nExample: `publishers/1257894000000000000/books/my-book`\"\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Output only. The book's ID.\",\n          \"readOnly\": true\n        },\n        \"createTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Output only. Creation time of the book.\",\n          \"readOnly\": true\n        }\n      },\n      \"description\": \"An example resource type from AIP-123 used to test the behavior described in\\nthe CreateBookRequest message.\\n\\nSee: https://google.aip.dev/123\"\n    },\n    \"examplepbCheckStatusResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"status\": {\n          \"$ref\": \"#/definitions/googleRpcStatus\"\n        }\n      }\n    },\n    \"examplepbErrorObject\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"integer\",\n          \"description\": \"Response code\",\n          \"title\": \"code\",\n          \"pattern\": \"^[0-9]$\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"Response message\",\n          \"title\": \"message\",\n          \"pattern\": \"^[a-zA-Z0-9]{1, 32}$\"\n        }\n      }\n    },\n    \"examplepbErrorResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"correlationId\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\",\n          \"example\": \"2438ac3c-37eb-4902-adef-ed16b4431030\",\n          \"description\": \"Unique event identifier for server requests\",\n          \"title\": \"x-correlation-id\",\n          \"pattern\": \"^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$\"\n        },\n        \"error\": {\n          \"$ref\": \"#/definitions/examplepbErrorObject\"\n        }\n      }\n    },\n    \"examplepbNumericEnum\": {\n      \"type\": \"string\",\n      \"example\": \"ZERO\",\n      \"enum\": [\n        \"ZERO\",\n        \"ONE\"\n      ],\n      \"default\": \"ZERO\",\n      \"description\": \"NumericEnum is one or zero.\",\n      \"title\": \"NumericEnum\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"examplepbRequiredMessageTypeRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        },\n        \"foo\": {\n          \"$ref\": \"#/definitions/protoExamplepbFoo\"\n        }\n      },\n      \"title\": \"Required message type -\\u003e OpenAPI\\nhttps://github.com/grpc-ecosystem/grpc-gateway/issues/2837\",\n      \"required\": [\n        \"id\",\n        \"foo\"\n      ]\n    },\n    \"examplepbSnakeEnumResponse\": {\n      \"type\": \"object\"\n    },\n    \"examplepbSnake_case_0_enum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"value_e\",\n        \"value_f\"\n      ],\n      \"default\": \"value_e\",\n      \"description\": \"- value_e: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\\n - value_f: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\",\n      \"title\": \"Ignoring lint warnings as this enum type exist to validate proper functionality\\nfor projects that don't follow these lint rules.\\nbuf:lint:ignore ENUM_PASCAL_CASE\"\n    },\n    \"examplepbSnake_case_enum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"value_c\",\n        \"value_d\"\n      ],\n      \"default\": \"value_c\",\n      \"description\": \"- value_c: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\\n - value_d: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\",\n      \"title\": \"Ignoring lint warnings as this enum type exist to validate proper functionality\\nfor projects that don't follow these lint rules.\\nbuf:lint:ignore ENUM_PASCAL_CASE\"\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"oneofenumExampleEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"EXAMPLE_ENUM_UNSPECIFIED\",\n        \"EXAMPLE_ENUM_FIRST\"\n      ],\n      \"default\": \"EXAMPLE_ENUM_UNSPECIFIED\"\n    },\n    \"pathenumPathEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"ABC\",\n        \"DEF\"\n      ],\n      \"default\": \"ABC\"\n    },\n    \"pathenumSnake_case_for_import\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"value_x\",\n        \"value_y\"\n      ],\n      \"default\": \"value_x\",\n      \"description\": \"- value_x: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\\n - value_y: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\",\n      \"title\": \"Ignoring lint warnings as this enum type exist to validate proper functionality\\nfor projects that don't follow these lint rules.\\nbuf:lint:ignore ENUM_PASCAL_CASE\"\n    },\n    \"protoExamplepbFoo\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"bar\": {\n          \"$ref\": \"#/definitions/examplepbBar\"\n        }\n      },\n      \"required\": [\n        \"bar\"\n      ]\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"subStringMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  },\n  \"securityDefinitions\": {\n    \"ApiKeyAuth\": {\n      \"type\": \"apiKey\",\n      \"name\": \"X-API-Key\",\n      \"in\": \"header\",\n      \"x-amazon-apigateway-authorizer\": {\n        \"authorizerResultTtlInSeconds\": 60,\n        \"type\": \"token\"\n      },\n      \"x-amazon-apigateway-authtype\": \"oauth2\"\n    },\n    \"BasicAuth\": {\n      \"type\": \"basic\"\n    },\n    \"OAuth2\": {\n      \"type\": \"oauth2\",\n      \"flow\": \"accessCode\",\n      \"authorizationUrl\": \"https://example.com/oauth/authorize\",\n      \"tokenUrl\": \"https://example.com/oauth/token\",\n      \"scopes\": {\n        \"admin\": \"Grants read and write access to administrative information\",\n        \"read\": \"Grants read access\",\n        \"write\": \"Grants write access\"\n      }\n    }\n  },\n  \"security\": [\n    {\n      \"ApiKeyAuth\": [],\n      \"BasicAuth\": []\n    },\n    {\n      \"ApiKeyAuth\": [],\n      \"OAuth2\": [\n        \"read\",\n        \"write\"\n      ]\n    }\n  ],\n  \"externalDocs\": {\n    \"description\": \"More about gRPC-Gateway\",\n    \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n  },\n  \"x-grpc-gateway-baz-list\": [\n    \"one\",\n    true\n  ],\n  \"x-grpc-gateway-foo\": \"bar\"\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/a_bit_of_everything.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\toneofenum \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum\"\n\tpathenum \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\"\n\tsub \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\tsub2 \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n\twrapperspb \"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tABitOfEverythingService_Create_FullMethodName                        = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create\"\n\tABitOfEverythingService_CreateBody_FullMethodName                    = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody\"\n\tABitOfEverythingService_CreateBook_FullMethodName                    = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook\"\n\tABitOfEverythingService_UpdateBook_FullMethodName                    = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook\"\n\tABitOfEverythingService_Lookup_FullMethodName                        = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup\"\n\tABitOfEverythingService_Custom_FullMethodName                        = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom\"\n\tABitOfEverythingService_DoubleColon_FullMethodName                   = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DoubleColon\"\n\tABitOfEverythingService_Update_FullMethodName                        = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update\"\n\tABitOfEverythingService_UpdateV2_FullMethodName                      = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2\"\n\tABitOfEverythingService_Delete_FullMethodName                        = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete\"\n\tABitOfEverythingService_GetQuery_FullMethodName                      = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery\"\n\tABitOfEverythingService_GetRepeatedQuery_FullMethodName              = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery\"\n\tABitOfEverythingService_Echo_FullMethodName                          = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo\"\n\tABitOfEverythingService_DeepPathEcho_FullMethodName                  = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho\"\n\tABitOfEverythingService_NoBindings_FullMethodName                    = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/NoBindings\"\n\tABitOfEverythingService_Timeout_FullMethodName                       = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout\"\n\tABitOfEverythingService_ErrorWithDetails_FullMethodName              = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails\"\n\tABitOfEverythingService_GetMessageWithBody_FullMethodName            = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody\"\n\tABitOfEverythingService_PostWithEmptyBody_FullMethodName             = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody\"\n\tABitOfEverythingService_CheckGetQueryParams_FullMethodName           = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams\"\n\tABitOfEverythingService_CheckNestedEnumGetQueryParams_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams\"\n\tABitOfEverythingService_CheckPostQueryParams_FullMethodName          = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams\"\n\tABitOfEverythingService_OverwriteRequestContentType_FullMethodName   = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteRequestContentType\"\n\tABitOfEverythingService_OverwriteResponseContentType_FullMethodName  = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType\"\n\tABitOfEverythingService_CheckExternalPathEnum_FullMethodName         = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum\"\n\tABitOfEverythingService_CheckExternalNestedPathEnum_FullMethodName   = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum\"\n\tABitOfEverythingService_CheckStatus_FullMethodName                   = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus\"\n\tABitOfEverythingService_Exists_FullMethodName                        = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists\"\n\tABitOfEverythingService_CustomOptionsRequest_FullMethodName          = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest\"\n\tABitOfEverythingService_TraceRequest_FullMethodName                  = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest\"\n\tABitOfEverythingService_PostOneofEnum_FullMethodName                 = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostOneofEnum\"\n\tABitOfEverythingService_PostRequiredMessageType_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostRequiredMessageType\"\n)\n\n// ABitOfEverythingServiceClient is the client API for ABitOfEverythingService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// ABitOfEverything service is used to validate that APIs with complicated\n// proto messages and URL templates are still processed correctly.\ntype ABitOfEverythingServiceClient interface {\n\t// Create a new ABitOfEverything\n\t//\n\t// This API creates a new ABitOfEverything\n\tCreate(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tCreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\t// Create a book.\n\tCreateBook(ctx context.Context, in *CreateBookRequest, opts ...grpc.CallOption) (*Book, error)\n\tUpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error)\n\tLookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tCustom(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tDoubleColon(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tUpdate(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tUpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tDelete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tGetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tGetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error)\n\t// Echo allows posting a StringMessage value.\n\t//\n\t// It also exposes multiple bindings.\n\t//\n\t// This makes it useful when validating that the OpenAPI v2 API\n\t// description exposes documentation correctly on all paths\n\t// defined as additional_bindings in the proto.\n\tEcho(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error)\n\tDeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tNoBindings(ctx context.Context, in *durationpb.Duration, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tTimeout(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tErrorWithDetails(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tGetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tPostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tCheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tCheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tCheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tOverwriteRequestContentType(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tOverwriteResponseContentType(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error)\n\tCheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tCheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tCheckStatus(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*CheckStatusResponse, error)\n\tExists(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tCustomOptionsRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tTraceRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error)\n\tPostOneofEnum(ctx context.Context, in *oneofenum.OneofEnumMessage, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tPostRequiredMessageType(ctx context.Context, in *RequiredMessageTypeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)\n}\n\ntype aBitOfEverythingServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewABitOfEverythingServiceClient(cc grpc.ClientConnInterface) ABitOfEverythingServiceClient {\n\treturn &aBitOfEverythingServiceClient{cc}\n}\n\nfunc (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Create_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CreateBody_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CreateBook(ctx context.Context, in *CreateBookRequest, opts ...grpc.CallOption) (*Book, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(Book)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CreateBook_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(Book)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_UpdateBook_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Lookup_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) Custom(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Custom_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) DoubleColon(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_DoubleColon_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Update_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_UpdateV2_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Delete_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_GetQuery_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverythingRepeated)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_GetRepeatedQuery_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(sub.StringMessage)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Echo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_DeepPathEcho_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *durationpb.Duration, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_NoBindings_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Timeout_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_ErrorWithDetails_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_GetMessageWithBody_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_PostWithEmptyBody_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CheckGetQueryParams_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CheckNestedEnumGetQueryParams_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CheckPostQueryParams_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) OverwriteRequestContentType(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_OverwriteRequestContentType_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.StringValue)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_OverwriteResponseContentType_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CheckExternalPathEnum_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CheckExternalNestedPathEnum_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CheckStatus(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*CheckStatusResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(CheckStatusResponse)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CheckStatus_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) Exists(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_Exists_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) CustomOptionsRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_CustomOptionsRequest_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) TraceRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ABitOfEverything)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_TraceRequest_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) PostOneofEnum(ctx context.Context, in *oneofenum.OneofEnumMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_PostOneofEnum_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *aBitOfEverythingServiceClient) PostRequiredMessageType(ctx context.Context, in *RequiredMessageTypeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ABitOfEverythingService_PostRequiredMessageType_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service.\n// All implementations should embed UnimplementedABitOfEverythingServiceServer\n// for forward compatibility.\n//\n// ABitOfEverything service is used to validate that APIs with complicated\n// proto messages and URL templates are still processed correctly.\ntype ABitOfEverythingServiceServer interface {\n\t// Create a new ABitOfEverything\n\t//\n\t// This API creates a new ABitOfEverything\n\tCreate(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tCreateBody(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\t// Create a book.\n\tCreateBook(context.Context, *CreateBookRequest) (*Book, error)\n\tUpdateBook(context.Context, *UpdateBookRequest) (*Book, error)\n\tLookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error)\n\tCustom(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tDoubleColon(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tUpdate(context.Context, *ABitOfEverything) (*emptypb.Empty, error)\n\tUpdateV2(context.Context, *UpdateV2Request) (*emptypb.Empty, error)\n\tDelete(context.Context, *sub2.IdMessage) (*emptypb.Empty, error)\n\tGetQuery(context.Context, *ABitOfEverything) (*emptypb.Empty, error)\n\tGetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error)\n\t// Echo allows posting a StringMessage value.\n\t//\n\t// It also exposes multiple bindings.\n\t//\n\t// This makes it useful when validating that the OpenAPI v2 API\n\t// description exposes documentation correctly on all paths\n\t// defined as additional_bindings in the proto.\n\tEcho(context.Context, *sub.StringMessage) (*sub.StringMessage, error)\n\tDeepPathEcho(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tNoBindings(context.Context, *durationpb.Duration) (*emptypb.Empty, error)\n\tTimeout(context.Context, *emptypb.Empty) (*emptypb.Empty, error)\n\tErrorWithDetails(context.Context, *emptypb.Empty) (*emptypb.Empty, error)\n\tGetMessageWithBody(context.Context, *MessageWithBody) (*emptypb.Empty, error)\n\tPostWithEmptyBody(context.Context, *Body) (*emptypb.Empty, error)\n\tCheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tCheckNestedEnumGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tCheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tOverwriteRequestContentType(context.Context, *Body) (*emptypb.Empty, error)\n\tOverwriteResponseContentType(context.Context, *emptypb.Empty) (*wrapperspb.StringValue, error)\n\tCheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*emptypb.Empty, error)\n\tCheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*emptypb.Empty, error)\n\tCheckStatus(context.Context, *emptypb.Empty) (*CheckStatusResponse, error)\n\tExists(context.Context, *ABitOfEverything) (*emptypb.Empty, error)\n\tCustomOptionsRequest(context.Context, *ABitOfEverything) (*emptypb.Empty, error)\n\tTraceRequest(context.Context, *ABitOfEverything) (*ABitOfEverything, error)\n\tPostOneofEnum(context.Context, *oneofenum.OneofEnumMessage) (*emptypb.Empty, error)\n\tPostRequiredMessageType(context.Context, *RequiredMessageTypeRequest) (*emptypb.Empty, error)\n}\n\n// UnimplementedABitOfEverythingServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedABitOfEverythingServiceServer struct{}\n\nfunc (UnimplementedABitOfEverythingServiceServer) Create(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Create not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CreateBody(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateBody not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CreateBook(context.Context, *CreateBookRequest) (*Book, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateBook not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) UpdateBook(context.Context, *UpdateBookRequest) (*Book, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateBook not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Lookup not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) Custom(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Custom not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) DoubleColon(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DoubleColon not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) Update(context.Context, *ABitOfEverything) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Update not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) UpdateV2(context.Context, *UpdateV2Request) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateV2 not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) Delete(context.Context, *sub2.IdMessage) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Delete not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) GetQuery(context.Context, *ABitOfEverything) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GetQuery not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) GetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GetRepeatedQuery not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) Echo(context.Context, *sub.StringMessage) (*sub.StringMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Echo not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) DeepPathEcho(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DeepPathEcho not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) NoBindings(context.Context, *durationpb.Duration) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method NoBindings not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) Timeout(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Timeout not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) ErrorWithDetails(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ErrorWithDetails not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) GetMessageWithBody(context.Context, *MessageWithBody) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GetMessageWithBody not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) PostWithEmptyBody(context.Context, *Body) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PostWithEmptyBody not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CheckGetQueryParams not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CheckNestedEnumGetQueryParams not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CheckPostQueryParams not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) OverwriteRequestContentType(context.Context, *Body) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OverwriteRequestContentType not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) OverwriteResponseContentType(context.Context, *emptypb.Empty) (*wrapperspb.StringValue, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OverwriteResponseContentType not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CheckExternalPathEnum not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CheckExternalNestedPathEnum not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CheckStatus(context.Context, *emptypb.Empty) (*CheckStatusResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CheckStatus not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) Exists(context.Context, *ABitOfEverything) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Exists not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) CustomOptionsRequest(context.Context, *ABitOfEverything) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CustomOptionsRequest not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) TraceRequest(context.Context, *ABitOfEverything) (*ABitOfEverything, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method TraceRequest not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) PostOneofEnum(context.Context, *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PostOneofEnum not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) PostRequiredMessageType(context.Context, *RequiredMessageTypeRequest) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PostRequiredMessageType not implemented\")\n}\nfunc (UnimplementedABitOfEverythingServiceServer) testEmbeddedByValue() {}\n\n// UnsafeABitOfEverythingServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to ABitOfEverythingServiceServer will\n// result in compilation errors.\ntype UnsafeABitOfEverythingServiceServer interface {\n\tmustEmbedUnimplementedABitOfEverythingServiceServer()\n}\n\nfunc RegisterABitOfEverythingServiceServer(s grpc.ServiceRegistrar, srv ABitOfEverythingServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedABitOfEverythingServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&ABitOfEverythingService_ServiceDesc, srv)\n}\n\nfunc _ABitOfEverythingService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Create(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Create_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Create(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CreateBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CreateBody(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CreateBody_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CreateBody(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CreateBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(CreateBookRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CreateBook(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CreateBook_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CreateBook(ctx, req.(*CreateBookRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_UpdateBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(UpdateBookRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).UpdateBook(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_UpdateBook_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).UpdateBook(ctx, req.(*UpdateBookRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_Lookup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(sub2.IdMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Lookup(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Lookup_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Lookup(ctx, req.(*sub2.IdMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_Custom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Custom(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Custom_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Custom(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_DoubleColon_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).DoubleColon(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_DoubleColon_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).DoubleColon(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Update(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Update_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Update(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_UpdateV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(UpdateV2Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).UpdateV2(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_UpdateV2_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).UpdateV2(ctx, req.(*UpdateV2Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(sub2.IdMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Delete(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Delete_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Delete(ctx, req.(*sub2.IdMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_GetQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).GetQuery(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_GetQuery_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).GetQuery(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_GetRepeatedQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverythingRepeated)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).GetRepeatedQuery(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_GetRepeatedQuery_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).GetRepeatedQuery(ctx, req.(*ABitOfEverythingRepeated))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(sub.StringMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Echo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Echo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Echo(ctx, req.(*sub.StringMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_DeepPathEcho_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).DeepPathEcho(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_DeepPathEcho_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).DeepPathEcho(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_NoBindings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(durationpb.Duration)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).NoBindings(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_NoBindings_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).NoBindings(ctx, req.(*durationpb.Duration))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_Timeout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Timeout(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Timeout_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Timeout(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_ErrorWithDetails_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).ErrorWithDetails(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_ErrorWithDetails_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).ErrorWithDetails(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_GetMessageWithBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MessageWithBody)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).GetMessageWithBody(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_GetMessageWithBody_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).GetMessageWithBody(ctx, req.(*MessageWithBody))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_PostWithEmptyBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Body)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).PostWithEmptyBody(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_PostWithEmptyBody_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).PostWithEmptyBody(ctx, req.(*Body))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CheckGetQueryParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckGetQueryParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CheckGetQueryParams_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckGetQueryParams(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckNestedEnumGetQueryParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CheckNestedEnumGetQueryParams_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckNestedEnumGetQueryParams(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckPostQueryParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CheckPostQueryParams_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckPostQueryParams(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_OverwriteRequestContentType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Body)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).OverwriteRequestContentType(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_OverwriteRequestContentType_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).OverwriteRequestContentType(ctx, req.(*Body))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_OverwriteResponseContentType_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CheckExternalPathEnum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(pathenum.MessageWithPathEnum)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckExternalPathEnum(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CheckExternalPathEnum_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckExternalPathEnum(ctx, req.(*pathenum.MessageWithPathEnum))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CheckExternalNestedPathEnum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(pathenum.MessageWithNestedPathEnum)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckExternalNestedPathEnum(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CheckExternalNestedPathEnum_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckExternalNestedPathEnum(ctx, req.(*pathenum.MessageWithNestedPathEnum))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CheckStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckStatus(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CheckStatus_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CheckStatus(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_Exists_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).Exists(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_Exists_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).Exists(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_CustomOptionsRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).CustomOptionsRequest(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_CustomOptionsRequest_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).CustomOptionsRequest(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_TraceRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ABitOfEverything)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).TraceRequest(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_TraceRequest_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).TraceRequest(ctx, req.(*ABitOfEverything))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_PostOneofEnum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(oneofenum.OneofEnumMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).PostOneofEnum(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_PostOneofEnum_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).PostOneofEnum(ctx, req.(*oneofenum.OneofEnumMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ABitOfEverythingService_PostRequiredMessageType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(RequiredMessageTypeRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ABitOfEverythingServiceServer).PostRequiredMessageType(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ABitOfEverythingService_PostRequiredMessageType_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ABitOfEverythingServiceServer).PostRequiredMessageType(ctx, req.(*RequiredMessageTypeRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// ABitOfEverythingService_ServiceDesc is the grpc.ServiceDesc for ABitOfEverythingService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService\",\n\tHandlerType: (*ABitOfEverythingServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Create\",\n\t\t\tHandler:    _ABitOfEverythingService_Create_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateBody\",\n\t\t\tHandler:    _ABitOfEverythingService_CreateBody_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateBook\",\n\t\t\tHandler:    _ABitOfEverythingService_CreateBook_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateBook\",\n\t\t\tHandler:    _ABitOfEverythingService_UpdateBook_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Lookup\",\n\t\t\tHandler:    _ABitOfEverythingService_Lookup_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Custom\",\n\t\t\tHandler:    _ABitOfEverythingService_Custom_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DoubleColon\",\n\t\t\tHandler:    _ABitOfEverythingService_DoubleColon_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Update\",\n\t\t\tHandler:    _ABitOfEverythingService_Update_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateV2\",\n\t\t\tHandler:    _ABitOfEverythingService_UpdateV2_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Delete\",\n\t\t\tHandler:    _ABitOfEverythingService_Delete_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"GetQuery\",\n\t\t\tHandler:    _ABitOfEverythingService_GetQuery_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"GetRepeatedQuery\",\n\t\t\tHandler:    _ABitOfEverythingService_GetRepeatedQuery_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Echo\",\n\t\t\tHandler:    _ABitOfEverythingService_Echo_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DeepPathEcho\",\n\t\t\tHandler:    _ABitOfEverythingService_DeepPathEcho_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"NoBindings\",\n\t\t\tHandler:    _ABitOfEverythingService_NoBindings_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Timeout\",\n\t\t\tHandler:    _ABitOfEverythingService_Timeout_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ErrorWithDetails\",\n\t\t\tHandler:    _ABitOfEverythingService_ErrorWithDetails_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"GetMessageWithBody\",\n\t\t\tHandler:    _ABitOfEverythingService_GetMessageWithBody_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PostWithEmptyBody\",\n\t\t\tHandler:    _ABitOfEverythingService_PostWithEmptyBody_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CheckGetQueryParams\",\n\t\t\tHandler:    _ABitOfEverythingService_CheckGetQueryParams_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CheckNestedEnumGetQueryParams\",\n\t\t\tHandler:    _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CheckPostQueryParams\",\n\t\t\tHandler:    _ABitOfEverythingService_CheckPostQueryParams_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"OverwriteRequestContentType\",\n\t\t\tHandler:    _ABitOfEverythingService_OverwriteRequestContentType_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"OverwriteResponseContentType\",\n\t\t\tHandler:    _ABitOfEverythingService_OverwriteResponseContentType_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CheckExternalPathEnum\",\n\t\t\tHandler:    _ABitOfEverythingService_CheckExternalPathEnum_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CheckExternalNestedPathEnum\",\n\t\t\tHandler:    _ABitOfEverythingService_CheckExternalNestedPathEnum_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CheckStatus\",\n\t\t\tHandler:    _ABitOfEverythingService_CheckStatus_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Exists\",\n\t\t\tHandler:    _ABitOfEverythingService_Exists_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CustomOptionsRequest\",\n\t\t\tHandler:    _ABitOfEverythingService_CustomOptionsRequest_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"TraceRequest\",\n\t\t\tHandler:    _ABitOfEverythingService_TraceRequest_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PostOneofEnum\",\n\t\t\tHandler:    _ABitOfEverythingService_PostOneofEnum_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PostRequiredMessageType\",\n\t\t\tHandler:    _ABitOfEverythingService_PostRequiredMessageType_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/a_bit_of_everything.proto\",\n}\n\nconst (\n\tCamelCaseServiceName_Empty_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName/Empty\"\n)\n\n// CamelCaseServiceNameClient is the client API for CamelCaseServiceName service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// camelCase and lowercase service names are valid but not recommended (use TitleCase instead)\ntype CamelCaseServiceNameClient interface {\n\tEmpty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)\n}\n\ntype camelCaseServiceNameClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewCamelCaseServiceNameClient(cc grpc.ClientConnInterface) CamelCaseServiceNameClient {\n\treturn &camelCaseServiceNameClient{cc}\n}\n\nfunc (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, CamelCaseServiceName_Empty_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// CamelCaseServiceNameServer is the server API for CamelCaseServiceName service.\n// All implementations should embed UnimplementedCamelCaseServiceNameServer\n// for forward compatibility.\n//\n// camelCase and lowercase service names are valid but not recommended (use TitleCase instead)\ntype CamelCaseServiceNameServer interface {\n\tEmpty(context.Context, *emptypb.Empty) (*emptypb.Empty, error)\n}\n\n// UnimplementedCamelCaseServiceNameServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedCamelCaseServiceNameServer struct{}\n\nfunc (UnimplementedCamelCaseServiceNameServer) Empty(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Empty not implemented\")\n}\nfunc (UnimplementedCamelCaseServiceNameServer) testEmbeddedByValue() {}\n\n// UnsafeCamelCaseServiceNameServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to CamelCaseServiceNameServer will\n// result in compilation errors.\ntype UnsafeCamelCaseServiceNameServer interface {\n\tmustEmbedUnimplementedCamelCaseServiceNameServer()\n}\n\nfunc RegisterCamelCaseServiceNameServer(s grpc.ServiceRegistrar, srv CamelCaseServiceNameServer) {\n\t// If the following call pancis, it indicates UnimplementedCamelCaseServiceNameServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&CamelCaseServiceName_ServiceDesc, srv)\n}\n\nfunc _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(CamelCaseServiceNameServer).Empty(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: CamelCaseServiceName_Empty_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(CamelCaseServiceNameServer).Empty(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// CamelCaseServiceName_ServiceDesc is the grpc.ServiceDesc for CamelCaseServiceName service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar CamelCaseServiceName_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName\",\n\tHandlerType: (*CamelCaseServiceNameServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Empty\",\n\t\t\tHandler:    _CamelCaseServiceName_Empty_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/a_bit_of_everything.proto\",\n}\n\nconst (\n\tAnotherServiceWithNoBindings_NoBindings_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings/NoBindings\"\n)\n\n// AnotherServiceWithNoBindingsClient is the client API for AnotherServiceWithNoBindings service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype AnotherServiceWithNoBindingsClient interface {\n\tNoBindings(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)\n}\n\ntype anotherServiceWithNoBindingsClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewAnotherServiceWithNoBindingsClient(cc grpc.ClientConnInterface) AnotherServiceWithNoBindingsClient {\n\treturn &anotherServiceWithNoBindingsClient{cc}\n}\n\nfunc (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, AnotherServiceWithNoBindings_NoBindings_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// AnotherServiceWithNoBindingsServer is the server API for AnotherServiceWithNoBindings service.\n// All implementations should embed UnimplementedAnotherServiceWithNoBindingsServer\n// for forward compatibility.\ntype AnotherServiceWithNoBindingsServer interface {\n\tNoBindings(context.Context, *emptypb.Empty) (*emptypb.Empty, error)\n}\n\n// UnimplementedAnotherServiceWithNoBindingsServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedAnotherServiceWithNoBindingsServer struct{}\n\nfunc (UnimplementedAnotherServiceWithNoBindingsServer) NoBindings(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method NoBindings not implemented\")\n}\nfunc (UnimplementedAnotherServiceWithNoBindingsServer) testEmbeddedByValue() {}\n\n// UnsafeAnotherServiceWithNoBindingsServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to AnotherServiceWithNoBindingsServer will\n// result in compilation errors.\ntype UnsafeAnotherServiceWithNoBindingsServer interface {\n\tmustEmbedUnimplementedAnotherServiceWithNoBindingsServer()\n}\n\nfunc RegisterAnotherServiceWithNoBindingsServer(s grpc.ServiceRegistrar, srv AnotherServiceWithNoBindingsServer) {\n\t// If the following call pancis, it indicates UnimplementedAnotherServiceWithNoBindingsServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&AnotherServiceWithNoBindings_ServiceDesc, srv)\n}\n\nfunc _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(AnotherServiceWithNoBindingsServer).NoBindings(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: AnotherServiceWithNoBindings_NoBindings_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(AnotherServiceWithNoBindingsServer).NoBindings(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// AnotherServiceWithNoBindings_ServiceDesc is the grpc.ServiceDesc for AnotherServiceWithNoBindings service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar AnotherServiceWithNoBindings_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings\",\n\tHandlerType: (*AnotherServiceWithNoBindingsServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"NoBindings\",\n\t\t\tHandler:    _AnotherServiceWithNoBindings_NoBindings_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/a_bit_of_everything.proto\",\n}\n\nconst (\n\tSnakeEnumService_SnakeEnum_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService/SnakeEnum\"\n)\n\n// SnakeEnumServiceClient is the client API for SnakeEnumService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype SnakeEnumServiceClient interface {\n\tSnakeEnum(ctx context.Context, in *SnakeEnumRequest, opts ...grpc.CallOption) (*SnakeEnumResponse, error)\n}\n\ntype snakeEnumServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewSnakeEnumServiceClient(cc grpc.ClientConnInterface) SnakeEnumServiceClient {\n\treturn &snakeEnumServiceClient{cc}\n}\n\nfunc (c *snakeEnumServiceClient) SnakeEnum(ctx context.Context, in *SnakeEnumRequest, opts ...grpc.CallOption) (*SnakeEnumResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(SnakeEnumResponse)\n\terr := c.cc.Invoke(ctx, SnakeEnumService_SnakeEnum_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// SnakeEnumServiceServer is the server API for SnakeEnumService service.\n// All implementations should embed UnimplementedSnakeEnumServiceServer\n// for forward compatibility.\ntype SnakeEnumServiceServer interface {\n\tSnakeEnum(context.Context, *SnakeEnumRequest) (*SnakeEnumResponse, error)\n}\n\n// UnimplementedSnakeEnumServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedSnakeEnumServiceServer struct{}\n\nfunc (UnimplementedSnakeEnumServiceServer) SnakeEnum(context.Context, *SnakeEnumRequest) (*SnakeEnumResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method SnakeEnum not implemented\")\n}\nfunc (UnimplementedSnakeEnumServiceServer) testEmbeddedByValue() {}\n\n// UnsafeSnakeEnumServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to SnakeEnumServiceServer will\n// result in compilation errors.\ntype UnsafeSnakeEnumServiceServer interface {\n\tmustEmbedUnimplementedSnakeEnumServiceServer()\n}\n\nfunc RegisterSnakeEnumServiceServer(s grpc.ServiceRegistrar, srv SnakeEnumServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedSnakeEnumServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&SnakeEnumService_ServiceDesc, srv)\n}\n\nfunc _SnakeEnumService_SnakeEnum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(SnakeEnumRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(SnakeEnumServiceServer).SnakeEnum(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: SnakeEnumService_SnakeEnum_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(SnakeEnumServiceServer).SnakeEnum(ctx, req.(*SnakeEnumRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// SnakeEnumService_ServiceDesc is the grpc.ServiceDesc for SnakeEnumService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar SnakeEnumService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService\",\n\tHandlerType: (*SnakeEnumServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"SnakeEnum\",\n\t\t\tHandler:    _SnakeEnumService_SnakeEnum_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/a_bit_of_everything.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/camel_case_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/camel_case_service.proto\n\npackage examplepb\n\nimport (\n\tsub \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype CamelStatus int32\n\nconst (\n\tCamelStatus_CAMEL_STATUS_UNSPECIFIED CamelStatus = 0\n\tCamelStatus_CAMEL_STATUS_AVAILABLE   CamelStatus = 1\n\tCamelStatus_CAMEL_STATUS_PENDING     CamelStatus = 2\n)\n\n// Enum value maps for CamelStatus.\nvar (\n\tCamelStatus_name = map[int32]string{\n\t\t0: \"CAMEL_STATUS_UNSPECIFIED\",\n\t\t1: \"CAMEL_STATUS_AVAILABLE\",\n\t\t2: \"CAMEL_STATUS_PENDING\",\n\t}\n\tCamelStatus_value = map[string]int32{\n\t\t\"CAMEL_STATUS_UNSPECIFIED\": 0,\n\t\t\"CAMEL_STATUS_AVAILABLE\":   1,\n\t\t\"CAMEL_STATUS_PENDING\":     2,\n\t}\n)\n\nfunc (x CamelStatus) Enum() *CamelStatus {\n\tp := new(CamelStatus)\n\t*p = x\n\treturn p\n}\n\nfunc (x CamelStatus) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (CamelStatus) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_camel_case_service_proto_enumTypes[0].Descriptor()\n}\n\nfunc (CamelStatus) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_camel_case_service_proto_enumTypes[0]\n}\n\nfunc (x CamelStatus) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use CamelStatus.Descriptor instead.\nfunc (CamelStatus) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescGZIP(), []int{0}\n}\n\ntype GetStatusRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tState CamelStatus `protobuf:\"varint,1,opt,name=state,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.CamelStatus\" json:\"state,omitempty\"`\n}\n\nfunc (x *GetStatusRequest) Reset() {\n\t*x = GetStatusRequest{}\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *GetStatusRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*GetStatusRequest) ProtoMessage() {}\n\nfunc (x *GetStatusRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use GetStatusRequest.ProtoReflect.Descriptor instead.\nfunc (*GetStatusRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *GetStatusRequest) GetState() CamelStatus {\n\tif x != nil {\n\t\treturn x.State\n\t}\n\treturn CamelStatus_CAMEL_STATUS_UNSPECIFIED\n}\n\ntype GetStatusResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tState CamelStatus `protobuf:\"varint,1,opt,name=state,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.CamelStatus\" json:\"state,omitempty\"`\n}\n\nfunc (x *GetStatusResponse) Reset() {\n\t*x = GetStatusResponse{}\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *GetStatusResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*GetStatusResponse) ProtoMessage() {}\n\nfunc (x *GetStatusResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use GetStatusResponse.ProtoReflect.Descriptor instead.\nfunc (*GetStatusResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *GetStatusResponse) GetState() CamelStatus {\n\tif x != nil {\n\t\treturn x.State\n\t}\n\treturn CamelStatus_CAMEL_STATUS_UNSPECIFIED\n}\n\ntype PostBookRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBook *sub.CreateBook `protobuf:\"bytes,1,opt,name=book,proto3\" json:\"book,omitempty\"`\n}\n\nfunc (x *PostBookRequest) Reset() {\n\t*x = PostBookRequest{}\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *PostBookRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*PostBookRequest) ProtoMessage() {}\n\nfunc (x *PostBookRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use PostBookRequest.ProtoReflect.Descriptor instead.\nfunc (*PostBookRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *PostBookRequest) GetBook() *sub.CreateBook {\n\tif x != nil {\n\t\treturn x.Book\n\t}\n\treturn nil\n}\n\ntype PostBookResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBook *sub.CreateBook `protobuf:\"bytes,1,opt,name=book,proto3\" json:\"book,omitempty\"`\n}\n\nfunc (x *PostBookResponse) Reset() {\n\t*x = PostBookResponse{}\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *PostBookResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*PostBookResponse) ProtoMessage() {}\n\nfunc (x *PostBookResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use PostBookResponse.ProtoReflect.Descriptor instead.\nfunc (*PostBookResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *PostBookResponse) GetBook() *sub.CreateBook {\n\tif x != nil {\n\t\treturn x.Book\n\t}\n\treturn nil\n}\n\nvar File_examples_internal_proto_examplepb_camel_case_service_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_camel_case_service_proto_rawDesc = []byte{\n\t0x0a, 0x3a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73,\n\t0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x34, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x5f,\n\t0x63, 0x61, 0x73, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61,\n\t0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x22, 0x65, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71,\n\t0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x6d, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,\n\t0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x66, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x74,\n\t0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x05,\n\t0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x6d,\n\t0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22,\n\t0x5c, 0x0a, 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,\n\t0x73, 0x74, 0x12, 0x49, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61,\n\t0x74, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x5d, 0x0a,\n\t0x10, 0x50, 0x6f, 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,\n\t0x65, 0x12, 0x49, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,\n\t0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x2a, 0x61, 0x0a, 0x0b,\n\t0x43, 0x61, 0x6d, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x18, 0x43,\n\t0x41, 0x4d, 0x45, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50,\n\t0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x41, 0x4d,\n\t0x45, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41,\n\t0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x4d, 0x45, 0x4c, 0x5f, 0x53,\n\t0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x32,\n\t0xfd, 0x02, 0x0a, 0x12, 0x43, 0x61, 0x6d, 0x65, 0x6c, 0x5f, 0x43, 0x61, 0x73, 0x65, 0x5f, 0x73,\n\t0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb1, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x5f, 0x73,\n\t0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,\n\t0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74,\n\t0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93,\n\t0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x5f, 0x63, 0x61,\n\t0x73, 0x65, 0x2f, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x65, 0x7d, 0x12, 0xb2, 0x01, 0x0a, 0x09, 0x50,\n\t0x6f, 0x73, 0x74, 0x5f, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x42, 0x6f,\n\t0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x42,\n\t0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4,\n\t0x93, 0x02, 0x1c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x63,\n\t0x61, 0x6d, 0x65, 0x6c, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x42,\n\t0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72,\n\t0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70,\n\t0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_camel_case_service_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_camel_case_service_proto_rawDescData = file_examples_internal_proto_examplepb_camel_case_service_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_camel_case_service_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_camel_case_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_camel_case_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\nvar file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4)\nvar file_examples_internal_proto_examplepb_camel_case_service_proto_goTypes = []any{\n\t(CamelStatus)(0),          // 0: grpc.gateway.examples.internal.proto.examplepb.CamelStatus\n\t(*GetStatusRequest)(nil),  // 1: grpc.gateway.examples.internal.proto.examplepb.GetStatusRequest\n\t(*GetStatusResponse)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.GetStatusResponse\n\t(*PostBookRequest)(nil),   // 3: grpc.gateway.examples.internal.proto.examplepb.PostBookRequest\n\t(*PostBookResponse)(nil),  // 4: grpc.gateway.examples.internal.proto.examplepb.PostBookResponse\n\t(*sub.CreateBook)(nil),    // 5: grpc.gateway.examples.internal.proto.sub.Create_book\n}\nvar file_examples_internal_proto_examplepb_camel_case_service_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.proto.examplepb.GetStatusRequest.state:type_name -> grpc.gateway.examples.internal.proto.examplepb.CamelStatus\n\t0, // 1: grpc.gateway.examples.internal.proto.examplepb.GetStatusResponse.state:type_name -> grpc.gateway.examples.internal.proto.examplepb.CamelStatus\n\t5, // 2: grpc.gateway.examples.internal.proto.examplepb.PostBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.sub.Create_book\n\t5, // 3: grpc.gateway.examples.internal.proto.examplepb.PostBookResponse.book:type_name -> grpc.gateway.examples.internal.proto.sub.Create_book\n\t1, // 4: grpc.gateway.examples.internal.proto.examplepb.Camel_Case_service.Get_status:input_type -> grpc.gateway.examples.internal.proto.examplepb.GetStatusRequest\n\t3, // 5: grpc.gateway.examples.internal.proto.examplepb.Camel_Case_service.Post_Book:input_type -> grpc.gateway.examples.internal.proto.examplepb.PostBookRequest\n\t2, // 6: grpc.gateway.examples.internal.proto.examplepb.Camel_Case_service.Get_status:output_type -> grpc.gateway.examples.internal.proto.examplepb.GetStatusResponse\n\t4, // 7: grpc.gateway.examples.internal.proto.examplepb.Camel_Case_service.Post_Book:output_type -> grpc.gateway.examples.internal.proto.examplepb.PostBookResponse\n\t6, // [6:8] is the sub-list for method output_type\n\t4, // [4:6] is the sub-list for method input_type\n\t4, // [4:4] is the sub-list for extension type_name\n\t4, // [4:4] is the sub-list for extension extendee\n\t0, // [0:4] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_camel_case_service_proto_init() }\nfunc file_examples_internal_proto_examplepb_camel_case_service_proto_init() {\n\tif File_examples_internal_proto_examplepb_camel_case_service_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_camel_case_service_proto_rawDesc,\n\t\t\tNumEnums:      1,\n\t\t\tNumMessages:   4,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_camel_case_service_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_camel_case_service_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_examplepb_camel_case_service_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_camel_case_service_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_camel_case_service_proto = out.File\n\tfile_examples_internal_proto_examplepb_camel_case_service_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_camel_case_service_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_camel_case_service_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/camel_case_service.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/camel_case_service.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_Camel_CaseService_GetStatus_0(ctx context.Context, marshaler runtime.Marshaler, client Camel_CaseServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GetStatusRequest\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"state\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"state\")\n\t}\n\te, err = runtime.Enum(val, CamelStatus_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"state\", err)\n\t}\n\tprotoReq.State = CamelStatus(e)\n\tmsg, err := client.GetStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Camel_CaseService_GetStatus_0(ctx context.Context, marshaler runtime.Marshaler, server Camel_CaseServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GetStatusRequest\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"state\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"state\")\n\t}\n\te, err = runtime.Enum(val, CamelStatus_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"state\", err)\n\t}\n\tprotoReq.State = CamelStatus(e)\n\tmsg, err := server.GetStatus(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Camel_CaseService_Post_Book_0(ctx context.Context, marshaler runtime.Marshaler, client Camel_CaseServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq PostBookRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Book); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Post_Book(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Camel_CaseService_Post_Book_0(ctx context.Context, marshaler runtime.Marshaler, server Camel_CaseServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq PostBookRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Book); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Post_Book(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterCamel_CaseServiceHandlerServer registers the http handlers for service Camel_CaseService to \"mux\".\n// UnaryRPC     :call Camel_CaseServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterCamel_CaseServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterCamel_CaseServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server Camel_CaseServiceServer) error {\n\tmux.Handle(http.MethodGet, pattern_Camel_CaseService_GetStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Camel_CaseService/GetStatus\", runtime.WithHTTPPathPattern(\"/v1/camel_case/{state}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Camel_CaseService_GetStatus_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Camel_CaseService_GetStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_Camel_CaseService_Post_Book_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Camel_CaseService/Post_Book\", runtime.WithHTTPPathPattern(\"/v1/camel_case/books\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Camel_CaseService_Post_Book_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Camel_CaseService_Post_Book_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterCamel_CaseServiceHandlerFromEndpoint is same as RegisterCamel_CaseServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterCamel_CaseServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterCamel_CaseServiceHandler(ctx, mux, conn)\n}\n\n// RegisterCamel_CaseServiceHandler registers the http handlers for service Camel_CaseService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterCamel_CaseServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterCamel_CaseServiceHandlerClient(ctx, mux, NewCamel_CaseServiceClient(conn))\n}\n\n// RegisterCamel_CaseServiceHandlerClient registers the http handlers for service Camel_CaseService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"Camel_CaseServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"Camel_CaseServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"Camel_CaseServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterCamel_CaseServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client Camel_CaseServiceClient) error {\n\tmux.Handle(http.MethodGet, pattern_Camel_CaseService_GetStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Camel_CaseService/GetStatus\", runtime.WithHTTPPathPattern(\"/v1/camel_case/{state}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Camel_CaseService_GetStatus_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Camel_CaseService_GetStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_Camel_CaseService_Post_Book_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Camel_CaseService/Post_Book\", runtime.WithHTTPPathPattern(\"/v1/camel_case/books\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Camel_CaseService_Post_Book_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Camel_CaseService_Post_Book_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_Camel_CaseService_GetStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"v1\", \"camel_case\", \"state\"}, \"\"))\n\tpattern_Camel_CaseService_Post_Book_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"camel_case\", \"books\"}, \"\"))\n)\n\nvar (\n\tforward_Camel_CaseService_GetStatus_0 = runtime.ForwardResponseMessage\n\tforward_Camel_CaseService_Post_Book_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/camel_case_service.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"examples/internal/proto/sub/camel_case_message.proto\";\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// Camel_Case_service consumes snake_case identifiers declared in the sub\n// package to ensure generated code camel-cases enum/message references, even\n// when service and RPC names are snake_case.\nservice Camel_Case_service {\n  rpc Get_status(GetStatusRequest) returns (GetStatusResponse) {\n    option (google.api.http) = {get: \"/v1/camel_case/{state}\"};\n  }\n\n  rpc Post_Book(PostBookRequest) returns (PostBookResponse) {\n    option (google.api.http) = {\n      post: \"/v1/camel_case/books\"\n      body: \"book\"\n    };\n  }\n}\n\nmessage GetStatusRequest {\n  CamelStatus state = 1;\n}\n\nmessage GetStatusResponse {\n  CamelStatus state = 1;\n}\n\nmessage PostBookRequest {\n  grpc.gateway.examples.internal.proto.sub.Create_book book = 1;\n}\n\nmessage PostBookResponse {\n  grpc.gateway.examples.internal.proto.sub.Create_book book = 1;\n}\n\nenum CamelStatus {\n  CAMEL_STATUS_UNSPECIFIED = 0;\n  CAMEL_STATUS_AVAILABLE = 1;\n  CAMEL_STATUS_PENDING = 2;\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/camel_case_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/camel_case_service.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"Camel_Case_service\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/camel_case/books\": {\n      \"post\": {\n        \"operationId\": \"Camel_Case_service_Post_Book\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbPostBookResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"book\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/subCreate_book\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"Camel_Case_service\"\n        ]\n      }\n    },\n    \"/v1/camel_case/{state}\": {\n      \"get\": {\n        \"operationId\": \"Camel_Case_service_Get_status\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGetStatusResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"state\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"CAMEL_STATUS_UNSPECIFIED\",\n              \"CAMEL_STATUS_AVAILABLE\",\n              \"CAMEL_STATUS_PENDING\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"Camel_Case_service\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbCamelStatus\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"CAMEL_STATUS_UNSPECIFIED\",\n        \"CAMEL_STATUS_AVAILABLE\",\n        \"CAMEL_STATUS_PENDING\"\n      ],\n      \"default\": \"CAMEL_STATUS_UNSPECIFIED\"\n    },\n    \"examplepbGetStatusResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"state\": {\n          \"$ref\": \"#/definitions/examplepbCamelStatus\"\n        }\n      }\n    },\n    \"examplepbPostBookResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"book\": {\n          \"$ref\": \"#/definitions/subCreate_book\"\n        }\n      }\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"subCreate_book\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\"\n        },\n        \"author\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Create_book and Status_enum demonstrate snake_case identifiers that need to\\nbe resolved to Go camel case when referenced by other packages.\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/camel_case_service_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/camel_case_service.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tCamel_CaseService_GetStatus_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.Camel_Case_service/Get_status\"\n\tCamel_CaseService_Post_Book_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.Camel_Case_service/Post_Book\"\n)\n\n// Camel_CaseServiceClient is the client API for Camel_CaseService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// Camel_Case_service consumes snake_case identifiers declared in the sub\n// package to ensure generated code camel-cases enum/message references, even\n// when service and RPC names are snake_case.\ntype Camel_CaseServiceClient interface {\n\tGetStatus(ctx context.Context, in *GetStatusRequest, opts ...grpc.CallOption) (*GetStatusResponse, error)\n\tPost_Book(ctx context.Context, in *PostBookRequest, opts ...grpc.CallOption) (*PostBookResponse, error)\n}\n\ntype camel_CaseServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewCamel_CaseServiceClient(cc grpc.ClientConnInterface) Camel_CaseServiceClient {\n\treturn &camel_CaseServiceClient{cc}\n}\n\nfunc (c *camel_CaseServiceClient) GetStatus(ctx context.Context, in *GetStatusRequest, opts ...grpc.CallOption) (*GetStatusResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(GetStatusResponse)\n\terr := c.cc.Invoke(ctx, Camel_CaseService_GetStatus_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *camel_CaseServiceClient) Post_Book(ctx context.Context, in *PostBookRequest, opts ...grpc.CallOption) (*PostBookResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(PostBookResponse)\n\terr := c.cc.Invoke(ctx, Camel_CaseService_Post_Book_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// Camel_CaseServiceServer is the server API for Camel_CaseService service.\n// All implementations should embed UnimplementedCamel_CaseServiceServer\n// for forward compatibility.\n//\n// Camel_Case_service consumes snake_case identifiers declared in the sub\n// package to ensure generated code camel-cases enum/message references, even\n// when service and RPC names are snake_case.\ntype Camel_CaseServiceServer interface {\n\tGetStatus(context.Context, *GetStatusRequest) (*GetStatusResponse, error)\n\tPost_Book(context.Context, *PostBookRequest) (*PostBookResponse, error)\n}\n\n// UnimplementedCamel_CaseServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedCamel_CaseServiceServer struct{}\n\nfunc (UnimplementedCamel_CaseServiceServer) GetStatus(context.Context, *GetStatusRequest) (*GetStatusResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GetStatus not implemented\")\n}\nfunc (UnimplementedCamel_CaseServiceServer) Post_Book(context.Context, *PostBookRequest) (*PostBookResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Post_Book not implemented\")\n}\nfunc (UnimplementedCamel_CaseServiceServer) testEmbeddedByValue() {}\n\n// UnsafeCamel_CaseServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to Camel_CaseServiceServer will\n// result in compilation errors.\ntype UnsafeCamel_CaseServiceServer interface {\n\tmustEmbedUnimplementedCamel_CaseServiceServer()\n}\n\nfunc RegisterCamel_CaseServiceServer(s grpc.ServiceRegistrar, srv Camel_CaseServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedCamel_CaseServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&Camel_CaseService_ServiceDesc, srv)\n}\n\nfunc _Camel_CaseService_GetStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GetStatusRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(Camel_CaseServiceServer).GetStatus(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: Camel_CaseService_GetStatus_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(Camel_CaseServiceServer).GetStatus(ctx, req.(*GetStatusRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Camel_CaseService_Post_Book_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(PostBookRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(Camel_CaseServiceServer).Post_Book(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: Camel_CaseService_Post_Book_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(Camel_CaseServiceServer).Post_Book(ctx, req.(*PostBookRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// Camel_CaseService_ServiceDesc is the grpc.ServiceDesc for Camel_CaseService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar Camel_CaseService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.Camel_Case_service\",\n\tHandlerType: (*Camel_CaseServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Get_status\",\n\t\t\tHandler:    _Camel_CaseService_GetStatus_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Post_Book\",\n\t\t\tHandler:    _Camel_CaseService_Post_Book_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/camel_case_service.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/echo_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/echo_service.proto\n\n// Echo Service\n//\n// Echo Service API consists of a single service which returns\n// a message.\n\npackage examplepb\n\nimport (\n\tsub \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\tsub2 \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// Embedded represents a message embedded in SimpleMessage.\ntype Embedded struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Types that are assignable to Mark:\n\t//\n\t//\t*Embedded_Progress\n\t//\t*Embedded_Note\n\tMark isEmbedded_Mark `protobuf_oneof:\"mark\"`\n}\n\nfunc (x *Embedded) Reset() {\n\t*x = Embedded{}\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Embedded) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Embedded) ProtoMessage() {}\n\nfunc (x *Embedded) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Embedded.ProtoReflect.Descriptor instead.\nfunc (*Embedded) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (m *Embedded) GetMark() isEmbedded_Mark {\n\tif m != nil {\n\t\treturn m.Mark\n\t}\n\treturn nil\n}\n\nfunc (x *Embedded) GetProgress() int64 {\n\tif x, ok := x.GetMark().(*Embedded_Progress); ok {\n\t\treturn x.Progress\n\t}\n\treturn 0\n}\n\nfunc (x *Embedded) GetNote() string {\n\tif x, ok := x.GetMark().(*Embedded_Note); ok {\n\t\treturn x.Note\n\t}\n\treturn \"\"\n}\n\ntype isEmbedded_Mark interface {\n\tisEmbedded_Mark()\n}\n\ntype Embedded_Progress struct {\n\tProgress int64 `protobuf:\"varint,1,opt,name=progress,proto3,oneof\"`\n}\n\ntype Embedded_Note struct {\n\tNote string `protobuf:\"bytes,2,opt,name=note,proto3,oneof\"`\n}\n\nfunc (*Embedded_Progress) isEmbedded_Mark() {}\n\nfunc (*Embedded_Note) isEmbedded_Mark() {}\n\ntype NestedMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tNId string `protobuf:\"bytes,1,opt,name=n_id,json=nId,proto3\" json:\"n_id,omitempty\"`\n\tVal string `protobuf:\"bytes,2,opt,name=val,proto3\" json:\"val,omitempty\"`\n}\n\nfunc (x *NestedMessage) Reset() {\n\t*x = NestedMessage{}\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NestedMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NestedMessage) ProtoMessage() {}\n\nfunc (x *NestedMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NestedMessage.ProtoReflect.Descriptor instead.\nfunc (*NestedMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *NestedMessage) GetNId() string {\n\tif x != nil {\n\t\treturn x.NId\n\t}\n\treturn \"\"\n}\n\nfunc (x *NestedMessage) GetVal() string {\n\tif x != nil {\n\t\treturn x.Val\n\t}\n\treturn \"\"\n}\n\n// SimpleMessage represents a simple message sent to the Echo service.\ntype SimpleMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId  string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tNum int64  `protobuf:\"varint,2,opt,name=num,proto3\" json:\"num,omitempty\"`\n\t// Types that are assignable to Code:\n\t//\n\t//\t*SimpleMessage_LineNum\n\t//\t*SimpleMessage_Lang\n\tCode   isSimpleMessage_Code `protobuf_oneof:\"code\"`\n\tStatus *Embedded            `protobuf:\"bytes,5,opt,name=status,proto3\" json:\"status,omitempty\"`\n\t// Types that are assignable to Ext:\n\t//\n\t//\t*SimpleMessage_En\n\t//\t*SimpleMessage_No\n\tExt        isSimpleMessage_Ext `protobuf_oneof:\"ext\"`\n\tResourceId string              `protobuf:\"bytes,8,opt,name=resource_id,json=resourceId,proto3\" json:\"resource_id,omitempty\"`\n\tNId        *NestedMessage      `protobuf:\"bytes,9,opt,name=n_id,json=nId,proto3\" json:\"n_id,omitempty\"`\n}\n\nfunc (x *SimpleMessage) Reset() {\n\t*x = SimpleMessage{}\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SimpleMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SimpleMessage) ProtoMessage() {}\n\nfunc (x *SimpleMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use SimpleMessage.ProtoReflect.Descriptor instead.\nfunc (*SimpleMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *SimpleMessage) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *SimpleMessage) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (m *SimpleMessage) GetCode() isSimpleMessage_Code {\n\tif m != nil {\n\t\treturn m.Code\n\t}\n\treturn nil\n}\n\nfunc (x *SimpleMessage) GetLineNum() int64 {\n\tif x, ok := x.GetCode().(*SimpleMessage_LineNum); ok {\n\t\treturn x.LineNum\n\t}\n\treturn 0\n}\n\nfunc (x *SimpleMessage) GetLang() string {\n\tif x, ok := x.GetCode().(*SimpleMessage_Lang); ok {\n\t\treturn x.Lang\n\t}\n\treturn \"\"\n}\n\nfunc (x *SimpleMessage) GetStatus() *Embedded {\n\tif x != nil {\n\t\treturn x.Status\n\t}\n\treturn nil\n}\n\nfunc (m *SimpleMessage) GetExt() isSimpleMessage_Ext {\n\tif m != nil {\n\t\treturn m.Ext\n\t}\n\treturn nil\n}\n\nfunc (x *SimpleMessage) GetEn() int64 {\n\tif x, ok := x.GetExt().(*SimpleMessage_En); ok {\n\t\treturn x.En\n\t}\n\treturn 0\n}\n\nfunc (x *SimpleMessage) GetNo() *Embedded {\n\tif x, ok := x.GetExt().(*SimpleMessage_No); ok {\n\t\treturn x.No\n\t}\n\treturn nil\n}\n\nfunc (x *SimpleMessage) GetResourceId() string {\n\tif x != nil {\n\t\treturn x.ResourceId\n\t}\n\treturn \"\"\n}\n\nfunc (x *SimpleMessage) GetNId() *NestedMessage {\n\tif x != nil {\n\t\treturn x.NId\n\t}\n\treturn nil\n}\n\ntype isSimpleMessage_Code interface {\n\tisSimpleMessage_Code()\n}\n\ntype SimpleMessage_LineNum struct {\n\tLineNum int64 `protobuf:\"varint,3,opt,name=line_num,json=lineNum,proto3,oneof\"`\n}\n\ntype SimpleMessage_Lang struct {\n\tLang string `protobuf:\"bytes,4,opt,name=lang,proto3,oneof\"`\n}\n\nfunc (*SimpleMessage_LineNum) isSimpleMessage_Code() {}\n\nfunc (*SimpleMessage_Lang) isSimpleMessage_Code() {}\n\ntype isSimpleMessage_Ext interface {\n\tisSimpleMessage_Ext()\n}\n\ntype SimpleMessage_En struct {\n\tEn int64 `protobuf:\"varint,6,opt,name=en,proto3,oneof\"`\n}\n\ntype SimpleMessage_No struct {\n\tNo *Embedded `protobuf:\"bytes,7,opt,name=no,proto3,oneof\"`\n}\n\nfunc (*SimpleMessage_En) isSimpleMessage_Ext() {}\n\nfunc (*SimpleMessage_No) isSimpleMessage_Ext() {}\n\n// DynamicMessage represents a message which can have its structure\n// built dynamically using Struct and Values.\ntype DynamicMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tStructField *structpb.Struct `protobuf:\"bytes,1,opt,name=struct_field,json=structField,proto3\" json:\"struct_field,omitempty\"`\n\tValueField  *structpb.Value  `protobuf:\"bytes,2,opt,name=value_field,json=valueField,proto3\" json:\"value_field,omitempty\"`\n}\n\nfunc (x *DynamicMessage) Reset() {\n\t*x = DynamicMessage{}\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *DynamicMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*DynamicMessage) ProtoMessage() {}\n\nfunc (x *DynamicMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use DynamicMessage.ProtoReflect.Descriptor instead.\nfunc (*DynamicMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *DynamicMessage) GetStructField() *structpb.Struct {\n\tif x != nil {\n\t\treturn x.StructField\n\t}\n\treturn nil\n}\n\nfunc (x *DynamicMessage) GetValueField() *structpb.Value {\n\tif x != nil {\n\t\treturn x.ValueField\n\t}\n\treturn nil\n}\n\ntype DynamicMessageUpdate struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBody       *DynamicMessage        `protobuf:\"bytes,1,opt,name=body,proto3\" json:\"body,omitempty\"`\n\tUpdateMask *fieldmaskpb.FieldMask `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n}\n\nfunc (x *DynamicMessageUpdate) Reset() {\n\t*x = DynamicMessageUpdate{}\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *DynamicMessageUpdate) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*DynamicMessageUpdate) ProtoMessage() {}\n\nfunc (x *DynamicMessageUpdate) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use DynamicMessageUpdate.ProtoReflect.Descriptor instead.\nfunc (*DynamicMessageUpdate) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *DynamicMessageUpdate) GetBody() *DynamicMessage {\n\tif x != nil {\n\t\treturn x.Body\n\t}\n\treturn nil\n}\n\nfunc (x *DynamicMessageUpdate) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\n// StatusCheckRequest demonstrates name collision handling.\n// It uses Status message from both sub and sub2 packages.\ntype StatusCheckRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tId string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\t// Status from sub package\n\tSubStatus *sub.Status `protobuf:\"bytes,2,opt,name=sub_status,json=subStatus,proto3\" json:\"sub_status,omitempty\"`\n\t// Status from sub2 package (different type with same name)\n\tSub2Status *sub2.Status `protobuf:\"bytes,3,opt,name=sub2_status,json=sub2Status,proto3\" json:\"sub2_status,omitempty\"`\n}\n\nfunc (x *StatusCheckRequest) Reset() {\n\t*x = StatusCheckRequest{}\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *StatusCheckRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*StatusCheckRequest) ProtoMessage() {}\n\nfunc (x *StatusCheckRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use StatusCheckRequest.ProtoReflect.Descriptor instead.\nfunc (*StatusCheckRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{5}\n}\n\nfunc (x *StatusCheckRequest) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *StatusCheckRequest) GetSubStatus() *sub.Status {\n\tif x != nil {\n\t\treturn x.SubStatus\n\t}\n\treturn nil\n}\n\nfunc (x *StatusCheckRequest) GetSub2Status() *sub2.Status {\n\tif x != nil {\n\t\treturn x.Sub2Status\n\t}\n\treturn nil\n}\n\ntype StatusCheckResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tResult string `protobuf:\"bytes,1,opt,name=result,proto3\" json:\"result,omitempty\"`\n\t// Both Status types used in response\n\tSubStatus  *sub.Status  `protobuf:\"bytes,2,opt,name=sub_status,json=subStatus,proto3\" json:\"sub_status,omitempty\"`\n\tSub2Status *sub2.Status `protobuf:\"bytes,3,opt,name=sub2_status,json=sub2Status,proto3\" json:\"sub2_status,omitempty\"`\n}\n\nfunc (x *StatusCheckResponse) Reset() {\n\t*x = StatusCheckResponse{}\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *StatusCheckResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*StatusCheckResponse) ProtoMessage() {}\n\nfunc (x *StatusCheckResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use StatusCheckResponse.ProtoReflect.Descriptor instead.\nfunc (*StatusCheckResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{6}\n}\n\nfunc (x *StatusCheckResponse) GetResult() string {\n\tif x != nil {\n\t\treturn x.Result\n\t}\n\treturn \"\"\n}\n\nfunc (x *StatusCheckResponse) GetSubStatus() *sub.Status {\n\tif x != nil {\n\t\treturn x.SubStatus\n\t}\n\treturn nil\n}\n\nfunc (x *StatusCheckResponse) GetSub2Status() *sub2.Status {\n\tif x != nil {\n\t\treturn x.Sub2Status\n\t}\n\treturn nil\n}\n\nvar File_examples_internal_proto_examplepb_echo_service_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{\n\t0x0a, 0x34, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,\n\t0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f,\n\t0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65,\n\t0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73,\n\t0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a, 0x08, 0x45,\n\t0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72,\n\t0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f,\n\t0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20,\n\t0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6d,\n\t0x61, 0x72, 0x6b, 0x22, 0x34, 0x0a, 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x12, 0x11, 0x0a, 0x04, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x03, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x96, 0x03, 0x0a, 0x0d, 0x53, 0x69,\n\t0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,\n\t0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e,\n\t0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a,\n\t0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48,\n\t0x00, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61,\n\t0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67,\n\t0x12, 0x50, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,\n\t0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01,\n\t0x52, 0x02, 0x65, 0x6e, 0x12, 0x4a, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, 0x52, 0x02, 0x6e, 0x6f,\n\t0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18,\n\t0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49,\n\t0x64, 0x12, 0x50, 0x0a, 0x04, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03,\n\t0x6e, 0x49, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65,\n\t0x78, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65,\n\t0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f,\n\t0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74,\n\t0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x46, 0x69, 0x65, 0x6c,\n\t0x64, 0x12, 0x37, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xa7, 0x01, 0x0a, 0x14, 0x44,\n\t0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64,\n\t0x61, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74,\n\t0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,\n\t0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,\n\t0x4d, 0x61, 0x73, 0x6b, 0x22, 0xc9, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43,\n\t0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,\n\t0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0a, 0x73,\n\t0x75, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75,\n\t0x73, 0x52, 0x09, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x52, 0x0a, 0x0b,\n\t0x73, 0x75, 0x62, 0x32, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x53, 0x74,\n\t0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x32, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,\n\t0x22, 0xd2, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75,\n\t0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,\n\t0x12, 0x4f, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e,\n\t0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75,\n\t0x73, 0x12, 0x52, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x32, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,\n\t0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75,\n\t0x62, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x32, 0x53,\n\t0x74, 0x61, 0x74, 0x75, 0x73, 0x32, 0xd1, 0x0a, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65,\n\t0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8e, 0x03, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x3d,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3d, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53,\n\t0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x87, 0x02, 0x82,\n\t0xd3, 0xe4, 0x93, 0x02, 0x80, 0x02, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f,\n\t0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b,\n\t0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, 0x7d, 0x5a, 0x31, 0x12, 0x2f, 0x2f,\n\t0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x31,\n\t0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x7d,\n\t0x2f, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x1d,\n\t0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63,\n\t0x68, 0x6f, 0x32, 0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x29, 0x12,\n\t0x27, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68,\n\t0x6f, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f,\n\t0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x5a, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x6e, 0x65, 0x73,\n\t0x74, 0x65, 0x64, 0x2f, 0x7b, 0x6e, 0x5f, 0x69, 0x64, 0x2e, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x22,\n\t0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68,\n\t0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42,\n\t0x6f, 0x64, 0x79, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x5a, 0x20, 0x3a, 0x02,\n\t0x6e, 0x6f, 0x1a, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f,\n\t0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x22, 0x15,\n\t0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f,\n\t0x5f, 0x62, 0x6f, 0x64, 0x79, 0x12, 0xab, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65,\n\t0x6c, 0x65, 0x74, 0x65, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x2f,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x64, 0x65, 0x6c,\n\t0x65, 0x74, 0x65, 0x12, 0xbd, 0x01, 0x0a, 0x09, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x61, 0x74, 0x63,\n\t0x68, 0x12, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x24, 0x82,\n\t0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x16, 0x2f, 0x76, 0x31,\n\t0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x61,\n\t0x74, 0x63, 0x68, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x55, 0x6e, 0x61, 0x75,\n\t0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d,\n\t0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f,\n\t0x5f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x12, 0xb9, 0x01,\n\t0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x42, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x74,\n\t0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,\n\t0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73,\n\t0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a,\n\t0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63,\n\t0x68, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74,\n\t0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f,\n\t0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_echo_service_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_echo_service_proto_rawDescData = file_examples_internal_proto_examplepb_echo_service_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_echo_service_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_echo_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_echo_service_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_echo_service_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7)\nvar file_examples_internal_proto_examplepb_echo_service_proto_goTypes = []any{\n\t(*Embedded)(nil),              // 0: grpc.gateway.examples.internal.proto.examplepb.Embedded\n\t(*NestedMessage)(nil),         // 1: grpc.gateway.examples.internal.proto.examplepb.NestedMessage\n\t(*SimpleMessage)(nil),         // 2: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t(*DynamicMessage)(nil),        // 3: grpc.gateway.examples.internal.proto.examplepb.DynamicMessage\n\t(*DynamicMessageUpdate)(nil),  // 4: grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate\n\t(*StatusCheckRequest)(nil),    // 5: grpc.gateway.examples.internal.proto.examplepb.StatusCheckRequest\n\t(*StatusCheckResponse)(nil),   // 6: grpc.gateway.examples.internal.proto.examplepb.StatusCheckResponse\n\t(*structpb.Struct)(nil),       // 7: google.protobuf.Struct\n\t(*structpb.Value)(nil),        // 8: google.protobuf.Value\n\t(*fieldmaskpb.FieldMask)(nil), // 9: google.protobuf.FieldMask\n\t(*sub.Status)(nil),            // 10: grpc.gateway.examples.internal.proto.sub.Status\n\t(*sub2.Status)(nil),           // 11: grpc.gateway.examples.internal.proto.sub2.Status\n}\nvar file_examples_internal_proto_examplepb_echo_service_proto_depIdxs = []int32{\n\t0,  // 0: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.Embedded\n\t0,  // 1: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.Embedded\n\t1,  // 2: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage.n_id:type_name -> grpc.gateway.examples.internal.proto.examplepb.NestedMessage\n\t7,  // 3: grpc.gateway.examples.internal.proto.examplepb.DynamicMessage.struct_field:type_name -> google.protobuf.Struct\n\t8,  // 4: grpc.gateway.examples.internal.proto.examplepb.DynamicMessage.value_field:type_name -> google.protobuf.Value\n\t3,  // 5: grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate.body:type_name -> grpc.gateway.examples.internal.proto.examplepb.DynamicMessage\n\t9,  // 6: grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate.update_mask:type_name -> google.protobuf.FieldMask\n\t10, // 7: grpc.gateway.examples.internal.proto.examplepb.StatusCheckRequest.sub_status:type_name -> grpc.gateway.examples.internal.proto.sub.Status\n\t11, // 8: grpc.gateway.examples.internal.proto.examplepb.StatusCheckRequest.sub2_status:type_name -> grpc.gateway.examples.internal.proto.sub2.Status\n\t10, // 9: grpc.gateway.examples.internal.proto.examplepb.StatusCheckResponse.sub_status:type_name -> grpc.gateway.examples.internal.proto.sub.Status\n\t11, // 10: grpc.gateway.examples.internal.proto.examplepb.StatusCheckResponse.sub2_status:type_name -> grpc.gateway.examples.internal.proto.sub2.Status\n\t2,  // 11: grpc.gateway.examples.internal.proto.examplepb.EchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t2,  // 12: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t2,  // 13: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t4,  // 14: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoPatch:input_type -> grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate\n\t2,  // 15: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoUnauthorized:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t5,  // 16: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoStatus:input_type -> grpc.gateway.examples.internal.proto.examplepb.StatusCheckRequest\n\t2,  // 17: grpc.gateway.examples.internal.proto.examplepb.EchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t2,  // 18: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t2,  // 19: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t4,  // 20: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoPatch:output_type -> grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate\n\t2,  // 21: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoUnauthorized:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage\n\t6,  // 22: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.StatusCheckResponse\n\t17, // [17:23] is the sub-list for method output_type\n\t11, // [11:17] is the sub-list for method input_type\n\t11, // [11:11] is the sub-list for extension type_name\n\t11, // [11:11] is the sub-list for extension extendee\n\t0,  // [0:11] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_echo_service_proto_init() }\nfunc file_examples_internal_proto_examplepb_echo_service_proto_init() {\n\tif File_examples_internal_proto_examplepb_echo_service_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_examplepb_echo_service_proto_msgTypes[0].OneofWrappers = []any{\n\t\t(*Embedded_Progress)(nil),\n\t\t(*Embedded_Note)(nil),\n\t}\n\tfile_examples_internal_proto_examplepb_echo_service_proto_msgTypes[2].OneofWrappers = []any{\n\t\t(*SimpleMessage_LineNum)(nil),\n\t\t(*SimpleMessage_Lang)(nil),\n\t\t(*SimpleMessage_En)(nil),\n\t\t(*SimpleMessage_No)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_echo_service_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   7,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_echo_service_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_echo_service_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_echo_service_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_echo_service_proto = out.File\n\tfile_examples_internal_proto_examplepb_echo_service_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_echo_service_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_echo_service_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/echo_service.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/echo_service.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_EchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_EchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_Echo_1 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0, \"num\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_EchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_Echo_2 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0, \"num\": 1, \"lang\": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}}\n\nfunc request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tval, ok = pathParams[\"lang\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"lang\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &SimpleMessage_Lang{}\n\t} else if _, ok := protoReq.Code.(*SimpleMessage_Lang); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *SimpleMessage_Lang, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*SimpleMessage_Lang).Lang, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"lang\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tval, ok = pathParams[\"lang\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"lang\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &SimpleMessage_Lang{}\n\t} else if _, ok := protoReq.Code.(*SimpleMessage_Lang); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *SimpleMessage_Lang, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*SimpleMessage_Lang).Lang, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"lang\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_Echo_3 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0, \"line_num\": 1, \"status\": 2, \"note\": 3}, Base: []int{1, 1, 2, 1, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 4, 2, 3, 5}}\n\nfunc request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"line_num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"line_num\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &SimpleMessage_LineNum{}\n\t} else if _, ok := protoReq.Code.(*SimpleMessage_LineNum); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *SimpleMessage_LineNum, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*SimpleMessage_LineNum).LineNum, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"line_num\", err)\n\t}\n\tval, ok = pathParams[\"status.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"status.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"status.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"status.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_3); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"line_num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"line_num\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &SimpleMessage_LineNum{}\n\t} else if _, ok := protoReq.Code.(*SimpleMessage_LineNum); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *SimpleMessage_LineNum, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*SimpleMessage_LineNum).LineNum, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"line_num\", err)\n\t}\n\tval, ok = pathParams[\"status.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"status.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"status.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"status.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_3); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_Echo_4 = &utilities.DoubleArray{Encoding: map[string]int{\"no\": 0, \"note\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_EchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"no.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"no.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"no.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"no.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"no.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"no.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"no.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"no.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_Echo_5 = &utilities.DoubleArray{Encoding: map[string]int{\"resource_id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_EchoService_Echo_5(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"resource_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"resource_id\")\n\t}\n\tprotoReq.ResourceId, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"resource_id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_5); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_Echo_5(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"resource_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"resource_id\")\n\t}\n\tprotoReq.ResourceId, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"resource_id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_5); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_Echo_6 = &utilities.DoubleArray{Encoding: map[string]int{\"n_id\": 0}, Base: []int{1, 2, 2, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_EchoService_Echo_6(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"n_id.n_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"n_id.n_id\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"n_id.n_id\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"n_id.n_id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_6); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_Echo_6(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"n_id.n_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"n_id.n_id\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"n_id.n_id\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"n_id.n_id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_6); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_EchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_EchoBody_1 = &utilities.DoubleArray{Encoding: map[string]int{\"no\": 0, \"id\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_EchoService_EchoBody_1(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif protoReq.Ext == nil {\n\t\tprotoReq.Ext = &SimpleMessage_No{}\n\t} else if _, ok := protoReq.Ext.(*SimpleMessage_No); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *SimpleMessage_No, but: %t\\n\", protoReq.Ext)\n\t}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Ext.(*SimpleMessage_No).No); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoBody_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_EchoBody_1(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif protoReq.Ext == nil {\n\t\tprotoReq.Ext = &SimpleMessage_No{}\n\t} else if _, ok := protoReq.Ext.(*SimpleMessage_No); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *SimpleMessage_No, but: %t\\n\", protoReq.Ext)\n\t}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Ext.(*SimpleMessage_No).No); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoBody_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_EchoDelete_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_EchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoDelete_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoDelete_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoDelete(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_EchoPatch_0 = &utilities.DoubleArray{Encoding: map[string]int{\"body\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_EchoService_EchoPatch_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq DynamicMessageUpdate\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoPatch_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoPatch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_EchoPatch_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq DynamicMessageUpdate\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoPatch_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoPatch(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_EchoService_EchoUnauthorized_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_EchoService_EchoUnauthorized_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoUnauthorized_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoUnauthorized(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_EchoUnauthorized_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoUnauthorized_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoUnauthorized(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_EchoService_EchoStatus_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq StatusCheckRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EchoService_EchoStatus_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq StatusCheckRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoStatus(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterEchoServiceHandlerServer registers the http handlers for service EchoService to \"mux\".\n// UnaryRPC     :call EchoServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterEchoServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}/{num}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}/{num}/{lang}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_Echo_2(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo1/{id}/{line_num}/{status.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_Echo_3(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo2/{no.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_Echo_4(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/resource/{resource_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_Echo_5(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/nested/{n_id.n_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_Echo_6(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_EchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v1/example/echo_body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_EchoService_EchoBody_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v1/example/echo_body/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_EchoBody_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoBody_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_EchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/v1/example/echo_delete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_EchoService_EchoPatch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch\", runtime.WithHTTPPathPattern(\"/v1/example/echo_patch\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_EchoPatch_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoPatch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_EchoUnauthorized_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized\", runtime.WithHTTPPathPattern(\"/v1/example/echo_unauthorized\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_EchoUnauthorized_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoUnauthorized_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_EchoService_EchoStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoStatus\", runtime.WithHTTPPathPattern(\"/v1/example/echo_status\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EchoService_EchoStatus_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterEchoServiceHandlerFromEndpoint is same as RegisterEchoServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterEchoServiceHandler(ctx, mux, conn)\n}\n\n// RegisterEchoServiceHandler registers the http handlers for service EchoService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterEchoServiceHandlerClient(ctx, mux, NewEchoServiceClient(conn))\n}\n\n// RegisterEchoServiceHandlerClient registers the http handlers for service EchoService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"EchoServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"EchoServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"EchoServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client EchoServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}/{num}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}/{num}/{lang}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_Echo_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo1/{id}/{line_num}/{status.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_Echo_3(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo2/{no.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_Echo_4(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/resource/{resource_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_Echo_5(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_Echo_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/nested/{n_id.n_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_Echo_6(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_Echo_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_EchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v1/example/echo_body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_EchoService_EchoBody_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v1/example/echo_body/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_EchoBody_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoBody_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_EchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/v1/example/echo_delete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_EchoService_EchoPatch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch\", runtime.WithHTTPPathPattern(\"/v1/example/echo_patch\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_EchoPatch_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoPatch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_EchoService_EchoUnauthorized_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized\", runtime.WithHTTPPathPattern(\"/v1/example/echo_unauthorized\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_EchoUnauthorized_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoUnauthorized_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_EchoService_EchoStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoStatus\", runtime.WithHTTPPathPattern(\"/v1/example/echo_status\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EchoService_EchoStatus_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EchoService_EchoStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_EchoService_Echo_0             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"echo\", \"id\"}, \"\"))\n\tpattern_EchoService_Echo_1             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"echo\", \"id\", \"num\"}, \"\"))\n\tpattern_EchoService_Echo_2             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{\"v1\", \"example\", \"echo\", \"id\", \"num\", \"lang\"}, \"\"))\n\tpattern_EchoService_Echo_3             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{\"v1\", \"example\", \"echo1\", \"id\", \"line_num\", \"status.note\"}, \"\"))\n\tpattern_EchoService_Echo_4             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"echo2\", \"no.note\"}, \"\"))\n\tpattern_EchoService_Echo_5             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"echo\", \"resource\", \"resource_id\"}, \"\"))\n\tpattern_EchoService_Echo_6             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"echo\", \"nested\", \"n_id.n_id\"}, \"\"))\n\tpattern_EchoService_EchoBody_0         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_body\"}, \"\"))\n\tpattern_EchoService_EchoBody_1         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"echo_body\", \"id\"}, \"\"))\n\tpattern_EchoService_EchoDelete_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_delete\"}, \"\"))\n\tpattern_EchoService_EchoPatch_0        = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_patch\"}, \"\"))\n\tpattern_EchoService_EchoUnauthorized_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_unauthorized\"}, \"\"))\n\tpattern_EchoService_EchoStatus_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_status\"}, \"\"))\n)\n\nvar (\n\tforward_EchoService_Echo_0             = runtime.ForwardResponseMessage\n\tforward_EchoService_Echo_1             = runtime.ForwardResponseMessage\n\tforward_EchoService_Echo_2             = runtime.ForwardResponseMessage\n\tforward_EchoService_Echo_3             = runtime.ForwardResponseMessage\n\tforward_EchoService_Echo_4             = runtime.ForwardResponseMessage\n\tforward_EchoService_Echo_5             = runtime.ForwardResponseMessage\n\tforward_EchoService_Echo_6             = runtime.ForwardResponseMessage\n\tforward_EchoService_EchoBody_0         = runtime.ForwardResponseMessage\n\tforward_EchoService_EchoBody_1         = runtime.ForwardResponseMessage\n\tforward_EchoService_EchoDelete_0       = runtime.ForwardResponseMessage\n\tforward_EchoService_EchoPatch_0        = runtime.ForwardResponseMessage\n\tforward_EchoService_EchoUnauthorized_0 = runtime.ForwardResponseMessage\n\tforward_EchoService_EchoStatus_0       = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/echo_service.proto",
    "content": "syntax = \"proto3\";\n\n// Echo Service\n//\n// Echo Service API consists of a single service which returns\n// a message.\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"examples/internal/proto/sub/message.proto\";\nimport \"examples/internal/proto/sub2/message.proto\";\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/field_mask.proto\";\nimport \"google/protobuf/struct.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// Embedded represents a message embedded in SimpleMessage.\nmessage Embedded {\n  oneof mark {\n    int64 progress = 1;\n    string note = 2;\n  }\n}\n\nmessage NestedMessage {\n  string n_id = 1;\n  string val = 2;\n}\n\n// SimpleMessage represents a simple message sent to the Echo service.\nmessage SimpleMessage {\n  // Id represents the message identifier.\n  string id = 1;\n  int64 num = 2;\n  oneof code {\n    int64 line_num = 3;\n    string lang = 4;\n  }\n  Embedded status = 5;\n  oneof ext {\n    int64 en = 6;\n    Embedded no = 7;\n  }\n  string resource_id = 8;\n  NestedMessage n_id = 9;\n}\n\n// DynamicMessage represents a message which can have its structure\n// built dynamically using Struct and Values.\nmessage DynamicMessage {\n  google.protobuf.Struct struct_field = 1;\n  google.protobuf.Value value_field = 2;\n}\n\nmessage DynamicMessageUpdate {\n  DynamicMessage body = 1;\n  google.protobuf.FieldMask update_mask = 2;\n}\n\n// StatusCheckRequest demonstrates name collision handling.\n// It uses Status message from both sub and sub2 packages.\nmessage StatusCheckRequest {\n  string id = 1;\n  // Status from sub package\n  grpc.gateway.examples.internal.proto.sub.Status sub_status = 2;\n  // Status from sub2 package (different type with same name)\n  grpc.gateway.examples.internal.proto.sub2.Status sub2_status = 3;\n}\n\nmessage StatusCheckResponse {\n  string result = 1;\n  // Both Status types used in response\n  grpc.gateway.examples.internal.proto.sub.Status sub_status = 2;\n  grpc.gateway.examples.internal.proto.sub2.Status sub2_status = 3;\n}\n\n// Echo service responds to incoming echo requests.\nservice EchoService {\n  // Echo method receives a simple message and returns it.\n  //\n  // The message posted as the id parameter will also be\n  // returned.\n  rpc Echo(SimpleMessage) returns (SimpleMessage) {\n    option (google.api.http) = {\n      post: \"/v1/example/echo/{id}\"\n      additional_bindings: {get: \"/v1/example/echo/{id}/{num}\"}\n      additional_bindings: {get: \"/v1/example/echo/{id}/{num}/{lang}\"}\n      additional_bindings: {get: \"/v1/example/echo1/{id}/{line_num}/{status.note}\"}\n      additional_bindings: {get: \"/v1/example/echo2/{no.note}\"}\n      additional_bindings: {get: \"/v1/example/echo/resource/{resource_id}\"}\n      additional_bindings: {get: \"/v1/example/echo/nested/{n_id.n_id}\"}\n    };\n  }\n  // EchoBody method receives a simple message and returns it.\n  rpc EchoBody(SimpleMessage) returns (SimpleMessage) {\n    option (google.api.http) = {\n      post: \"/v1/example/echo_body\"\n      body: \"*\"\n      additional_bindings: {\n        put: \"/v1/example/echo_body/{id}\"\n        body: \"no\"\n      }\n    };\n  }\n  // EchoDelete method receives a simple message and returns it.\n  rpc EchoDelete(SimpleMessage) returns (SimpleMessage) {\n    option (google.api.http) = {delete: \"/v1/example/echo_delete\"};\n  }\n  // EchoPatch method receives a NonStandardUpdateRequest and returns it.\n  rpc EchoPatch(DynamicMessageUpdate) returns (DynamicMessageUpdate) {\n    option (google.api.http) = {\n      patch: \"/v1/example/echo_patch\"\n      body: \"body\"\n    };\n  }\n  // EchoUnauthorized method receives a simple message and returns it. It must\n  // always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code\n  // of 401.\n  rpc EchoUnauthorized(SimpleMessage) returns (SimpleMessage) {\n    option (google.api.http) = {get: \"/v1/example/echo_unauthorized\"};\n  }\n  // EchoStatus demonstrates handling of name collisions.\n  // It uses Status types from both sub and sub2 packages which have the same name\n  // but different structures, demonstrating how the OpenAPI generator handles this scenario.\n  rpc EchoStatus(StatusCheckRequest) returns (StatusCheckResponse) {\n    option (google.api.http) = {\n      post: \"/v1/example/echo_status\"\n      body: \"*\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/echo_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"Echo Service\",\n    \"description\": \"Echo Service API consists of a single service which returns\\na message.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"EchoService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/echo/nested/{nId.nId}\": {\n      \"get\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"EchoService_Echo7\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo/resource/{resourceId}\": {\n      \"get\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"EchoService_Echo6\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"EchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo/{id}/{num}\": {\n      \"get\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"EchoService_Echo2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo/{id}/{num}/{lang}\": {\n      \"get\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"EchoService_Echo3\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo1/{id}/{lineNum}/{status.note}\": {\n      \"get\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"EchoService_Echo4\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo2/{no.note}\": {\n      \"get\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"EchoService_Echo5\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"no.note\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_body\": {\n      \"post\": {\n        \"summary\": \"EchoBody method receives a simple message and returns it.\",\n        \"operationId\": \"EchoService_EchoBody\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"SimpleMessage represents a simple message sent to the Echo service.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_body/{id}\": {\n      \"put\": {\n        \"summary\": \"EchoBody method receives a simple message and returns it.\",\n        \"operationId\": \"EchoService_EchoBody2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmbedded\"\n            }\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_delete\": {\n      \"delete\": {\n        \"summary\": \"EchoDelete method receives a simple message and returns it.\",\n        \"operationId\": \"EchoService_EchoDelete\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_patch\": {\n      \"patch\": {\n        \"summary\": \"EchoPatch method receives a NonStandardUpdateRequest and returns it.\",\n        \"operationId\": \"EchoService_EchoPatch\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbDynamicMessageUpdate\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbDynamicMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_status\": {\n      \"post\": {\n        \"summary\": \"EchoStatus demonstrates handling of name collisions.\\nIt uses Status types from both sub and sub2 packages which have the same name\\nbut different structures, demonstrating how the OpenAPI generator handles this scenario.\",\n        \"operationId\": \"EchoService_EchoStatus\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbStatusCheckResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"StatusCheckRequest demonstrates name collision handling.\\nIt uses Status message from both sub and sub2 packages.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbStatusCheckRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_unauthorized\": {\n      \"get\": {\n        \"summary\": \"EchoUnauthorized method receives a simple message and returns it. It must\\nalways return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code\\nof 401.\",\n        \"operationId\": \"EchoService_EchoUnauthorized\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"EchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbDynamicMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"structField\": {\n          \"type\": \"object\"\n        },\n        \"valueField\": {}\n      },\n      \"description\": \"DynamicMessage represents a message which can have its structure\\nbuilt dynamically using Struct and Values.\"\n    },\n    \"examplepbDynamicMessageUpdate\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"body\": {\n          \"$ref\": \"#/definitions/examplepbDynamicMessage\"\n        },\n        \"updateMask\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"examplepbEmbedded\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"progress\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"note\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Embedded represents a message embedded in SimpleMessage.\"\n    },\n    \"examplepbNestedMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"nId\": {\n          \"type\": \"string\"\n        },\n        \"val\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"examplepbSimpleMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lang\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/examplepbEmbedded\"\n        },\n        \"en\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"$ref\": \"#/definitions/examplepbEmbedded\"\n        },\n        \"resourceId\": {\n          \"type\": \"string\"\n        },\n        \"nId\": {\n          \"$ref\": \"#/definitions/examplepbNestedMessage\"\n        }\n      },\n      \"description\": \"SimpleMessage represents a simple message sent to the Echo service.\"\n    },\n    \"examplepbStatusCheckRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        },\n        \"subStatus\": {\n          \"$ref\": \"#/definitions/protoSubStatus\",\n          \"title\": \"Status from sub package\"\n        },\n        \"sub2Status\": {\n          \"$ref\": \"#/definitions/protoSub2Status\",\n          \"title\": \"Status from sub2 package (different type with same name)\"\n        }\n      },\n      \"description\": \"StatusCheckRequest demonstrates name collision handling.\\nIt uses Status message from both sub and sub2 packages.\"\n    },\n    \"examplepbStatusCheckResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"result\": {\n          \"type\": \"string\"\n        },\n        \"subStatus\": {\n          \"$ref\": \"#/definitions/protoSubStatus\",\n          \"title\": \"Both Status types used in response\"\n        },\n        \"sub2Status\": {\n          \"$ref\": \"#/definitions/protoSub2Status\"\n        }\n      }\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protoSub2Status\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"errorCode\": {\n          \"type\": \"string\"\n        },\n        \"errorMessage\": {\n          \"type\": \"string\"\n        },\n        \"severity\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      },\n      \"title\": \"Status message in sub2 package (different structure from sub.Status)\"\n    },\n    \"protoSubStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        }\n      },\n      \"title\": \"Status message in sub package\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"protobufNullValue\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"NULL_VALUE\"\n      ],\n      \"default\": \"NULL_VALUE\",\n      \"description\": \"`NullValue` is a singleton enumeration to represent the null value for the\\n`Value` type union.\\n\\nThe JSON representation for `NullValue` is JSON `null`.\\n\\n - NULL_VALUE: Null value.\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/echo_service_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/echo_service.proto\n\n// Echo Service\n//\n// Echo Service API consists of a single service which returns\n// a message.\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tEchoService_Echo_FullMethodName             = \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo\"\n\tEchoService_EchoBody_FullMethodName         = \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody\"\n\tEchoService_EchoDelete_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete\"\n\tEchoService_EchoPatch_FullMethodName        = \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch\"\n\tEchoService_EchoUnauthorized_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized\"\n\tEchoService_EchoStatus_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoStatus\"\n)\n\n// EchoServiceClient is the client API for EchoService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// Echo service responds to incoming echo requests.\ntype EchoServiceClient interface {\n\t// Echo method receives a simple message and returns it.\n\t//\n\t// The message posted as the id parameter will also be\n\t// returned.\n\tEcho(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error)\n\t// EchoBody method receives a simple message and returns it.\n\tEchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error)\n\t// EchoDelete method receives a simple message and returns it.\n\tEchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error)\n\t// EchoPatch method receives a NonStandardUpdateRequest and returns it.\n\tEchoPatch(ctx context.Context, in *DynamicMessageUpdate, opts ...grpc.CallOption) (*DynamicMessageUpdate, error)\n\t// EchoUnauthorized method receives a simple message and returns it. It must\n\t// always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code\n\t// of 401.\n\tEchoUnauthorized(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error)\n\t// EchoStatus demonstrates handling of name collisions.\n\t// It uses Status types from both sub and sub2 packages which have the same name\n\t// but different structures, demonstrating how the OpenAPI generator handles this scenario.\n\tEchoStatus(ctx context.Context, in *StatusCheckRequest, opts ...grpc.CallOption) (*StatusCheckResponse, error)\n}\n\ntype echoServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewEchoServiceClient(cc grpc.ClientConnInterface) EchoServiceClient {\n\treturn &echoServiceClient{cc}\n}\n\nfunc (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(SimpleMessage)\n\terr := c.cc.Invoke(ctx, EchoService_Echo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(SimpleMessage)\n\terr := c.cc.Invoke(ctx, EchoService_EchoBody_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(SimpleMessage)\n\terr := c.cc.Invoke(ctx, EchoService_EchoDelete_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *echoServiceClient) EchoPatch(ctx context.Context, in *DynamicMessageUpdate, opts ...grpc.CallOption) (*DynamicMessageUpdate, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(DynamicMessageUpdate)\n\terr := c.cc.Invoke(ctx, EchoService_EchoPatch_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *echoServiceClient) EchoUnauthorized(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(SimpleMessage)\n\terr := c.cc.Invoke(ctx, EchoService_EchoUnauthorized_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *echoServiceClient) EchoStatus(ctx context.Context, in *StatusCheckRequest, opts ...grpc.CallOption) (*StatusCheckResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(StatusCheckResponse)\n\terr := c.cc.Invoke(ctx, EchoService_EchoStatus_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// EchoServiceServer is the server API for EchoService service.\n// All implementations should embed UnimplementedEchoServiceServer\n// for forward compatibility.\n//\n// Echo service responds to incoming echo requests.\ntype EchoServiceServer interface {\n\t// Echo method receives a simple message and returns it.\n\t//\n\t// The message posted as the id parameter will also be\n\t// returned.\n\tEcho(context.Context, *SimpleMessage) (*SimpleMessage, error)\n\t// EchoBody method receives a simple message and returns it.\n\tEchoBody(context.Context, *SimpleMessage) (*SimpleMessage, error)\n\t// EchoDelete method receives a simple message and returns it.\n\tEchoDelete(context.Context, *SimpleMessage) (*SimpleMessage, error)\n\t// EchoPatch method receives a NonStandardUpdateRequest and returns it.\n\tEchoPatch(context.Context, *DynamicMessageUpdate) (*DynamicMessageUpdate, error)\n\t// EchoUnauthorized method receives a simple message and returns it. It must\n\t// always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code\n\t// of 401.\n\tEchoUnauthorized(context.Context, *SimpleMessage) (*SimpleMessage, error)\n\t// EchoStatus demonstrates handling of name collisions.\n\t// It uses Status types from both sub and sub2 packages which have the same name\n\t// but different structures, demonstrating how the OpenAPI generator handles this scenario.\n\tEchoStatus(context.Context, *StatusCheckRequest) (*StatusCheckResponse, error)\n}\n\n// UnimplementedEchoServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedEchoServiceServer struct{}\n\nfunc (UnimplementedEchoServiceServer) Echo(context.Context, *SimpleMessage) (*SimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Echo not implemented\")\n}\nfunc (UnimplementedEchoServiceServer) EchoBody(context.Context, *SimpleMessage) (*SimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoBody not implemented\")\n}\nfunc (UnimplementedEchoServiceServer) EchoDelete(context.Context, *SimpleMessage) (*SimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoDelete not implemented\")\n}\nfunc (UnimplementedEchoServiceServer) EchoPatch(context.Context, *DynamicMessageUpdate) (*DynamicMessageUpdate, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoPatch not implemented\")\n}\nfunc (UnimplementedEchoServiceServer) EchoUnauthorized(context.Context, *SimpleMessage) (*SimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoUnauthorized not implemented\")\n}\nfunc (UnimplementedEchoServiceServer) EchoStatus(context.Context, *StatusCheckRequest) (*StatusCheckResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoStatus not implemented\")\n}\nfunc (UnimplementedEchoServiceServer) testEmbeddedByValue() {}\n\n// UnsafeEchoServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to EchoServiceServer will\n// result in compilation errors.\ntype UnsafeEchoServiceServer interface {\n\tmustEmbedUnimplementedEchoServiceServer()\n}\n\nfunc RegisterEchoServiceServer(s grpc.ServiceRegistrar, srv EchoServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedEchoServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&EchoService_ServiceDesc, srv)\n}\n\nfunc _EchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(SimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(EchoServiceServer).Echo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: EchoService_Echo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(EchoServiceServer).Echo(ctx, req.(*SimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _EchoService_EchoBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(SimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(EchoServiceServer).EchoBody(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: EchoService_EchoBody_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(EchoServiceServer).EchoBody(ctx, req.(*SimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _EchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(SimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(EchoServiceServer).EchoDelete(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: EchoService_EchoDelete_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(EchoServiceServer).EchoDelete(ctx, req.(*SimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _EchoService_EchoPatch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(DynamicMessageUpdate)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(EchoServiceServer).EchoPatch(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: EchoService_EchoPatch_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(EchoServiceServer).EchoPatch(ctx, req.(*DynamicMessageUpdate))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _EchoService_EchoUnauthorized_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(SimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(EchoServiceServer).EchoUnauthorized(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: EchoService_EchoUnauthorized_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(EchoServiceServer).EchoUnauthorized(ctx, req.(*SimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _EchoService_EchoStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(StatusCheckRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(EchoServiceServer).EchoStatus(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: EchoService_EchoStatus_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(EchoServiceServer).EchoStatus(ctx, req.(*StatusCheckRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// EchoService_ServiceDesc is the grpc.ServiceDesc for EchoService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar EchoService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.EchoService\",\n\tHandlerType: (*EchoServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Echo\",\n\t\t\tHandler:    _EchoService_Echo_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoBody\",\n\t\t\tHandler:    _EchoService_EchoBody_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoDelete\",\n\t\t\tHandler:    _EchoService_EchoDelete_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoPatch\",\n\t\t\tHandler:    _EchoService_EchoPatch_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoUnauthorized\",\n\t\t\tHandler:    _EchoService_EchoUnauthorized_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoStatus\",\n\t\t\tHandler:    _EchoService_EchoStatus_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/echo_service.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/enum_with_single_value.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - omit_enum_default_value=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/enum_with_single_value.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/enum_with_single_value.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// EnumWithSingleValue is an enum with a single value. Since it has just a single value\n// the `enum` field should be omitted in the generated OpenAPI spec for the type when\n// the omit_enum_default_value option is set to true.\ntype EnumWithSingleValue int32\n\nconst (\n\tEnumWithSingleValue_ENUM_WITH_SINGLE_VALUE_UNSPECIFIED EnumWithSingleValue = 0\n)\n\n// Enum value maps for EnumWithSingleValue.\nvar (\n\tEnumWithSingleValue_name = map[int32]string{\n\t\t0: \"ENUM_WITH_SINGLE_VALUE_UNSPECIFIED\",\n\t}\n\tEnumWithSingleValue_value = map[string]int32{\n\t\t\"ENUM_WITH_SINGLE_VALUE_UNSPECIFIED\": 0,\n\t}\n)\n\nfunc (x EnumWithSingleValue) Enum() *EnumWithSingleValue {\n\tp := new(EnumWithSingleValue)\n\t*p = x\n\treturn p\n}\n\nfunc (x EnumWithSingleValue) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (EnumWithSingleValue) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_enum_with_single_value_proto_enumTypes[0].Descriptor()\n}\n\nfunc (EnumWithSingleValue) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_enum_with_single_value_proto_enumTypes[0]\n}\n\nfunc (x EnumWithSingleValue) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use EnumWithSingleValue.Descriptor instead.\nfunc (EnumWithSingleValue) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescGZIP(), []int{0}\n}\n\ntype EnumWithSingleValueServiceEchoRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tValue EnumWithSingleValue `protobuf:\"varint,1,opt,name=value,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValue\" json:\"value,omitempty\"`\n}\n\nfunc (x *EnumWithSingleValueServiceEchoRequest) Reset() {\n\t*x = EnumWithSingleValueServiceEchoRequest{}\n\tmi := &file_examples_internal_proto_examplepb_enum_with_single_value_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *EnumWithSingleValueServiceEchoRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*EnumWithSingleValueServiceEchoRequest) ProtoMessage() {}\n\nfunc (x *EnumWithSingleValueServiceEchoRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_enum_with_single_value_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use EnumWithSingleValueServiceEchoRequest.ProtoReflect.Descriptor instead.\nfunc (*EnumWithSingleValueServiceEchoRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *EnumWithSingleValueServiceEchoRequest) GetValue() EnumWithSingleValue {\n\tif x != nil {\n\t\treturn x.Value\n\t}\n\treturn EnumWithSingleValue_ENUM_WITH_SINGLE_VALUE_UNSPECIFIED\n}\n\ntype EnumWithSingleValueServiceEchoResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n}\n\nfunc (x *EnumWithSingleValueServiceEchoResponse) Reset() {\n\t*x = EnumWithSingleValueServiceEchoResponse{}\n\tmi := &file_examples_internal_proto_examplepb_enum_with_single_value_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *EnumWithSingleValueServiceEchoResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*EnumWithSingleValueServiceEchoResponse) ProtoMessage() {}\n\nfunc (x *EnumWithSingleValueServiceEchoResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_enum_with_single_value_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use EnumWithSingleValueServiceEchoResponse.ProtoReflect.Descriptor instead.\nfunc (*EnumWithSingleValueServiceEchoResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescGZIP(), []int{1}\n}\n\nvar File_examples_internal_proto_examplepb_enum_with_single_value_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDesc = []byte{\n\t0x0a, 0x3e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x69,\n\t0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e,\n\t0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82,\n\t0x01, 0x0a, 0x25, 0x45, 0x6e, 0x75, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c,\n\t0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x68,\n\t0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x59, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x57, 0x69, 0x74,\n\t0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x22, 0x28, 0x0a, 0x26, 0x45, 0x6e, 0x75, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x53,\n\t0x69, 0x6e, 0x67, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,\n\t0x65, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x3d, 0x0a,\n\t0x13, 0x45, 0x6e, 0x75, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x12, 0x26, 0x0a, 0x22, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x57, 0x49, 0x54,\n\t0x48, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x55,\n\t0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x32, 0x88, 0x02, 0x0a,\n\t0x1a, 0x45, 0x6e, 0x75, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe9, 0x01, 0x0a, 0x04,\n\t0x45, 0x63, 0x68, 0x6f, 0x12, 0x55, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69,\n\t0x6e, 0x67, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,\n\t0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x56, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75,\n\t0x6d, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,\n\t0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27,\n\t0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6e, 0x75, 0x6d,\n\t0x2d, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75,\n\t0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79,\n\t0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescData = file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_enum_with_single_value_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\nvar file_examples_internal_proto_examplepb_enum_with_single_value_proto_msgTypes = make([]protoimpl.MessageInfo, 2)\nvar file_examples_internal_proto_examplepb_enum_with_single_value_proto_goTypes = []any{\n\t(EnumWithSingleValue)(0),                       // 0: grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValue\n\t(*EnumWithSingleValueServiceEchoRequest)(nil),  // 1: grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueServiceEchoRequest\n\t(*EnumWithSingleValueServiceEchoResponse)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueServiceEchoResponse\n}\nvar file_examples_internal_proto_examplepb_enum_with_single_value_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueServiceEchoRequest.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValue\n\t1, // 1: grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueServiceEchoRequest\n\t2, // 2: grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueServiceEchoResponse\n\t2, // [2:3] is the sub-list for method output_type\n\t1, // [1:2] is the sub-list for method input_type\n\t1, // [1:1] is the sub-list for extension type_name\n\t1, // [1:1] is the sub-list for extension extendee\n\t0, // [0:1] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_enum_with_single_value_proto_init() }\nfunc file_examples_internal_proto_examplepb_enum_with_single_value_proto_init() {\n\tif File_examples_internal_proto_examplepb_enum_with_single_value_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDesc,\n\t\t\tNumEnums:      1,\n\t\t\tNumMessages:   2,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_enum_with_single_value_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_enum_with_single_value_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_examplepb_enum_with_single_value_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_enum_with_single_value_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_enum_with_single_value_proto = out.File\n\tfile_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_enum_with_single_value_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_enum_with_single_value_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/enum_with_single_value.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/enum_with_single_value.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_EnumWithSingleValueService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client EnumWithSingleValueServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq EnumWithSingleValueServiceEchoRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_EnumWithSingleValueService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server EnumWithSingleValueServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq EnumWithSingleValueServiceEchoRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterEnumWithSingleValueServiceHandlerServer registers the http handlers for service EnumWithSingleValueService to \"mux\".\n// UnaryRPC     :call EnumWithSingleValueServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterEnumWithSingleValueServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterEnumWithSingleValueServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EnumWithSingleValueServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_EnumWithSingleValueService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/enum-with-single-value/echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_EnumWithSingleValueService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EnumWithSingleValueService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterEnumWithSingleValueServiceHandlerFromEndpoint is same as RegisterEnumWithSingleValueServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterEnumWithSingleValueServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterEnumWithSingleValueServiceHandler(ctx, mux, conn)\n}\n\n// RegisterEnumWithSingleValueServiceHandler registers the http handlers for service EnumWithSingleValueService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterEnumWithSingleValueServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterEnumWithSingleValueServiceHandlerClient(ctx, mux, NewEnumWithSingleValueServiceClient(conn))\n}\n\n// RegisterEnumWithSingleValueServiceHandlerClient registers the http handlers for service EnumWithSingleValueService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"EnumWithSingleValueServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"EnumWithSingleValueServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"EnumWithSingleValueServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterEnumWithSingleValueServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client EnumWithSingleValueServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_EnumWithSingleValueService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/enum-with-single-value/echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_EnumWithSingleValueService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_EnumWithSingleValueService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_EnumWithSingleValueService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"enum-with-single-value\", \"echo\"}, \"\"))\n)\n\nvar (\n\tforward_EnumWithSingleValueService_Echo_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/enum_with_single_value.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\nservice EnumWithSingleValueService {\n  rpc Echo(EnumWithSingleValueServiceEchoRequest) returns (EnumWithSingleValueServiceEchoResponse) {\n    option (google.api.http) = {\n      post: \"/v1/example/enum-with-single-value/echo\"\n      body: \"*\"\n    };\n  }\n}\n\n// EnumWithSingleValue is an enum with a single value. Since it has just a single value\n// the `enum` field should be omitted in the generated OpenAPI spec for the type when\n// the omit_enum_default_value option is set to true.\nenum EnumWithSingleValue {\n  ENUM_WITH_SINGLE_VALUE_UNSPECIFIED = 0;\n}\n\nmessage EnumWithSingleValueServiceEchoRequest {\n  EnumWithSingleValue value = 1;\n}\n\nmessage EnumWithSingleValueServiceEchoResponse {}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/enum_with_single_value.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/enum_with_single_value.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"EnumWithSingleValueService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/enum-with-single-value/echo\": {\n      \"post\": {\n        \"operationId\": \"EnumWithSingleValueService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEnumWithSingleValueServiceEchoResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEnumWithSingleValueServiceEchoRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"EnumWithSingleValueService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbEnumWithSingleValue\": {\n      \"type\": \"string\",\n      \"description\": \"EnumWithSingleValue is an enum with a single value. Since it has just a single value\\nthe `enum` field should be omitted in the generated OpenAPI spec for the type when\\nthe omit_enum_default_value option is set to true.\"\n    },\n    \"examplepbEnumWithSingleValueServiceEchoRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"$ref\": \"#/definitions/examplepbEnumWithSingleValue\"\n        }\n      }\n    },\n    \"examplepbEnumWithSingleValueServiceEchoResponse\": {\n      \"type\": \"object\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/enum_with_single_value_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/enum_with_single_value.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tEnumWithSingleValueService_Echo_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueService/Echo\"\n)\n\n// EnumWithSingleValueServiceClient is the client API for EnumWithSingleValueService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype EnumWithSingleValueServiceClient interface {\n\tEcho(ctx context.Context, in *EnumWithSingleValueServiceEchoRequest, opts ...grpc.CallOption) (*EnumWithSingleValueServiceEchoResponse, error)\n}\n\ntype enumWithSingleValueServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewEnumWithSingleValueServiceClient(cc grpc.ClientConnInterface) EnumWithSingleValueServiceClient {\n\treturn &enumWithSingleValueServiceClient{cc}\n}\n\nfunc (c *enumWithSingleValueServiceClient) Echo(ctx context.Context, in *EnumWithSingleValueServiceEchoRequest, opts ...grpc.CallOption) (*EnumWithSingleValueServiceEchoResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(EnumWithSingleValueServiceEchoResponse)\n\terr := c.cc.Invoke(ctx, EnumWithSingleValueService_Echo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// EnumWithSingleValueServiceServer is the server API for EnumWithSingleValueService service.\n// All implementations should embed UnimplementedEnumWithSingleValueServiceServer\n// for forward compatibility.\ntype EnumWithSingleValueServiceServer interface {\n\tEcho(context.Context, *EnumWithSingleValueServiceEchoRequest) (*EnumWithSingleValueServiceEchoResponse, error)\n}\n\n// UnimplementedEnumWithSingleValueServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedEnumWithSingleValueServiceServer struct{}\n\nfunc (UnimplementedEnumWithSingleValueServiceServer) Echo(context.Context, *EnumWithSingleValueServiceEchoRequest) (*EnumWithSingleValueServiceEchoResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Echo not implemented\")\n}\nfunc (UnimplementedEnumWithSingleValueServiceServer) testEmbeddedByValue() {}\n\n// UnsafeEnumWithSingleValueServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to EnumWithSingleValueServiceServer will\n// result in compilation errors.\ntype UnsafeEnumWithSingleValueServiceServer interface {\n\tmustEmbedUnimplementedEnumWithSingleValueServiceServer()\n}\n\nfunc RegisterEnumWithSingleValueServiceServer(s grpc.ServiceRegistrar, srv EnumWithSingleValueServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedEnumWithSingleValueServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&EnumWithSingleValueService_ServiceDesc, srv)\n}\n\nfunc _EnumWithSingleValueService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(EnumWithSingleValueServiceEchoRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(EnumWithSingleValueServiceServer).Echo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: EnumWithSingleValueService_Echo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(EnumWithSingleValueServiceServer).Echo(ctx, req.(*EnumWithSingleValueServiceEchoRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// EnumWithSingleValueService_ServiceDesc is the grpc.ServiceDesc for EnumWithSingleValueService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar EnumWithSingleValueService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.EnumWithSingleValueService\",\n\tHandlerType: (*EnumWithSingleValueServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Echo\",\n\t\t\tHandler:    _EnumWithSingleValueService_Echo_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/enum_with_single_value.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/excess_body.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/excess_body.proto\n\n// Excess Body Service\n// Used to test server context cancellation with Unary and ServerStream methods\n// when client sends more data than expected.\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n\treflect \"reflect\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\nvar File_examples_internal_proto_examplepb_excess_body_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_excess_body_proto_rawDesc = []byte{\n\t0x0a, 0x33, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,\n\t0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x32, 0xb9, 0x03, 0x0a, 0x11, 0x45, 0x78, 0x63, 0x65, 0x73, 0x73, 0x42, 0x6f, 0x64, 0x79, 0x53,\n\t0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x09, 0x4e, 0x6f, 0x42, 0x6f, 0x64, 0x79,\n\t0x52, 0x70, 0x63, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,\n\t0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x14, 0x2f, 0x72, 0x70,\n\t0x63, 0x2f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x2d, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70,\n\t0x63, 0x12, 0x67, 0x0a, 0x12, 0x4e, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x65, 0x72, 0x76, 0x65,\n\t0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,\n\t0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22,\n\t0x17, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x2d, 0x62, 0x6f, 0x64,\n\t0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x0b, 0x57, 0x69,\n\t0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x70, 0x63, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,\n\t0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02,\n\t0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x78, 0x63, 0x65, 0x73,\n\t0x73, 0x2d, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x2d,\n\t0x62, 0x6f, 0x64, 0x79, 0x12, 0x76, 0x0a, 0x14, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79,\n\t0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,\n\t0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82, 0xd3,\n\t0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x78,\n\t0x63, 0x65, 0x73, 0x73, 0x2d, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d,\n\t0x2f, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x62, 0x6f, 0x64, 0x79, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b,\n\t0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d,\n\t0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x33,\n}\n\nvar file_examples_internal_proto_examplepb_excess_body_proto_goTypes = []any{\n\t(*emptypb.Empty)(nil), // 0: google.protobuf.Empty\n}\nvar file_examples_internal_proto_examplepb_excess_body_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.NoBodyRpc:input_type -> google.protobuf.Empty\n\t0, // 1: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.NoBodyServerStream:input_type -> google.protobuf.Empty\n\t0, // 2: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.WithBodyRpc:input_type -> google.protobuf.Empty\n\t0, // 3: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.WithBodyServerStream:input_type -> google.protobuf.Empty\n\t0, // 4: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.NoBodyRpc:output_type -> google.protobuf.Empty\n\t0, // 5: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.NoBodyServerStream:output_type -> google.protobuf.Empty\n\t0, // 6: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.WithBodyRpc:output_type -> google.protobuf.Empty\n\t0, // 7: grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService.WithBodyServerStream:output_type -> google.protobuf.Empty\n\t4, // [4:8] is the sub-list for method output_type\n\t0, // [0:4] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_excess_body_proto_init() }\nfunc file_examples_internal_proto_examplepb_excess_body_proto_init() {\n\tif File_examples_internal_proto_examplepb_excess_body_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_excess_body_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   0,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_excess_body_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_excess_body_proto_depIdxs,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_excess_body_proto = out.File\n\tfile_examples_internal_proto_examplepb_excess_body_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_excess_body_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_excess_body_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/excess_body.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/excess_body.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_ExcessBodyService_NoBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client ExcessBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.NoBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ExcessBodyService_NoBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, server ExcessBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tmsg, err := server.NoBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ExcessBodyService_NoBodyServerStream_0(ctx context.Context, marshaler runtime.Marshaler, client ExcessBodyServiceClient, req *http.Request, pathParams map[string]string) (ExcessBodyService_NoBodyServerStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tstream, err := client.NoBodyServerStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_ExcessBodyService_WithBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client ExcessBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.WithBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ExcessBodyService_WithBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, server ExcessBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.WithBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ExcessBodyService_WithBodyServerStream_0(ctx context.Context, marshaler runtime.Marshaler, client ExcessBodyServiceClient, req *http.Request, pathParams map[string]string) (ExcessBodyService_WithBodyServerStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tstream, err := client.WithBodyServerStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\n// RegisterExcessBodyServiceHandlerServer registers the http handlers for service ExcessBodyService to \"mux\".\n// UnaryRPC     :call ExcessBodyServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterExcessBodyServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterExcessBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ExcessBodyServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_NoBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/NoBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/excess-body/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ExcessBodyService_NoBodyRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ExcessBodyService_NoBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_NoBodyServerStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_WithBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/WithBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/excess-body/rpc/with-body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ExcessBodyService_WithBodyRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ExcessBodyService_WithBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_WithBodyServerStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\treturn nil\n}\n\n// RegisterExcessBodyServiceHandlerFromEndpoint is same as RegisterExcessBodyServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterExcessBodyServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterExcessBodyServiceHandler(ctx, mux, conn)\n}\n\n// RegisterExcessBodyServiceHandler registers the http handlers for service ExcessBodyService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterExcessBodyServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterExcessBodyServiceHandlerClient(ctx, mux, NewExcessBodyServiceClient(conn))\n}\n\n// RegisterExcessBodyServiceHandlerClient registers the http handlers for service ExcessBodyService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"ExcessBodyServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"ExcessBodyServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"ExcessBodyServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterExcessBodyServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ExcessBodyServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_NoBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/NoBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/excess-body/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ExcessBodyService_NoBodyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ExcessBodyService_NoBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_NoBodyServerStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/NoBodyServerStream\", runtime.WithHTTPPathPattern(\"/rpc/excess-body/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ExcessBodyService_NoBodyServerStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ExcessBodyService_NoBodyServerStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_WithBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/WithBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/excess-body/rpc/with-body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ExcessBodyService_WithBodyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ExcessBodyService_WithBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ExcessBodyService_WithBodyServerStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/WithBodyServerStream\", runtime.WithHTTPPathPattern(\"/rpc/excess-body/stream/with-body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ExcessBodyService_WithBodyServerStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ExcessBodyService_WithBodyServerStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_ExcessBodyService_NoBodyRpc_0            = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{\"rpc\", \"excess-body\"}, \"\"))\n\tpattern_ExcessBodyService_NoBodyServerStream_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"rpc\", \"excess-body\", \"stream\"}, \"\"))\n\tpattern_ExcessBodyService_WithBodyRpc_0          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0, 2, 2}, []string{\"rpc\", \"excess-body\", \"with-body\"}, \"\"))\n\tpattern_ExcessBodyService_WithBodyServerStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"rpc\", \"excess-body\", \"stream\", \"with-body\"}, \"\"))\n)\n\nvar (\n\tforward_ExcessBodyService_NoBodyRpc_0            = runtime.ForwardResponseMessage\n\tforward_ExcessBodyService_NoBodyServerStream_0   = runtime.ForwardResponseStream\n\tforward_ExcessBodyService_WithBodyRpc_0          = runtime.ForwardResponseMessage\n\tforward_ExcessBodyService_WithBodyServerStream_0 = runtime.ForwardResponseStream\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/excess_body.proto",
    "content": "syntax = \"proto3\";\n\n// Excess Body Service\n// Used to test server context cancellation with Unary and ServerStream methods\n// when client sends more data than expected.\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/empty.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\nservice ExcessBodyService {\n  rpc NoBodyRpc(google.protobuf.Empty) returns (google.protobuf.Empty) {\n    option (google.api.http) = {post: \"/rpc/excess-body/rpc\"};\n  }\n  rpc NoBodyServerStream(google.protobuf.Empty) returns (stream google.protobuf.Empty) {\n    option (google.api.http) = {post: \"/rpc/excess-body/stream\"};\n  }\n  rpc WithBodyRpc(google.protobuf.Empty) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/rpc/excess-body/rpc/with-body\"\n      body: \"*\"\n    };\n  }\n  rpc WithBodyServerStream(google.protobuf.Empty) returns (stream google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/rpc/excess-body/stream/with-body\"\n      body: \"*\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/excess_body.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/excess_body.proto\",\n    \"description\": \"Excess Body Service\\nUsed to test server context cancellation with Unary and ServerStream methods\\nwhen client sends more data than expected.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"ExcessBodyService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/rpc/excess-body/rpc\": {\n      \"post\": {\n        \"operationId\": \"ExcessBodyService_NoBodyRpc\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"ExcessBodyService\"\n        ]\n      }\n    },\n    \"/rpc/excess-body/rpc/with-body\": {\n      \"post\": {\n        \"operationId\": \"ExcessBodyService_WithBodyRpc\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          }\n        ],\n        \"tags\": [\n          \"ExcessBodyService\"\n        ]\n      }\n    },\n    \"/rpc/excess-body/stream\": {\n      \"post\": {\n        \"operationId\": \"ExcessBodyService_NoBodyServerStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {},\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of googleProtobufEmpty\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"ExcessBodyService\"\n        ]\n      }\n    },\n    \"/rpc/excess-body/stream/with-body\": {\n      \"post\": {\n        \"operationId\": \"ExcessBodyService_WithBodyServerStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {},\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of googleProtobufEmpty\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          }\n        ],\n        \"tags\": [\n          \"ExcessBodyService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/excess_body_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/excess_body.proto\n\n// Excess Body Service\n// Used to test server context cancellation with Unary and ServerStream methods\n// when client sends more data than expected.\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tExcessBodyService_NoBodyRpc_FullMethodName            = \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/NoBodyRpc\"\n\tExcessBodyService_NoBodyServerStream_FullMethodName   = \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/NoBodyServerStream\"\n\tExcessBodyService_WithBodyRpc_FullMethodName          = \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/WithBodyRpc\"\n\tExcessBodyService_WithBodyServerStream_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService/WithBodyServerStream\"\n)\n\n// ExcessBodyServiceClient is the client API for ExcessBodyService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype ExcessBodyServiceClient interface {\n\tNoBodyRpc(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tNoBodyServerStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (grpc.ServerStreamingClient[emptypb.Empty], error)\n\tWithBodyRpc(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)\n\tWithBodyServerStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (grpc.ServerStreamingClient[emptypb.Empty], error)\n}\n\ntype excessBodyServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewExcessBodyServiceClient(cc grpc.ClientConnInterface) ExcessBodyServiceClient {\n\treturn &excessBodyServiceClient{cc}\n}\n\nfunc (c *excessBodyServiceClient) NoBodyRpc(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ExcessBodyService_NoBodyRpc_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *excessBodyServiceClient) NoBodyServerStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (grpc.ServerStreamingClient[emptypb.Empty], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &ExcessBodyService_ServiceDesc.Streams[0], ExcessBodyService_NoBodyServerStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[emptypb.Empty, emptypb.Empty]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype ExcessBodyService_NoBodyServerStreamClient = grpc.ServerStreamingClient[emptypb.Empty]\n\nfunc (c *excessBodyServiceClient) WithBodyRpc(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, ExcessBodyService_WithBodyRpc_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *excessBodyServiceClient) WithBodyServerStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (grpc.ServerStreamingClient[emptypb.Empty], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &ExcessBodyService_ServiceDesc.Streams[1], ExcessBodyService_WithBodyServerStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[emptypb.Empty, emptypb.Empty]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype ExcessBodyService_WithBodyServerStreamClient = grpc.ServerStreamingClient[emptypb.Empty]\n\n// ExcessBodyServiceServer is the server API for ExcessBodyService service.\n// All implementations should embed UnimplementedExcessBodyServiceServer\n// for forward compatibility.\ntype ExcessBodyServiceServer interface {\n\tNoBodyRpc(context.Context, *emptypb.Empty) (*emptypb.Empty, error)\n\tNoBodyServerStream(*emptypb.Empty, grpc.ServerStreamingServer[emptypb.Empty]) error\n\tWithBodyRpc(context.Context, *emptypb.Empty) (*emptypb.Empty, error)\n\tWithBodyServerStream(*emptypb.Empty, grpc.ServerStreamingServer[emptypb.Empty]) error\n}\n\n// UnimplementedExcessBodyServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedExcessBodyServiceServer struct{}\n\nfunc (UnimplementedExcessBodyServiceServer) NoBodyRpc(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method NoBodyRpc not implemented\")\n}\nfunc (UnimplementedExcessBodyServiceServer) NoBodyServerStream(*emptypb.Empty, grpc.ServerStreamingServer[emptypb.Empty]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method NoBodyServerStream not implemented\")\n}\nfunc (UnimplementedExcessBodyServiceServer) WithBodyRpc(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method WithBodyRpc not implemented\")\n}\nfunc (UnimplementedExcessBodyServiceServer) WithBodyServerStream(*emptypb.Empty, grpc.ServerStreamingServer[emptypb.Empty]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method WithBodyServerStream not implemented\")\n}\nfunc (UnimplementedExcessBodyServiceServer) testEmbeddedByValue() {}\n\n// UnsafeExcessBodyServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to ExcessBodyServiceServer will\n// result in compilation errors.\ntype UnsafeExcessBodyServiceServer interface {\n\tmustEmbedUnimplementedExcessBodyServiceServer()\n}\n\nfunc RegisterExcessBodyServiceServer(s grpc.ServiceRegistrar, srv ExcessBodyServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedExcessBodyServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&ExcessBodyService_ServiceDesc, srv)\n}\n\nfunc _ExcessBodyService_NoBodyRpc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ExcessBodyServiceServer).NoBodyRpc(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ExcessBodyService_NoBodyRpc_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ExcessBodyServiceServer).NoBodyRpc(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ExcessBodyService_NoBodyServerStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(emptypb.Empty)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(ExcessBodyServiceServer).NoBodyServerStream(m, &grpc.GenericServerStream[emptypb.Empty, emptypb.Empty]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype ExcessBodyService_NoBodyServerStreamServer = grpc.ServerStreamingServer[emptypb.Empty]\n\nfunc _ExcessBodyService_WithBodyRpc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ExcessBodyServiceServer).WithBodyRpc(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ExcessBodyService_WithBodyRpc_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ExcessBodyServiceServer).WithBodyRpc(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ExcessBodyService_WithBodyServerStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(emptypb.Empty)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(ExcessBodyServiceServer).WithBodyServerStream(m, &grpc.GenericServerStream[emptypb.Empty, emptypb.Empty]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype ExcessBodyService_WithBodyServerStreamServer = grpc.ServerStreamingServer[emptypb.Empty]\n\n// ExcessBodyService_ServiceDesc is the grpc.ServiceDesc for ExcessBodyService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar ExcessBodyService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.ExcessBodyService\",\n\tHandlerType: (*ExcessBodyServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"NoBodyRpc\",\n\t\t\tHandler:    _ExcessBodyService_NoBodyRpc_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"WithBodyRpc\",\n\t\t\tHandler:    _ExcessBodyService_WithBodyRpc_Handler,\n\t\t},\n\t},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"NoBodyServerStream\",\n\t\t\tHandler:       _ExcessBodyService_NoBodyServerStream_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"WithBodyServerStream\",\n\t\t\tHandler:       _ExcessBodyService_WithBodyServerStream_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t},\n\tMetadata: \"examples/internal/proto/examplepb/excess_body.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/flow_combination.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/flow_combination.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype EmptyProto struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n}\n\nfunc (x *EmptyProto) Reset() {\n\t*x = EmptyProto{}\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *EmptyProto) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*EmptyProto) ProtoMessage() {}\n\nfunc (x *EmptyProto) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use EmptyProto.ProtoReflect.Descriptor instead.\nfunc (*EmptyProto) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{0}\n}\n\ntype NonEmptyProto struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tA string `protobuf:\"bytes,1,opt,name=a,proto3\" json:\"a,omitempty\"`\n\tB string `protobuf:\"bytes,2,opt,name=b,proto3\" json:\"b,omitempty\"`\n\tC string `protobuf:\"bytes,3,opt,name=c,proto3\" json:\"c,omitempty\"`\n}\n\nfunc (x *NonEmptyProto) Reset() {\n\t*x = NonEmptyProto{}\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonEmptyProto) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonEmptyProto) ProtoMessage() {}\n\nfunc (x *NonEmptyProto) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonEmptyProto.ProtoReflect.Descriptor instead.\nfunc (*NonEmptyProto) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *NonEmptyProto) GetA() string {\n\tif x != nil {\n\t\treturn x.A\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonEmptyProto) GetB() string {\n\tif x != nil {\n\t\treturn x.B\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonEmptyProto) GetC() string {\n\tif x != nil {\n\t\treturn x.C\n\t}\n\treturn \"\"\n}\n\ntype UnaryProto struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tStr string `protobuf:\"bytes,1,opt,name=str,proto3\" json:\"str,omitempty\"`\n}\n\nfunc (x *UnaryProto) Reset() {\n\t*x = UnaryProto{}\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UnaryProto) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UnaryProto) ProtoMessage() {}\n\nfunc (x *UnaryProto) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UnaryProto.ProtoReflect.Descriptor instead.\nfunc (*UnaryProto) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *UnaryProto) GetStr() string {\n\tif x != nil {\n\t\treturn x.Str\n\t}\n\treturn \"\"\n}\n\ntype NestedProto struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tA *UnaryProto `protobuf:\"bytes,1,opt,name=a,proto3\" json:\"a,omitempty\"`\n\tB string      `protobuf:\"bytes,2,opt,name=b,proto3\" json:\"b,omitempty\"`\n\tC string      `protobuf:\"bytes,3,opt,name=c,proto3\" json:\"c,omitempty\"`\n}\n\nfunc (x *NestedProto) Reset() {\n\t*x = NestedProto{}\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NestedProto) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NestedProto) ProtoMessage() {}\n\nfunc (x *NestedProto) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NestedProto.ProtoReflect.Descriptor instead.\nfunc (*NestedProto) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *NestedProto) GetA() *UnaryProto {\n\tif x != nil {\n\t\treturn x.A\n\t}\n\treturn nil\n}\n\nfunc (x *NestedProto) GetB() string {\n\tif x != nil {\n\t\treturn x.B\n\t}\n\treturn \"\"\n}\n\nfunc (x *NestedProto) GetC() string {\n\tif x != nil {\n\t\treturn x.C\n\t}\n\treturn \"\"\n}\n\ntype SingleNestedProto struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tA *UnaryProto `protobuf:\"bytes,1,opt,name=a,proto3\" json:\"a,omitempty\"`\n}\n\nfunc (x *SingleNestedProto) Reset() {\n\t*x = SingleNestedProto{}\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SingleNestedProto) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SingleNestedProto) ProtoMessage() {}\n\nfunc (x *SingleNestedProto) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use SingleNestedProto.ProtoReflect.Descriptor instead.\nfunc (*SingleNestedProto) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *SingleNestedProto) GetA() *UnaryProto {\n\tif x != nil {\n\t\treturn x.A\n\t}\n\treturn nil\n}\n\nvar File_examples_internal_proto_examplepb_flow_combination_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []byte{\n\t0x0a, 0x38, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0c, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74,\n\t0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x39, 0x0a, 0x0d, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70,\n\t0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, 0x01, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01,\n\t0x63, 0x22, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12,\n\t0x10, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x74,\n\t0x72, 0x22, 0x73, 0x0a, 0x0b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f,\n\t0x12, 0x48, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61,\n\t0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, 0x01, 0x63, 0x18, 0x03, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x01, 0x63, 0x22, 0x5d, 0x0a, 0x11, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65,\n\t0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x48, 0x0a, 0x01, 0x61,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f,\n\t0x74, 0x6f, 0x52, 0x01, 0x61, 0x32, 0xfd, 0x11, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f,\n\t0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9d, 0x01, 0x0a, 0x0b, 0x52, 0x70,\n\t0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x70, 0x63, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,\n\t0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74,\n\t0x6f, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0e, 0x2f, 0x72, 0x70, 0x63, 0x2f,\n\t0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x52, 0x70,\n\t0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3a, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d,\n\t0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50,\n\t0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, 0x2f, 0x72,\n\t0x70, 0x63, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30,\n\t0x01, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6d, 0x70, 0x74,\n\t0x79, 0x52, 0x70, 0x63, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f,\n\t0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3,\n\t0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d,\n\t0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x28, 0x01, 0x12, 0xad, 0x01, 0x0a, 0x11, 0x53, 0x74,\n\t0x72, 0x65, 0x61, 0x6d, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12,\n\t0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70,\n\t0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22,\n\t0x14, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73,\n\t0x74, 0x72, 0x65, 0x61, 0x6d, 0x28, 0x01, 0x30, 0x01, 0x12, 0xcb, 0x02, 0x0a, 0x0a, 0x52, 0x70,\n\t0x63, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x70, 0x63, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70,\n\t0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72,\n\t0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xba, 0x01, 0x3a, 0x01, 0x2a,\n\t0x5a, 0x1b, 0x22, 0x19, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61,\n\t0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x10, 0x22,\n\t0x0e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a,\n\t0x1f, 0x3a, 0x01, 0x63, 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f,\n\t0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63,\n\t0x5a, 0x18, 0x3a, 0x01, 0x63, 0x22, 0x13, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79,\n\t0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x21, 0x3a, 0x01, 0x63, 0x22,\n\t0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f,\n\t0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x19, 0x22,\n\t0x17, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71,\n\t0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x22, 0x0d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62,\n\t0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xbd, 0x01, 0x0a, 0x16, 0x52, 0x70, 0x63, 0x50,\n\t0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52,\n\t0x70, 0x63, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74,\n\t0x6f, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f,\n\t0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73,\n\t0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xfd, 0x01, 0x0a, 0x10, 0x52, 0x70, 0x63, 0x50,\n\t0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x70, 0x63, 0x12, 0x3b, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,\n\t0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x3a, 0x01, 0x63,\n\t0x5a, 0x1f, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70,\n\t0x63, 0x5a, 0x22, 0x3a, 0x01, 0x63, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74,\n\t0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72,\n\t0x7d, 0x2f, 0x72, 0x70, 0x63, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68,\n\t0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f,\n\t0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xe5, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42,\n\t0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d,\n\t0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50,\n\t0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x3a, 0x01,\n\t0x2a, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b,\n\t0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61,\n\t0x6d, 0x5a, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f,\n\t0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x3a, 0x01, 0x63, 0x22, 0x1d, 0x2f, 0x72, 0x70,\n\t0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f,\n\t0x7b, 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x1b, 0x3a, 0x01, 0x63, 0x22,\n\t0x16, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79,\n\t0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x24, 0x3a, 0x01, 0x63, 0x22, 0x1f, 0x2f, 0x72,\n\t0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d,\n\t0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x1c, 0x22,\n\t0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71,\n\t0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x10, 0x2f, 0x72, 0x70,\n\t0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12,\n\t0xc5, 0x01, 0x0a, 0x19, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c,\n\t0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x41, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53,\n\t0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f,\n\t0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x82, 0xd3,\n\t0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d,\n\t0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73,\n\t0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x8b, 0x02, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x50,\n\t0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12,\n\t0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d,\n\t0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73,\n\t0x3a, 0x01, 0x63, 0x5a, 0x22, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68,\n\t0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d,\n\t0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x25, 0x3a, 0x01, 0x63, 0x22, 0x20, 0x2f, 0x72,\n\t0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x2f,\n\t0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x23,\n\t0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72,\n\t0x65, 0x61, 0x6d, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,\n\t0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74,\n\t0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f,\n\t0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_flow_combination_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_flow_combination_proto_rawDescData = file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_flow_combination_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_flow_combination_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_flow_combination_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_flow_combination_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes = make([]protoimpl.MessageInfo, 5)\nvar file_examples_internal_proto_examplepb_flow_combination_proto_goTypes = []any{\n\t(*EmptyProto)(nil),        // 0: grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t(*NonEmptyProto)(nil),     // 1: grpc.gateway.examples.internal.proto.examplepb.NonEmptyProto\n\t(*UnaryProto)(nil),        // 2: grpc.gateway.examples.internal.proto.examplepb.UnaryProto\n\t(*NestedProto)(nil),       // 3: grpc.gateway.examples.internal.proto.examplepb.NestedProto\n\t(*SingleNestedProto)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto\n}\nvar file_examples_internal_proto_examplepb_flow_combination_proto_depIdxs = []int32{\n\t2,  // 0: grpc.gateway.examples.internal.proto.examplepb.NestedProto.a:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnaryProto\n\t2,  // 1: grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto.a:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnaryProto\n\t0,  // 2: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 3: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 4: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 5: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t1,  // 6: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonEmptyProto\n\t4,  // 7: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto\n\t3,  // 8: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.NestedProto\n\t1,  // 9: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonEmptyProto\n\t4,  // 10: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto\n\t3,  // 11: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.NestedProto\n\t0,  // 12: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 13: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 14: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 15: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 16: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 17: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 18: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 19: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 20: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t0,  // 21: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto\n\t12, // [12:22] is the sub-list for method output_type\n\t2,  // [2:12] is the sub-list for method input_type\n\t2,  // [2:2] is the sub-list for extension type_name\n\t2,  // [2:2] is the sub-list for extension extendee\n\t0,  // [0:2] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_flow_combination_proto_init() }\nfunc file_examples_internal_proto_examplepb_flow_combination_proto_init() {\n\tif File_examples_internal_proto_examplepb_flow_combination_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   5,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_flow_combination_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_flow_combination_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_flow_combination_proto = out.File\n\tfile_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_flow_combination_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_flow_combination_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/flow_combination.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/flow_combination.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq EmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.RpcEmptyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq EmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tmsg, err := server.RpcEmptyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_FlowCombination_RpcEmptyStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcEmptyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq EmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tstream, err := client.RpcEmptyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.StreamEmptyRpc(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\tfor {\n\t\tvar protoReq EmptyProto\n\t\terr = dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t}\n\t\tif err = stream.Send(&protoReq); err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn nil, metadata, err\n\t\t}\n\t}\n\tif err := stream.CloseSend(); err != nil {\n\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\tmsg, err := stream.CloseAndRecv()\n\tmetadata.TrailerMD = stream.Trailer()\n\treturn msg, metadata, err\n}\n\nfunc request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_StreamEmptyStreamClient, runtime.ServerMetadata, error) {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.StreamEmptyStream(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\thandleSend := func() error {\n\t\tvar protoReq EmptyProto\n\t\terr := dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn err\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn status.Errorf(codes.InvalidArgument, \"Failed to decode request: %v\", err)\n\t\t}\n\t\tif err := stream.Send(&protoReq); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\tgo func() {\n\t\tfor {\n\t\t\tif err := handleSend(); err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif err := stream.CloseSend(); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\t}\n\t}()\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.RpcBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_FlowCombination_RpcBodyRpc_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tval, ok = pathParams[\"c\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"c\")\n\t}\n\tprotoReq.C, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"c\", err)\n\t}\n\tmsg, err := client.RpcBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcBodyRpc_1(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tval, ok = pathParams[\"c\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"c\")\n\t}\n\tprotoReq.C, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"c\", err)\n\t}\n\tmsg, err := server.RpcBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcBodyRpc_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_FlowCombination_RpcBodyRpc_3(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tmsg, err := client.RpcBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcBodyRpc_3(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tmsg, err := server.RpcBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcBodyRpc_4 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcBodyRpc_5 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0, \"a\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_5); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_5); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcBodyRpc_6 = &utilities.DoubleArray{Encoding: map[string]int{\"a\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_6); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcBodyRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_6); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcBodyRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcPathSingleNestedRpc_0 = &utilities.DoubleArray{Encoding: map[string]int{\"a\": 0, \"str\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SingleNestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcPathSingleNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SingleNestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcPathSingleNestedRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcPathNestedRpc_0 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0, \"a\": 1, \"str\": 2, \"b\": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 1, 2, 4, 5}}\n\nfunc request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcPathNestedRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcPathNestedRpc_1 = &utilities.DoubleArray{Encoding: map[string]int{\"a\": 0, \"str\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcPathNestedRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_FlowCombination_RpcPathNestedRpc_2 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0, \"a\": 1, \"str\": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 3, 2, 4}}\n\nfunc request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.RpcPathNestedRpc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_FlowCombination_RpcBodyStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tstream, err := client.RpcBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_FlowCombination_RpcBodyStream_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tval, ok = pathParams[\"c\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"c\")\n\t}\n\tprotoReq.C, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"c\", err)\n\t}\n\tstream, err := client.RpcBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcBodyStream_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_FlowCombination_RpcBodyStream_2(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_FlowCombination_RpcBodyStream_3(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tstream, err := client.RpcBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcBodyStream_4 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_FlowCombination_RpcBodyStream_4(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcBodyStream_5 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0, \"a\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_FlowCombination_RpcBodyStream_5(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_5); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcBodyStream_6 = &utilities.DoubleArray{Encoding: map[string]int{\"a\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_FlowCombination_RpcBodyStream_6(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonEmptyProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a\")\n\t}\n\tprotoReq.A, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_6); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcPathSingleNestedStream_0 = &utilities.DoubleArray{Encoding: map[string]int{\"a\": 0, \"str\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_FlowCombination_RpcPathSingleNestedStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcPathSingleNestedStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq SingleNestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedStream_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcPathSingleNestedStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcPathNestedStream_0 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0, \"a\": 1, \"str\": 2, \"b\": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 1, 2, 4, 5}}\n\nfunc request_FlowCombination_RpcPathNestedStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcPathNestedStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tval, ok = pathParams[\"b\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"b\")\n\t}\n\tprotoReq.B, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"b\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedStream_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcPathNestedStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcPathNestedStream_1 = &utilities.DoubleArray{Encoding: map[string]int{\"a\": 0, \"str\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_FlowCombination_RpcPathNestedStream_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcPathNestedStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedStream_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcPathNestedStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_FlowCombination_RpcPathNestedStream_2 = &utilities.DoubleArray{Encoding: map[string]int{\"c\": 0, \"a\": 1, \"str\": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 3, 2, 4}}\n\nfunc request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcPathNestedStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NestedProto\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"a.str\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"a.str\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"a.str\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"a.str\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedStream_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.RpcPathNestedStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\n// RegisterFlowCombinationHandlerServer registers the http handlers for service FlowCombination to \"mux\".\n// UnaryRPC     :call FlowCombinationServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterFlowCombinationHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer) error {\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc\", runtime.WithHTTPPathPattern(\"/rpc/empty/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcEmptyRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcEmptyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_StreamEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_StreamEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcBodyRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/path/{a}/{b}/{c}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcBodyRpc_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcBodyRpc_2(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/path/{a}/{b}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcBodyRpc_3(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcBodyRpc_4(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/path/{a}/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcBodyRpc_5(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/path/{a}/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcBodyRpc_6(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathSingleNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested/{a.str}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested/{a.str}/{b}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcPathNestedRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested1/{a.str}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcPathNestedRpc_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested2/{a.str}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FlowCombination_RpcPathNestedRpc_2(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathSingleNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\treturn nil\n}\n\n// RegisterFlowCombinationHandlerFromEndpoint is same as RegisterFlowCombinationHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterFlowCombinationHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterFlowCombinationHandler(ctx, mux, conn)\n}\n\n// RegisterFlowCombinationHandler registers the http handlers for service FlowCombination to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterFlowCombinationHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterFlowCombinationHandlerClient(ctx, mux, NewFlowCombinationClient(conn))\n}\n\n// RegisterFlowCombinationHandlerClient registers the http handlers for service FlowCombination\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"FlowCombinationClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"FlowCombinationClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"FlowCombinationClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.ServeMux, client FlowCombinationClient) error {\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc\", runtime.WithHTTPPathPattern(\"/rpc/empty/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcEmptyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcEmptyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream\", runtime.WithHTTPPathPattern(\"/rpc/empty/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcEmptyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcEmptyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_StreamEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc\", runtime.WithHTTPPathPattern(\"/stream/empty/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_StreamEmptyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_StreamEmptyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_StreamEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream\", runtime.WithHTTPPathPattern(\"/stream/empty/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_StreamEmptyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_StreamEmptyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/path/{a}/{b}/{c}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyRpc_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyRpc_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/path/{a}/{b}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyRpc_3(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyRpc_4(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/body/path/{a}/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyRpc_5(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyRpc_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\", runtime.WithHTTPPathPattern(\"/rpc/path/{a}/query/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyRpc_6(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyRpc_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathSingleNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested/{a.str}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested/{a.str}/{b}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathNestedRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested1/{a.str}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathNestedRpc_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc\", runtime.WithHTTPPathPattern(\"/rpc/path-nested2/{a.str}/rpc\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathNestedRpc_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\", runtime.WithHTTPPathPattern(\"/rpc/body/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\", runtime.WithHTTPPathPattern(\"/rpc/path/{a}/{b}/{c}/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyStream_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyStream_1(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\", runtime.WithHTTPPathPattern(\"/rpc/query/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyStream_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyStream_2(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\", runtime.WithHTTPPathPattern(\"/rpc/body/path/{a}/{b}/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyStream_3(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyStream_3(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\", runtime.WithHTTPPathPattern(\"/rpc/body/query/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyStream_4(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyStream_4(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\", runtime.WithHTTPPathPattern(\"/rpc/body/path/{a}/query/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyStream_5(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyStream_5(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcBodyStream_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\", runtime.WithHTTPPathPattern(\"/rpc/path/{a}/query/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcBodyStream_6(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcBodyStream_6(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathSingleNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream\", runtime.WithHTTPPathPattern(\"/rpc/path-nested/{a.str}/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathSingleNestedStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathSingleNestedStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream\", runtime.WithHTTPPathPattern(\"/rpc/path-nested/{a.str}/{b}/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathNestedStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream\", runtime.WithHTTPPathPattern(\"/rpc/path-nested1/{a.str}/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathNestedStream_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedStream_1(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_FlowCombination_RpcPathNestedStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream\", runtime.WithHTTPPathPattern(\"/rpc/path-nested2/{a.str}/stream\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FlowCombination_RpcPathNestedStream_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FlowCombination_RpcPathNestedStream_2(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_FlowCombination_RpcEmptyRpc_0               = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{\"rpc\", \"empty\"}, \"\"))\n\tpattern_FlowCombination_RpcEmptyStream_0            = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"rpc\", \"empty\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_StreamEmptyRpc_0            = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"stream\", \"empty\", \"rpc\"}, \"\"))\n\tpattern_FlowCombination_StreamEmptyStream_0         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{\"stream\", \"empty\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyRpc_0                = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{\"rpc\", \"body\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyRpc_1                = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{\"rpc\", \"path\", \"a\", \"b\", \"c\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyRpc_2                = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{\"rpc\", \"query\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyRpc_3                = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{\"rpc\", \"body\", \"path\", \"a\", \"b\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyRpc_4                = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 0}, []string{\"rpc\", \"body\", \"query\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyRpc_5                = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 0}, []string{\"rpc\", \"body\", \"path\", \"a\", \"query\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyRpc_6                = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 0}, []string{\"rpc\", \"path\", \"a\", \"query\"}, \"\"))\n\tpattern_FlowCombination_RpcPathSingleNestedRpc_0    = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{\"rpc\", \"path-nested\", \"a.str\"}, \"\"))\n\tpattern_FlowCombination_RpcPathNestedRpc_0          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 0}, []string{\"rpc\", \"path-nested\", \"a.str\", \"b\"}, \"\"))\n\tpattern_FlowCombination_RpcPathNestedRpc_1          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{\"rpc\", \"path-nested1\", \"a.str\"}, \"\"))\n\tpattern_FlowCombination_RpcPathNestedRpc_2          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{\"rpc\", \"path-nested2\", \"a.str\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyStream_0             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"rpc\", \"body\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyStream_1             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{\"rpc\", \"path\", \"a\", \"b\", \"c\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyStream_2             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"rpc\", \"query\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyStream_3             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{\"rpc\", \"body\", \"path\", \"a\", \"b\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyStream_4             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"rpc\", \"body\", \"query\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyStream_5             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{\"rpc\", \"body\", \"path\", \"a\", \"query\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcBodyStream_6             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{\"rpc\", \"path\", \"a\", \"query\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcPathSingleNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{\"rpc\", \"path-nested\", \"a.str\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcPathNestedStream_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{\"rpc\", \"path-nested\", \"a.str\", \"b\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcPathNestedStream_1       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{\"rpc\", \"path-nested1\", \"a.str\", \"stream\"}, \"\"))\n\tpattern_FlowCombination_RpcPathNestedStream_2       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{\"rpc\", \"path-nested2\", \"a.str\", \"stream\"}, \"\"))\n)\n\nvar (\n\tforward_FlowCombination_RpcEmptyRpc_0               = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcEmptyStream_0            = runtime.ForwardResponseStream\n\tforward_FlowCombination_StreamEmptyRpc_0            = runtime.ForwardResponseMessage\n\tforward_FlowCombination_StreamEmptyStream_0         = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcBodyRpc_0                = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcBodyRpc_1                = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcBodyRpc_2                = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcBodyRpc_3                = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcBodyRpc_4                = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcBodyRpc_5                = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcBodyRpc_6                = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcPathSingleNestedRpc_0    = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcPathNestedRpc_0          = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcPathNestedRpc_1          = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcPathNestedRpc_2          = runtime.ForwardResponseMessage\n\tforward_FlowCombination_RpcBodyStream_0             = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcBodyStream_1             = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcBodyStream_2             = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcBodyStream_3             = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcBodyStream_4             = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcBodyStream_5             = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcBodyStream_6             = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcPathSingleNestedStream_0 = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcPathNestedStream_0       = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcPathNestedStream_1       = runtime.ForwardResponseStream\n\tforward_FlowCombination_RpcPathNestedStream_2       = runtime.ForwardResponseStream\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/flow_combination.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\nmessage EmptyProto {}\n\nmessage NonEmptyProto {\n  string a = 1;\n  string b = 2;\n  string c = 3;\n}\n\nmessage UnaryProto {\n  string str = 1;\n}\n\nmessage NestedProto {\n  UnaryProto a = 1;\n  string b = 2;\n  string c = 3;\n}\n\nmessage SingleNestedProto {\n  UnaryProto a = 1;\n}\n\nservice FlowCombination {\n  rpc RpcEmptyRpc(EmptyProto) returns (EmptyProto) {\n    option (google.api.http) = {post: \"/rpc/empty/rpc\"};\n  }\n  rpc RpcEmptyStream(EmptyProto) returns (stream EmptyProto) {\n    option (google.api.http) = {post: \"/rpc/empty/stream\"};\n  }\n  rpc StreamEmptyRpc(stream EmptyProto) returns (EmptyProto) {\n    option (google.api.http) = {post: \"/stream/empty/rpc\"};\n  }\n  rpc StreamEmptyStream(stream EmptyProto) returns (stream EmptyProto) {\n    option (google.api.http) = {post: \"/stream/empty/stream\"};\n  }\n\n  rpc RpcBodyRpc(NonEmptyProto) returns (EmptyProto) {\n    option (google.api.http) = {\n      // w/ body; w/o path; w/o query\n      post: \"/rpc/body/rpc\"\n      body: \"*\"\n\n      // w/o body; w/ path; w/o query\n      additional_bindings: {post: \"/rpc/path/{a}/{b}/{c}/rpc\"}\n      // w/o body; w/o path; w/ query\n      additional_bindings: {post: \"/rpc/query/rpc\"}\n      // w/ body; w/ path; w/o query\n      additional_bindings: {\n        post: \"/rpc/body/path/{a}/{b}/rpc\"\n        body: \"c\"\n      }\n      // w/ body; w/o path; w/ query\n      additional_bindings: {\n        post: \"/rpc/body/query/rpc\"\n        body: \"c\"\n      }\n      // w/ body; w/ path; w/ query\n      additional_bindings: {\n        post: \"/rpc/body/path/{a}/query/rpc\"\n        body: \"c\"\n      }\n      // w/o body; w/ path; w/ query\n      additional_bindings: {post: \"/rpc/path/{a}/query/rpc\"}\n    };\n  }\n  rpc RpcPathSingleNestedRpc(SingleNestedProto) returns (EmptyProto) {\n    option (google.api.http) = {\n      // w/o body; w/ path (IsNestedProto3); w/o query\n      post: \"/rpc/path-nested/{a.str}/rpc\"\n    };\n  }\n  rpc RpcPathNestedRpc(NestedProto) returns (EmptyProto) {\n    option (google.api.http) = {\n      // w/ body; w/ path (IsNestedProto3); w/o query\n      post: \"/rpc/path-nested/{a.str}/{b}/rpc\"\n      body: \"c\"\n\n      // w/o body; w/ path (IsNestedProto3); w/ query\n      additional_bindings: {post: \"/rpc/path-nested1/{a.str}/rpc\"}\n      // w/ body; w/ path (IsNestedProto3); w/ query\n      additional_bindings: {\n        post: \"/rpc/path-nested2/{a.str}/rpc\"\n        body: \"c\"\n      }\n    };\n  }\n\n  rpc RpcBodyStream(NonEmptyProto) returns (stream EmptyProto) {\n    option (google.api.http) = {\n      // w/ body; w/o path; w/o query\n      post: \"/rpc/body/stream\"\n      body: \"*\"\n\n      // w/o body; w/ path; w/o query\n      additional_bindings: {post: \"/rpc/path/{a}/{b}/{c}/stream\"}\n      // w/o body; w/o path; w/ query\n      additional_bindings: {post: \"/rpc/query/stream\"}\n      // w/ body; w/ path; w/o query\n      additional_bindings: {\n        post: \"/rpc/body/path/{a}/{b}/stream\"\n        body: \"c\"\n      }\n      // w/ body; w/o path; w/ query\n      additional_bindings: {\n        post: \"/rpc/body/query/stream\"\n        body: \"c\"\n      }\n      // w/ body; w/ path; w/ query\n      additional_bindings: {\n        post: \"/rpc/body/path/{a}/query/stream\"\n        body: \"c\"\n      }\n      // w/o body; w/ path; w/ query\n      additional_bindings: {post: \"/rpc/path/{a}/query/stream\"}\n    };\n  }\n  rpc RpcPathSingleNestedStream(SingleNestedProto) returns (stream EmptyProto) {\n    option (google.api.http) = {\n      // w/o body; w/ path (IsNestedProto3); w/o query\n      post: \"/rpc/path-nested/{a.str}/stream\"\n    };\n  }\n  rpc RpcPathNestedStream(NestedProto) returns (stream EmptyProto) {\n    option (google.api.http) = {\n      // w/ body; w/ path (IsNestedProto3); w/o query\n      post: \"/rpc/path-nested/{a.str}/{b}/stream\"\n      body: \"c\"\n\n      // w/o body; w/ path (IsNestedProto3); w/ query\n      additional_bindings: {post: \"/rpc/path-nested1/{a.str}/stream\"}\n      // w/ body; w/ path (IsNestedProto3); w/ query\n      additional_bindings: {\n        post: \"/rpc/path-nested2/{a.str}/stream\"\n        body: \"c\"\n      }\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/flow_combination.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/flow_combination.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"FlowCombination\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/rpc/body/path/{a}/query/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyRpc6\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/body/path/{a}/query/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyStream6\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/body/path/{a}/{b}/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyRpc4\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/body/path/{a}/{b}/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyStream4\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/body/query/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyRpc5\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/body/query/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyStream5\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/body/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyRpc\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonEmptyProto\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/body/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonEmptyProto\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/empty/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcEmptyRpc\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/empty/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcEmptyStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested/{a.str}/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathSingleNestedRpc\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested/{a.str}/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathSingleNestedStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested/{a.str}/{b}/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathNestedRpc\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested/{a.str}/{b}/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathNestedStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested1/{a.str}/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathNestedRpc2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested1/{a.str}/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathNestedStream2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested2/{a.str}/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathNestedRpc3\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path-nested2/{a.str}/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcPathNestedStream3\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a.str\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path/{a}/query/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyRpc7\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path/{a}/query/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyStream7\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path/{a}/{b}/{c}/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyRpc2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/path/{a}/{b}/{c}/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyStream2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/query/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyRpc3\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/rpc/query/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_RpcBodyStream3\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/stream/empty/rpc\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_StreamEmptyRpc\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    },\n    \"/stream/empty/stream\": {\n      \"post\": {\n        \"operationId\": \"FlowCombination_StreamEmptyStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbEmptyProto\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbEmptyProto\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"tags\": [\n          \"FlowCombination\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbEmptyProto\": {\n      \"type\": \"object\"\n    },\n    \"examplepbNonEmptyProto\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\"\n        },\n        \"b\": {\n          \"type\": \"string\"\n        },\n        \"c\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"examplepbUnaryProto\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"str\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/flow_combination_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/flow_combination.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tFlowCombination_RpcEmptyRpc_FullMethodName               = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc\"\n\tFlowCombination_RpcEmptyStream_FullMethodName            = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream\"\n\tFlowCombination_StreamEmptyRpc_FullMethodName            = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc\"\n\tFlowCombination_StreamEmptyStream_FullMethodName         = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream\"\n\tFlowCombination_RpcBodyRpc_FullMethodName                = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc\"\n\tFlowCombination_RpcPathSingleNestedRpc_FullMethodName    = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc\"\n\tFlowCombination_RpcPathNestedRpc_FullMethodName          = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc\"\n\tFlowCombination_RpcBodyStream_FullMethodName             = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream\"\n\tFlowCombination_RpcPathSingleNestedStream_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream\"\n\tFlowCombination_RpcPathNestedStream_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream\"\n)\n\n// FlowCombinationClient is the client API for FlowCombination service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype FlowCombinationClient interface {\n\tRpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error)\n\tRpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error)\n\tStreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[EmptyProto, EmptyProto], error)\n\tStreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EmptyProto, EmptyProto], error)\n\tRpcBodyRpc(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (*EmptyProto, error)\n\tRpcPathSingleNestedRpc(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (*EmptyProto, error)\n\tRpcPathNestedRpc(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (*EmptyProto, error)\n\tRpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error)\n\tRpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error)\n\tRpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error)\n}\n\ntype flowCombinationClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewFlowCombinationClient(cc grpc.ClientConnInterface) FlowCombinationClient {\n\treturn &flowCombinationClient{cc}\n}\n\nfunc (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(EmptyProto)\n\terr := c.cc.Invoke(ctx, FlowCombination_RpcEmptyRpc_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[0], FlowCombination_RpcEmptyStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[EmptyProto, EmptyProto]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcEmptyStreamClient = grpc.ServerStreamingClient[EmptyProto]\n\nfunc (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[EmptyProto, EmptyProto], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[1], FlowCombination_StreamEmptyRpc_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[EmptyProto, EmptyProto]{ClientStream: stream}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_StreamEmptyRpcClient = grpc.ClientStreamingClient[EmptyProto, EmptyProto]\n\nfunc (c *flowCombinationClient) StreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EmptyProto, EmptyProto], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[2], FlowCombination_StreamEmptyStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[EmptyProto, EmptyProto]{ClientStream: stream}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_StreamEmptyStreamClient = grpc.BidiStreamingClient[EmptyProto, EmptyProto]\n\nfunc (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(EmptyProto)\n\terr := c.cc.Invoke(ctx, FlowCombination_RpcBodyRpc_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (*EmptyProto, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(EmptyProto)\n\terr := c.cc.Invoke(ctx, FlowCombination_RpcPathSingleNestedRpc_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (*EmptyProto, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(EmptyProto)\n\terr := c.cc.Invoke(ctx, FlowCombination_RpcPathNestedRpc_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[3], FlowCombination_RpcBodyStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[NonEmptyProto, EmptyProto]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcBodyStreamClient = grpc.ServerStreamingClient[EmptyProto]\n\nfunc (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[4], FlowCombination_RpcPathSingleNestedStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[SingleNestedProto, EmptyProto]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcPathSingleNestedStreamClient = grpc.ServerStreamingClient[EmptyProto]\n\nfunc (c *flowCombinationClient) RpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EmptyProto], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[5], FlowCombination_RpcPathNestedStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[NestedProto, EmptyProto]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcPathNestedStreamClient = grpc.ServerStreamingClient[EmptyProto]\n\n// FlowCombinationServer is the server API for FlowCombination service.\n// All implementations should embed UnimplementedFlowCombinationServer\n// for forward compatibility.\ntype FlowCombinationServer interface {\n\tRpcEmptyRpc(context.Context, *EmptyProto) (*EmptyProto, error)\n\tRpcEmptyStream(*EmptyProto, grpc.ServerStreamingServer[EmptyProto]) error\n\tStreamEmptyRpc(grpc.ClientStreamingServer[EmptyProto, EmptyProto]) error\n\tStreamEmptyStream(grpc.BidiStreamingServer[EmptyProto, EmptyProto]) error\n\tRpcBodyRpc(context.Context, *NonEmptyProto) (*EmptyProto, error)\n\tRpcPathSingleNestedRpc(context.Context, *SingleNestedProto) (*EmptyProto, error)\n\tRpcPathNestedRpc(context.Context, *NestedProto) (*EmptyProto, error)\n\tRpcBodyStream(*NonEmptyProto, grpc.ServerStreamingServer[EmptyProto]) error\n\tRpcPathSingleNestedStream(*SingleNestedProto, grpc.ServerStreamingServer[EmptyProto]) error\n\tRpcPathNestedStream(*NestedProto, grpc.ServerStreamingServer[EmptyProto]) error\n}\n\n// UnimplementedFlowCombinationServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedFlowCombinationServer struct{}\n\nfunc (UnimplementedFlowCombinationServer) RpcEmptyRpc(context.Context, *EmptyProto) (*EmptyProto, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method RpcEmptyRpc not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) RpcEmptyStream(*EmptyProto, grpc.ServerStreamingServer[EmptyProto]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method RpcEmptyStream not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) StreamEmptyRpc(grpc.ClientStreamingServer[EmptyProto, EmptyProto]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method StreamEmptyRpc not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) StreamEmptyStream(grpc.BidiStreamingServer[EmptyProto, EmptyProto]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method StreamEmptyStream not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) RpcBodyRpc(context.Context, *NonEmptyProto) (*EmptyProto, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method RpcBodyRpc not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) RpcPathSingleNestedRpc(context.Context, *SingleNestedProto) (*EmptyProto, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method RpcPathSingleNestedRpc not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) RpcPathNestedRpc(context.Context, *NestedProto) (*EmptyProto, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method RpcPathNestedRpc not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) RpcBodyStream(*NonEmptyProto, grpc.ServerStreamingServer[EmptyProto]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method RpcBodyStream not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) RpcPathSingleNestedStream(*SingleNestedProto, grpc.ServerStreamingServer[EmptyProto]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method RpcPathSingleNestedStream not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) RpcPathNestedStream(*NestedProto, grpc.ServerStreamingServer[EmptyProto]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method RpcPathNestedStream not implemented\")\n}\nfunc (UnimplementedFlowCombinationServer) testEmbeddedByValue() {}\n\n// UnsafeFlowCombinationServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to FlowCombinationServer will\n// result in compilation errors.\ntype UnsafeFlowCombinationServer interface {\n\tmustEmbedUnimplementedFlowCombinationServer()\n}\n\nfunc RegisterFlowCombinationServer(s grpc.ServiceRegistrar, srv FlowCombinationServer) {\n\t// If the following call pancis, it indicates UnimplementedFlowCombinationServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&FlowCombination_ServiceDesc, srv)\n}\n\nfunc _FlowCombination_RpcEmptyRpc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(EmptyProto)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(FlowCombinationServer).RpcEmptyRpc(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: FlowCombination_RpcEmptyRpc_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(FlowCombinationServer).RpcEmptyRpc(ctx, req.(*EmptyProto))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _FlowCombination_RpcEmptyStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(EmptyProto)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(FlowCombinationServer).RpcEmptyStream(m, &grpc.GenericServerStream[EmptyProto, EmptyProto]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcEmptyStreamServer = grpc.ServerStreamingServer[EmptyProto]\n\nfunc _FlowCombination_StreamEmptyRpc_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(FlowCombinationServer).StreamEmptyRpc(&grpc.GenericServerStream[EmptyProto, EmptyProto]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_StreamEmptyRpcServer = grpc.ClientStreamingServer[EmptyProto, EmptyProto]\n\nfunc _FlowCombination_StreamEmptyStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(FlowCombinationServer).StreamEmptyStream(&grpc.GenericServerStream[EmptyProto, EmptyProto]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_StreamEmptyStreamServer = grpc.BidiStreamingServer[EmptyProto, EmptyProto]\n\nfunc _FlowCombination_RpcBodyRpc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(NonEmptyProto)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(FlowCombinationServer).RpcBodyRpc(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: FlowCombination_RpcBodyRpc_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(FlowCombinationServer).RpcBodyRpc(ctx, req.(*NonEmptyProto))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _FlowCombination_RpcPathSingleNestedRpc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(SingleNestedProto)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(FlowCombinationServer).RpcPathSingleNestedRpc(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: FlowCombination_RpcPathSingleNestedRpc_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(FlowCombinationServer).RpcPathSingleNestedRpc(ctx, req.(*SingleNestedProto))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _FlowCombination_RpcPathNestedRpc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(NestedProto)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(FlowCombinationServer).RpcPathNestedRpc(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: FlowCombination_RpcPathNestedRpc_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(FlowCombinationServer).RpcPathNestedRpc(ctx, req.(*NestedProto))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _FlowCombination_RpcBodyStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(NonEmptyProto)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(FlowCombinationServer).RpcBodyStream(m, &grpc.GenericServerStream[NonEmptyProto, EmptyProto]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcBodyStreamServer = grpc.ServerStreamingServer[EmptyProto]\n\nfunc _FlowCombination_RpcPathSingleNestedStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(SingleNestedProto)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(FlowCombinationServer).RpcPathSingleNestedStream(m, &grpc.GenericServerStream[SingleNestedProto, EmptyProto]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcPathSingleNestedStreamServer = grpc.ServerStreamingServer[EmptyProto]\n\nfunc _FlowCombination_RpcPathNestedStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(NestedProto)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(FlowCombinationServer).RpcPathNestedStream(m, &grpc.GenericServerStream[NestedProto, EmptyProto]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype FlowCombination_RpcPathNestedStreamServer = grpc.ServerStreamingServer[EmptyProto]\n\n// FlowCombination_ServiceDesc is the grpc.ServiceDesc for FlowCombination service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar FlowCombination_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.FlowCombination\",\n\tHandlerType: (*FlowCombinationServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"RpcEmptyRpc\",\n\t\t\tHandler:    _FlowCombination_RpcEmptyRpc_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"RpcBodyRpc\",\n\t\t\tHandler:    _FlowCombination_RpcBodyRpc_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"RpcPathSingleNestedRpc\",\n\t\t\tHandler:    _FlowCombination_RpcPathSingleNestedRpc_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"RpcPathNestedRpc\",\n\t\t\tHandler:    _FlowCombination_RpcPathNestedRpc_Handler,\n\t\t},\n\t},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"RpcEmptyStream\",\n\t\t\tHandler:       _FlowCombination_RpcEmptyStream_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"StreamEmptyRpc\",\n\t\t\tHandler:       _FlowCombination_StreamEmptyRpc_Handler,\n\t\t\tClientStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"StreamEmptyStream\",\n\t\t\tHandler:       _FlowCombination_StreamEmptyStream_Handler,\n\t\t\tServerStreams: true,\n\t\t\tClientStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"RpcBodyStream\",\n\t\t\tHandler:       _FlowCombination_RpcBodyStream_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"RpcPathSingleNestedStream\",\n\t\t\tHandler:       _FlowCombination_RpcPathSingleNestedStream_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"RpcPathNestedStream\",\n\t\t\tHandler:       _FlowCombination_RpcPathNestedStream_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t},\n\tMetadata: \"examples/internal/proto/examplepb/flow_combination.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml",
    "content": "version: v1\nplugins:\n  - plugin: grpc-gateway\n    out: .\n    opt:\n      - paths=source_relative\n      - generate_unbound_methods=true\n  - plugin: openapiv2\n    out: .\n    opt:\n      - generate_unbound_methods=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generate_unbound_methods.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/generate_unbound_methods.proto\n\n// Generate Unannotated Methods Echo Service\n// Similar to echo_service.proto but without annotations and without external configuration.\n//\n// Generate Unannotated Methods Echo Service API consists of a single service which returns\n// a message.\n\npackage examplepb\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\ntype GenerateUnboundMethodsSimpleMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId       string               `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tNum      int64                `protobuf:\"varint,2,opt,name=num,proto3\" json:\"num,omitempty\"`\n\tDuration *durationpb.Duration `protobuf:\"bytes,3,opt,name=duration,proto3\" json:\"duration,omitempty\"`\n}\n\nfunc (x *GenerateUnboundMethodsSimpleMessage) Reset() {\n\t*x = GenerateUnboundMethodsSimpleMessage{}\n\tmi := &file_examples_internal_proto_examplepb_generate_unbound_methods_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *GenerateUnboundMethodsSimpleMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*GenerateUnboundMethodsSimpleMessage) ProtoMessage() {}\n\nfunc (x *GenerateUnboundMethodsSimpleMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_generate_unbound_methods_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use GenerateUnboundMethodsSimpleMessage.ProtoReflect.Descriptor instead.\nfunc (*GenerateUnboundMethodsSimpleMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *GenerateUnboundMethodsSimpleMessage) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *GenerateUnboundMethodsSimpleMessage) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (x *GenerateUnboundMethodsSimpleMessage) GetDuration() *durationpb.Duration {\n\tif x != nil {\n\t\treturn x.Duration\n\t}\n\treturn nil\n}\n\nvar File_examples_internal_proto_examplepb_generate_unbound_methods_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDesc = []byte{\n\t0x0a, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x6e, 0x62,\n\t0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x22, 0x7e, 0x0a, 0x23, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x6e,\n\t0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x53, 0x69, 0x6d, 0x70,\n\t0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,\n\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x64,\n\t0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x32, 0xc6, 0x04, 0x0a, 0x21, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55,\n\t0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x45, 0x63, 0x68,\n\t0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68,\n\t0x6f, 0x12, 0x53, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x75,\n\t0x6e, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x53, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,\n\t0x55, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x53, 0x69,\n\t0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x08,\n\t0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x53, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,\n\t0x74, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73,\n\t0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x53, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47,\n\t0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65,\n\t0x74, 0x68, 0x6f, 0x64, 0x73, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x12, 0xb6, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74,\n\t0x65, 0x12, 0x53, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x75,\n\t0x6e, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x53, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,\n\t0x55, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x53, 0x69,\n\t0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x4d, 0x5a, 0x4b, 0x67,\n\t0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65,\n\t0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescData = file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_generate_unbound_methods_proto_msgTypes = make([]protoimpl.MessageInfo, 1)\nvar file_examples_internal_proto_examplepb_generate_unbound_methods_proto_goTypes = []any{\n\t(*GenerateUnboundMethodsSimpleMessage)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage\n\t(*durationpb.Duration)(nil),                 // 1: google.protobuf.Duration\n}\nvar file_examples_internal_proto_examplepb_generate_unbound_methods_proto_depIdxs = []int32{\n\t1, // 0: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage.duration:type_name -> google.protobuf.Duration\n\t0, // 1: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage\n\t0, // 2: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService.EchoBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage\n\t0, // 3: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage\n\t0, // 4: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage\n\t0, // 5: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService.EchoBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage\n\t0, // 6: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage\n\t4, // [4:7] is the sub-list for method output_type\n\t1, // [1:4] is the sub-list for method input_type\n\t1, // [1:1] is the sub-list for extension type_name\n\t1, // [1:1] is the sub-list for extension extendee\n\t0, // [0:1] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_generate_unbound_methods_proto_init() }\nfunc file_examples_internal_proto_examplepb_generate_unbound_methods_proto_init() {\n\tif File_examples_internal_proto_examplepb_generate_unbound_methods_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   1,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_generate_unbound_methods_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_generate_unbound_methods_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_generate_unbound_methods_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_generate_unbound_methods_proto = out.File\n\tfile_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_generate_unbound_methods_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_generate_unbound_methods_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/generate_unbound_methods.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_GenerateUnboundMethodsEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client GenerateUnboundMethodsEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GenerateUnboundMethodsSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_GenerateUnboundMethodsEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server GenerateUnboundMethodsEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GenerateUnboundMethodsSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, client GenerateUnboundMethodsEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GenerateUnboundMethodsSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, server GenerateUnboundMethodsEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GenerateUnboundMethodsSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, client GenerateUnboundMethodsEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GenerateUnboundMethodsSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, server GenerateUnboundMethodsEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GenerateUnboundMethodsSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoDelete(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterGenerateUnboundMethodsEchoServiceHandlerServer registers the http handlers for service GenerateUnboundMethodsEchoService to \"mux\".\n// UnaryRPC     :call GenerateUnboundMethodsEchoServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGenerateUnboundMethodsEchoServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GenerateUnboundMethodsEchoServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_GenerateUnboundMethodsEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo\", runtime.WithHTTPPathPattern(\"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_GenerateUnboundMethodsEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_GenerateUnboundMethodsEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterGenerateUnboundMethodsEchoServiceHandlerFromEndpoint is same as RegisterGenerateUnboundMethodsEchoServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterGenerateUnboundMethodsEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterGenerateUnboundMethodsEchoServiceHandler(ctx, mux, conn)\n}\n\n// RegisterGenerateUnboundMethodsEchoServiceHandler registers the http handlers for service GenerateUnboundMethodsEchoService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterGenerateUnboundMethodsEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx, mux, NewGenerateUnboundMethodsEchoServiceClient(conn))\n}\n\n// RegisterGenerateUnboundMethodsEchoServiceHandlerClient registers the http handlers for service GenerateUnboundMethodsEchoService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"GenerateUnboundMethodsEchoServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"GenerateUnboundMethodsEchoServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"GenerateUnboundMethodsEchoServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GenerateUnboundMethodsEchoServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_GenerateUnboundMethodsEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo\", runtime.WithHTTPPathPattern(\"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_GenerateUnboundMethodsEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_GenerateUnboundMethodsEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_GenerateUnboundMethodsEchoService_Echo_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService\", \"Echo\"}, \"\"))\n\tpattern_GenerateUnboundMethodsEchoService_EchoBody_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService\", \"EchoBody\"}, \"\"))\n\tpattern_GenerateUnboundMethodsEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService\", \"EchoDelete\"}, \"\"))\n)\n\nvar (\n\tforward_GenerateUnboundMethodsEchoService_Echo_0       = runtime.ForwardResponseMessage\n\tforward_GenerateUnboundMethodsEchoService_EchoBody_0   = runtime.ForwardResponseMessage\n\tforward_GenerateUnboundMethodsEchoService_EchoDelete_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generate_unbound_methods.proto",
    "content": "syntax = \"proto3\";\n\n// Generate Unannotated Methods Echo Service\n// Similar to echo_service.proto but without annotations and without external configuration.\n//\n// Generate Unannotated Methods Echo Service API consists of a single service which returns\n// a message.\npackage grpc.gateway.examples.internal.proto.examplepb;\n\n// Do not need annotations.proto, can still use well known types as usual\nimport \"google/protobuf/duration.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\nmessage GenerateUnboundMethodsSimpleMessage {\n  // Id represents the message identifier.\n  string id = 1;\n  int64 num = 2;\n  google.protobuf.Duration duration = 3;\n}\n\n// GenerateUnboundMethodsEchoService service responds to incoming echo requests.\nservice GenerateUnboundMethodsEchoService {\n  // Echo method receives a simple message and returns it.\n  //\n  // The message posted as the id parameter will also be\n  // returned.\n  rpc Echo(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage);\n\n  // EchoBody method receives a simple message and returns it.\n  rpc EchoBody(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage);\n\n  // EchoDelete method receives a simple message and returns it.\n  rpc EchoDelete(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage);\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generate_unbound_methods.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/generate_unbound_methods.proto\",\n    \"description\": \"Generate Unannotated Methods Echo Service\\nSimilar to echo_service.proto but without annotations and without external configuration.\\n\\nGenerate Unannotated Methods Echo Service API consists of a single service which returns\\na message.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"GenerateUnboundMethodsEchoService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\",\n        \"description\": \"The message posted as the id parameter will also be\\nreturned.\",\n        \"operationId\": \"GenerateUnboundMethodsEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"GenerateUnboundMethodsEchoService\"\n        ]\n      }\n    },\n    \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody\": {\n      \"post\": {\n        \"summary\": \"EchoBody method receives a simple message and returns it.\",\n        \"operationId\": \"GenerateUnboundMethodsEchoService_EchoBody\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"GenerateUnboundMethodsEchoService\"\n        ]\n      }\n    },\n    \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete\": {\n      \"post\": {\n        \"summary\": \"EchoDelete method receives a simple message and returns it.\",\n        \"operationId\": \"GenerateUnboundMethodsEchoService_EchoDelete\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGenerateUnboundMethodsSimpleMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"GenerateUnboundMethodsEchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbGenerateUnboundMethodsSimpleMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"duration\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generate_unbound_methods_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/generate_unbound_methods.proto\n\n// Generate Unannotated Methods Echo Service\n// Similar to echo_service.proto but without annotations and without external configuration.\n//\n// Generate Unannotated Methods Echo Service API consists of a single service which returns\n// a message.\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tGenerateUnboundMethodsEchoService_Echo_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo\"\n\tGenerateUnboundMethodsEchoService_EchoBody_FullMethodName   = \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody\"\n\tGenerateUnboundMethodsEchoService_EchoDelete_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete\"\n)\n\n// GenerateUnboundMethodsEchoServiceClient is the client API for GenerateUnboundMethodsEchoService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// GenerateUnboundMethodsEchoService service responds to incoming echo requests.\ntype GenerateUnboundMethodsEchoServiceClient interface {\n\t// Echo method receives a simple message and returns it.\n\t//\n\t// The message posted as the id parameter will also be\n\t// returned.\n\tEcho(ctx context.Context, in *GenerateUnboundMethodsSimpleMessage, opts ...grpc.CallOption) (*GenerateUnboundMethodsSimpleMessage, error)\n\t// EchoBody method receives a simple message and returns it.\n\tEchoBody(ctx context.Context, in *GenerateUnboundMethodsSimpleMessage, opts ...grpc.CallOption) (*GenerateUnboundMethodsSimpleMessage, error)\n\t// EchoDelete method receives a simple message and returns it.\n\tEchoDelete(ctx context.Context, in *GenerateUnboundMethodsSimpleMessage, opts ...grpc.CallOption) (*GenerateUnboundMethodsSimpleMessage, error)\n}\n\ntype generateUnboundMethodsEchoServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewGenerateUnboundMethodsEchoServiceClient(cc grpc.ClientConnInterface) GenerateUnboundMethodsEchoServiceClient {\n\treturn &generateUnboundMethodsEchoServiceClient{cc}\n}\n\nfunc (c *generateUnboundMethodsEchoServiceClient) Echo(ctx context.Context, in *GenerateUnboundMethodsSimpleMessage, opts ...grpc.CallOption) (*GenerateUnboundMethodsSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(GenerateUnboundMethodsSimpleMessage)\n\terr := c.cc.Invoke(ctx, GenerateUnboundMethodsEchoService_Echo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *generateUnboundMethodsEchoServiceClient) EchoBody(ctx context.Context, in *GenerateUnboundMethodsSimpleMessage, opts ...grpc.CallOption) (*GenerateUnboundMethodsSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(GenerateUnboundMethodsSimpleMessage)\n\terr := c.cc.Invoke(ctx, GenerateUnboundMethodsEchoService_EchoBody_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *generateUnboundMethodsEchoServiceClient) EchoDelete(ctx context.Context, in *GenerateUnboundMethodsSimpleMessage, opts ...grpc.CallOption) (*GenerateUnboundMethodsSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(GenerateUnboundMethodsSimpleMessage)\n\terr := c.cc.Invoke(ctx, GenerateUnboundMethodsEchoService_EchoDelete_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// GenerateUnboundMethodsEchoServiceServer is the server API for GenerateUnboundMethodsEchoService service.\n// All implementations should embed UnimplementedGenerateUnboundMethodsEchoServiceServer\n// for forward compatibility.\n//\n// GenerateUnboundMethodsEchoService service responds to incoming echo requests.\ntype GenerateUnboundMethodsEchoServiceServer interface {\n\t// Echo method receives a simple message and returns it.\n\t//\n\t// The message posted as the id parameter will also be\n\t// returned.\n\tEcho(context.Context, *GenerateUnboundMethodsSimpleMessage) (*GenerateUnboundMethodsSimpleMessage, error)\n\t// EchoBody method receives a simple message and returns it.\n\tEchoBody(context.Context, *GenerateUnboundMethodsSimpleMessage) (*GenerateUnboundMethodsSimpleMessage, error)\n\t// EchoDelete method receives a simple message and returns it.\n\tEchoDelete(context.Context, *GenerateUnboundMethodsSimpleMessage) (*GenerateUnboundMethodsSimpleMessage, error)\n}\n\n// UnimplementedGenerateUnboundMethodsEchoServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedGenerateUnboundMethodsEchoServiceServer struct{}\n\nfunc (UnimplementedGenerateUnboundMethodsEchoServiceServer) Echo(context.Context, *GenerateUnboundMethodsSimpleMessage) (*GenerateUnboundMethodsSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Echo not implemented\")\n}\nfunc (UnimplementedGenerateUnboundMethodsEchoServiceServer) EchoBody(context.Context, *GenerateUnboundMethodsSimpleMessage) (*GenerateUnboundMethodsSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoBody not implemented\")\n}\nfunc (UnimplementedGenerateUnboundMethodsEchoServiceServer) EchoDelete(context.Context, *GenerateUnboundMethodsSimpleMessage) (*GenerateUnboundMethodsSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoDelete not implemented\")\n}\nfunc (UnimplementedGenerateUnboundMethodsEchoServiceServer) testEmbeddedByValue() {}\n\n// UnsafeGenerateUnboundMethodsEchoServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to GenerateUnboundMethodsEchoServiceServer will\n// result in compilation errors.\ntype UnsafeGenerateUnboundMethodsEchoServiceServer interface {\n\tmustEmbedUnimplementedGenerateUnboundMethodsEchoServiceServer()\n}\n\nfunc RegisterGenerateUnboundMethodsEchoServiceServer(s grpc.ServiceRegistrar, srv GenerateUnboundMethodsEchoServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedGenerateUnboundMethodsEchoServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&GenerateUnboundMethodsEchoService_ServiceDesc, srv)\n}\n\nfunc _GenerateUnboundMethodsEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GenerateUnboundMethodsSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(GenerateUnboundMethodsEchoServiceServer).Echo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: GenerateUnboundMethodsEchoService_Echo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(GenerateUnboundMethodsEchoServiceServer).Echo(ctx, req.(*GenerateUnboundMethodsSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _GenerateUnboundMethodsEchoService_EchoBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GenerateUnboundMethodsSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(GenerateUnboundMethodsEchoServiceServer).EchoBody(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: GenerateUnboundMethodsEchoService_EchoBody_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(GenerateUnboundMethodsEchoServiceServer).EchoBody(ctx, req.(*GenerateUnboundMethodsSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _GenerateUnboundMethodsEchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GenerateUnboundMethodsSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(GenerateUnboundMethodsEchoServiceServer).EchoDelete(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: GenerateUnboundMethodsEchoService_EchoDelete_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(GenerateUnboundMethodsEchoServiceServer).EchoDelete(ctx, req.(*GenerateUnboundMethodsSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// GenerateUnboundMethodsEchoService_ServiceDesc is the grpc.ServiceDesc for GenerateUnboundMethodsEchoService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar GenerateUnboundMethodsEchoService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService\",\n\tHandlerType: (*GenerateUnboundMethodsEchoServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Echo\",\n\t\t\tHandler:    _GenerateUnboundMethodsEchoService_Echo_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoBody\",\n\t\t\tHandler:    _GenerateUnboundMethodsEchoService_EchoBody_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoDelete\",\n\t\t\tHandler:    _GenerateUnboundMethodsEchoService_EchoDelete_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/generate_unbound_methods.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generated_input.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"examples/internal/proto/examplepb/a_bit_of_everything.proto\";\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/empty.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// This file is run through a genrule.\n\n// Defines some more operations to be added to ABitOfEverythingService\nservice GeneratedService {\n  rpc Create(ABitOfEverything) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v1/example/a_bit_of_everything/generated_create\"\n      body: \"*\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/generated_input.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/generated_input.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"GeneratedService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/a_bit_of_everything/generated_create\": {\n      \"post\": {\n        \"operationId\": \"GeneratedService_Create\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"GeneratedService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"ABitOfEverythingNested\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"ok\": \"TRUE\"\n      },\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"name is nested field.\"\n        },\n        \"amount\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"ok\": {\n          \"$ref\": \"#/definitions/NestedDeepEnum\",\n          \"description\": \"DeepEnum description.\"\n        }\n      },\n      \"description\": \"Nested is nested type.\"\n    },\n    \"MessagePathEnumNestedPathEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"GHI\",\n        \"JKL\"\n      ],\n      \"default\": \"GHI\"\n    },\n    \"NestedDeepEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"FALSE\",\n        \"TRUE\"\n      ],\n      \"default\": \"FALSE\",\n      \"description\": \"DeepEnum is one or zero.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\"\n    },\n    \"examplepbABitOfEverything\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"int64_value\": 12,\n        \"double_value\": 12.3\n      },\n      \"properties\": {\n        \"singleNested\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n        },\n        \"uuid\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\",\n          \"minLength\": 1,\n          \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n          \"x-internal\": true\n        },\n        \"nested\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"floatValue\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"default\": \"0.2\",\n          \"description\": \"Float value field\"\n        },\n        \"doubleValue\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"int64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"uint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"int32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"fixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"fixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"boolValue\": {\n          \"type\": \"boolean\"\n        },\n        \"stringValue\": {\n          \"type\": \"string\"\n        },\n        \"bytesValue\": {\n          \"type\": \"string\",\n          \"format\": \"byte\"\n        },\n        \"uint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"enumValue\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\"\n        },\n        \"pathEnumValue\": {\n          \"$ref\": \"#/definitions/pathenumPathEnum\"\n        },\n        \"nestedPathEnumValue\": {\n          \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n        },\n        \"sfixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sfixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"sint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"repeatedStringValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"oneofEmpty\": {\n          \"type\": \"object\",\n          \"properties\": {}\n        },\n        \"oneofString\": {\n          \"type\": \"string\"\n        },\n        \"mapValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"map of numeric enum\"\n        },\n        \"mappedStringValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Map of string description.\",\n          \"title\": \"Map of string title\"\n        },\n        \"mappedNestedValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"nonConventionalNameValue\": {\n          \"type\": \"string\"\n        },\n        \"timestampValue\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"repeatedEnumValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"repeated enum value. it is comma-separated in query\"\n        },\n        \"repeatedEnumAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"description\": \"Repeated numeric enum description.\",\n          \"title\": \"Repeated numeric enum title\"\n        },\n        \"enumValueAnnotation\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\",\n          \"description\": \"Numeric enum description.\",\n          \"title\": \"Numeric enum title\"\n        },\n        \"repeatedStringAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Repeated string description.\",\n          \"title\": \"Repeated string title\"\n        },\n        \"repeatedNestedAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          },\n          \"description\": \"Repeated nested object description.\",\n          \"title\": \"Repeated nested object title\"\n        },\n        \"nestedAnnotation\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n          \"description\": \"Nested object description.\",\n          \"title\": \"Nested object title\"\n        },\n        \"int64OverrideType\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"requiredStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as required in Open API definition\"\n        },\n        \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as readonly in Open API definition\",\n          \"readOnly\": true\n        },\n        \"optionalStringValue\": {\n          \"type\": \"string\"\n        },\n        \"productId\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"maxLength\": 19,\n            \"minLength\": 1,\n            \"pattern\": \"^[0-9]+$\"\n          },\n          \"description\": \"Only digits are allowed.\",\n          \"title\": \"Test openapiv2 generation of repeated fields\"\n        },\n        \"optionalStringField\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n        },\n        \"requiredStringField1\": {\n          \"type\": \"string\"\n        },\n        \"requiredStringField2\": {\n          \"type\": \"string\"\n        },\n        \"required_field_behavior_json_name_custom\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 handling of required json_name fields\"\n        },\n        \"required_field_schema_json_name_custom\": {\n          \"type\": \"string\"\n        },\n        \"trailingOnly\": {\n          \"type\": \"string\",\n          \"title\": \"Trailing only\"\n        },\n        \"trailingOnlyDot\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing only dot.\"\n        },\n        \"trailingBoth\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing both.\",\n          \"title\": \"Leading both\"\n        },\n        \"trailingMultiline\": {\n          \"type\": \"string\",\n          \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n          \"title\": \"Leading multiline\"\n        },\n        \"uuids\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"title\": \"Specify a custom format of repeated field items\"\n        }\n      },\n      \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n      \"title\": \"A bit of everything\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"required\": [\n        \"uuid\",\n        \"int64Value\",\n        \"doubleValue\",\n        \"required_field_schema_json_name_custom\",\n        \"floatValue\",\n        \"requiredStringViaFieldBehaviorAnnotation\",\n        \"requiredStringField1\",\n        \"requiredStringField2\",\n        \"required_field_behavior_json_name_custom\"\n      ],\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"examplepbNumericEnum\": {\n      \"type\": \"string\",\n      \"example\": \"ZERO\",\n      \"enum\": [\n        \"ZERO\",\n        \"ONE\"\n      ],\n      \"default\": \"ZERO\",\n      \"description\": \"NumericEnum is one or zero.\",\n      \"title\": \"NumericEnum\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"pathenumPathEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"ABC\",\n        \"DEF\"\n      ],\n      \"default\": \"ABC\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/ignore_comment.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - ignore_comments=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/ignore_comment.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/ignore_comment.proto\n\npackage examplepb\n\nimport (\n\t_ \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// This comment should be excluded from OpenAPI output\ntype FooRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// This comment should be excluded from OpenAPI output\n\tUsername string `protobuf:\"bytes,1,opt,name=username,proto3\" json:\"username,omitempty\"`\n\t// This comment should be excluded from OpenAPI output\n\tPassword string `protobuf:\"bytes,2,opt,name=password,proto3\" json:\"password,omitempty\"`\n}\n\nfunc (x *FooRequest) Reset() {\n\t*x = FooRequest{}\n\tmi := &file_examples_internal_proto_examplepb_ignore_comment_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *FooRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*FooRequest) ProtoMessage() {}\n\nfunc (x *FooRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_ignore_comment_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use FooRequest.ProtoReflect.Descriptor instead.\nfunc (*FooRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_ignore_comment_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *FooRequest) GetUsername() string {\n\tif x != nil {\n\t\treturn x.Username\n\t}\n\treturn \"\"\n}\n\nfunc (x *FooRequest) GetPassword() string {\n\tif x != nil {\n\t\treturn x.Password\n\t}\n\treturn \"\"\n}\n\n// This comment should be excluded from OpenAPI output\ntype FooReply struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n}\n\nfunc (x *FooReply) Reset() {\n\t*x = FooReply{}\n\tmi := &file_examples_internal_proto_examplepb_ignore_comment_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *FooReply) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*FooReply) ProtoMessage() {}\n\nfunc (x *FooReply) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_ignore_comment_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use FooReply.ProtoReflect.Descriptor instead.\nfunc (*FooReply) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_ignore_comment_proto_rawDescGZIP(), []int{1}\n}\n\nvar File_examples_internal_proto_examplepb_ignore_comment_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_ignore_comment_proto_rawDesc = []byte{\n\t0x0a, 0x36, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65,\n\t0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67,\n\t0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x46, 0x6f, 0x6f, 0x52, 0x65,\n\t0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d,\n\t0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0x92, 0x41, 0x25, 0x32, 0x23, 0x54, 0x68,\n\t0x69, 0x73, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68,\n\t0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,\n\t0x64, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x70,\n\t0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0x92,\n\t0x41, 0x25, 0x2a, 0x23, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72,\n\t0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,\n\t0x64, 0x22, 0x0a, 0x0a, 0x08, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x32, 0xa6, 0x01,\n\t0x0a, 0x0a, 0x46, 0x6f, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x97, 0x01, 0x0a,\n\t0x03, 0x46, 0x6f, 0x6f, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,\n\t0x1a, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x46, 0x6f, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93,\n\t0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x2f, 0x66, 0x6f, 0x6f, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73,\n\t0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_ignore_comment_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_ignore_comment_proto_rawDescData = file_examples_internal_proto_examplepb_ignore_comment_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_ignore_comment_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_ignore_comment_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_ignore_comment_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_ignore_comment_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_ignore_comment_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_ignore_comment_proto_msgTypes = make([]protoimpl.MessageInfo, 2)\nvar file_examples_internal_proto_examplepb_ignore_comment_proto_goTypes = []any{\n\t(*FooRequest)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.FooRequest\n\t(*FooReply)(nil),   // 1: grpc.gateway.examples.internal.proto.examplepb.FooReply\n}\nvar file_examples_internal_proto_examplepb_ignore_comment_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.proto.examplepb.FooService.Foo:input_type -> grpc.gateway.examples.internal.proto.examplepb.FooRequest\n\t1, // 1: grpc.gateway.examples.internal.proto.examplepb.FooService.Foo:output_type -> grpc.gateway.examples.internal.proto.examplepb.FooReply\n\t1, // [1:2] is the sub-list for method output_type\n\t0, // [0:1] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_ignore_comment_proto_init() }\nfunc file_examples_internal_proto_examplepb_ignore_comment_proto_init() {\n\tif File_examples_internal_proto_examplepb_ignore_comment_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_ignore_comment_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   2,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_ignore_comment_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_ignore_comment_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_ignore_comment_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_ignore_comment_proto = out.File\n\tfile_examples_internal_proto_examplepb_ignore_comment_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_ignore_comment_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_ignore_comment_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/ignore_comment.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/ignore_comment.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_FooService_Foo_0(ctx context.Context, marshaler runtime.Marshaler, client FooServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq FooRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Foo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_FooService_Foo_0(ctx context.Context, marshaler runtime.Marshaler, server FooServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq FooRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Foo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterFooServiceHandlerServer registers the http handlers for service FooService to \"mux\".\n// UnaryRPC     :call FooServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterFooServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterFooServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FooServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_FooService_Foo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FooService/Foo\", runtime.WithHTTPPathPattern(\"/v1/example/foo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_FooService_Foo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FooService_Foo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterFooServiceHandlerFromEndpoint is same as RegisterFooServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterFooServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterFooServiceHandler(ctx, mux, conn)\n}\n\n// RegisterFooServiceHandler registers the http handlers for service FooService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterFooServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterFooServiceHandlerClient(ctx, mux, NewFooServiceClient(conn))\n}\n\n// RegisterFooServiceHandlerClient registers the http handlers for service FooService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"FooServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"FooServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"FooServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterFooServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client FooServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_FooService_Foo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.FooService/Foo\", runtime.WithHTTPPathPattern(\"/v1/example/foo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_FooService_Foo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_FooService_Foo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_FooService_Foo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"foo\"}, \"\"))\n)\n\nvar (\n\tforward_FooService_Foo_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/ignore_comment.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\nimport \"protoc-gen-openapiv2/options/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// This comment should be excluded from OpenAPI output\nservice FooService {\n  // This comment should be excluded from OpenAPI output\n  rpc Foo(FooRequest) returns (FooReply) {\n    option (google.api.http) = {\n      post: \"/v1/example/foo\"\n      body: \"*\"\n    };\n  }\n}\n\n// This comment should be excluded from OpenAPI output\nmessage FooRequest {\n  // This comment should be excluded from OpenAPI output\n  string username = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: \"This annotation should be preserved\"}];\n  // This comment should be excluded from OpenAPI output\n  string password = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {title: \"This annotation should be preserved\"}];\n}\n\n// This comment should be excluded from OpenAPI output\nmessage FooReply {}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/ignore_comment.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/ignore_comment.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"FooService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/foo\": {\n      \"post\": {\n        \"operationId\": \"FooService_Foo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbFooReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbFooRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"FooService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbFooReply\": {\n      \"type\": \"object\"\n    },\n    \"examplepbFooRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"username\": {\n          \"type\": \"string\",\n          \"description\": \"This annotation should be preserved\"\n        },\n        \"password\": {\n          \"type\": \"string\",\n          \"title\": \"This annotation should be preserved\"\n        }\n      }\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/ignore_comment_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/ignore_comment.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tFooService_Foo_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.FooService/Foo\"\n)\n\n// FooServiceClient is the client API for FooService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// This comment should be excluded from OpenAPI output\ntype FooServiceClient interface {\n\t// This comment should be excluded from OpenAPI output\n\tFoo(ctx context.Context, in *FooRequest, opts ...grpc.CallOption) (*FooReply, error)\n}\n\ntype fooServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewFooServiceClient(cc grpc.ClientConnInterface) FooServiceClient {\n\treturn &fooServiceClient{cc}\n}\n\nfunc (c *fooServiceClient) Foo(ctx context.Context, in *FooRequest, opts ...grpc.CallOption) (*FooReply, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(FooReply)\n\terr := c.cc.Invoke(ctx, FooService_Foo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// FooServiceServer is the server API for FooService service.\n// All implementations should embed UnimplementedFooServiceServer\n// for forward compatibility.\n//\n// This comment should be excluded from OpenAPI output\ntype FooServiceServer interface {\n\t// This comment should be excluded from OpenAPI output\n\tFoo(context.Context, *FooRequest) (*FooReply, error)\n}\n\n// UnimplementedFooServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedFooServiceServer struct{}\n\nfunc (UnimplementedFooServiceServer) Foo(context.Context, *FooRequest) (*FooReply, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Foo not implemented\")\n}\nfunc (UnimplementedFooServiceServer) testEmbeddedByValue() {}\n\n// UnsafeFooServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to FooServiceServer will\n// result in compilation errors.\ntype UnsafeFooServiceServer interface {\n\tmustEmbedUnimplementedFooServiceServer()\n}\n\nfunc RegisterFooServiceServer(s grpc.ServiceRegistrar, srv FooServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedFooServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&FooService_ServiceDesc, srv)\n}\n\nfunc _FooService_Foo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(FooRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(FooServiceServer).Foo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: FooService_Foo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(FooServiceServer).Foo(ctx, req.(*FooRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// FooService_ServiceDesc is the grpc.ServiceDesc for FooService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar FooService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.FooService\",\n\tHandlerType: (*FooServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Foo\",\n\t\t\tHandler:    _FooService_Foo_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/ignore_comment.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/non_standard_names.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/non_standard_names.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// NonStandardMessage has oddly named fields.\ntype NonStandardMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId        string                    `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tNum       int64                     `protobuf:\"varint,2,opt,name=Num,proto3\" json:\"Num,omitempty\"`\n\tLineNum   int64                     `protobuf:\"varint,3,opt,name=line_num,json=lineNum,proto3\" json:\"line_num,omitempty\"`\n\tLangIdent string                    `protobuf:\"bytes,4,opt,name=langIdent,proto3\" json:\"langIdent,omitempty\"`\n\tSTATUS    string                    `protobuf:\"bytes,5,opt,name=STATUS,proto3\" json:\"STATUS,omitempty\"`\n\tEn_GB     int64                     `protobuf:\"varint,6,opt,name=en_GB,json=enGB,proto3\" json:\"en_GB,omitempty\"`\n\tNo        string                    `protobuf:\"bytes,7,opt,name=no,proto3\" json:\"no,omitempty\"`\n\tThing     *NonStandardMessage_Thing `protobuf:\"bytes,8,opt,name=thing,proto3\" json:\"thing,omitempty\"`\n}\n\nfunc (x *NonStandardMessage) Reset() {\n\t*x = NonStandardMessage{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessage) ProtoMessage() {}\n\nfunc (x *NonStandardMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessage.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *NonStandardMessage) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessage) GetLineNum() int64 {\n\tif x != nil {\n\t\treturn x.LineNum\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessage) GetLangIdent() string {\n\tif x != nil {\n\t\treturn x.LangIdent\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetSTATUS() string {\n\tif x != nil {\n\t\treturn x.STATUS\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetEn_GB() int64 {\n\tif x != nil {\n\t\treturn x.En_GB\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessage) GetNo() string {\n\tif x != nil {\n\t\treturn x.No\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetThing() *NonStandardMessage_Thing {\n\tif x != nil {\n\t\treturn x.Thing\n\t}\n\treturn nil\n}\n\ntype NonStandardUpdateRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBody       *NonStandardMessage    `protobuf:\"bytes,1,opt,name=body,proto3\" json:\"body,omitempty\"`\n\tUpdateMask *fieldmaskpb.FieldMask `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n}\n\nfunc (x *NonStandardUpdateRequest) Reset() {\n\t*x = NonStandardUpdateRequest{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardUpdateRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardUpdateRequest) ProtoMessage() {}\n\nfunc (x *NonStandardUpdateRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardUpdateRequest.ProtoReflect.Descriptor instead.\nfunc (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *NonStandardUpdateRequest) GetBody() *NonStandardMessage {\n\tif x != nil {\n\t\treturn x.Body\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\n// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion.\ntype NonStandardMessageWithJSONNames struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId        string                                 `protobuf:\"bytes,1,opt,name=id,json=ID,proto3\" json:\"id,omitempty\"`\n\tNum       int64                                  `protobuf:\"varint,2,opt,name=Num,proto3\" json:\"Num,omitempty\"`\n\tLineNum   int64                                  `protobuf:\"varint,3,opt,name=line_num,json=LineNum,proto3\" json:\"line_num,omitempty\"`\n\tLangIdent string                                 `protobuf:\"bytes,4,opt,name=langIdent,proto3\" json:\"langIdent,omitempty\"`\n\tSTATUS    string                                 `protobuf:\"bytes,5,opt,name=STATUS,json=status,proto3\" json:\"STATUS,omitempty\"`\n\tEn_GB     int64                                  `protobuf:\"varint,6,opt,name=en_GB,json=En_GB,proto3\" json:\"en_GB,omitempty\"`\n\tNo        string                                 `protobuf:\"bytes,7,opt,name=no,json=yes,proto3\" json:\"no,omitempty\"`\n\tThing     *NonStandardMessageWithJSONNames_Thing `protobuf:\"bytes,8,opt,name=thing,json=Thingy,proto3\" json:\"thing,omitempty\"`\n}\n\nfunc (x *NonStandardMessageWithJSONNames) Reset() {\n\t*x = NonStandardMessageWithJSONNames{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessageWithJSONNames) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessageWithJSONNames) ProtoMessage() {}\n\nfunc (x *NonStandardMessageWithJSONNames) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessageWithJSONNames.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetLineNum() int64 {\n\tif x != nil {\n\t\treturn x.LineNum\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetLangIdent() string {\n\tif x != nil {\n\t\treturn x.LangIdent\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetSTATUS() string {\n\tif x != nil {\n\t\treturn x.STATUS\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetEn_GB() int64 {\n\tif x != nil {\n\t\treturn x.En_GB\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetNo() string {\n\tif x != nil {\n\t\treturn x.No\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessageWithJSONNames_Thing {\n\tif x != nil {\n\t\treturn x.Thing\n\t}\n\treturn nil\n}\n\ntype NonStandardWithJSONNamesUpdateRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBody       *NonStandardMessageWithJSONNames `protobuf:\"bytes,1,opt,name=body,proto3\" json:\"body,omitempty\"`\n\tUpdateMask *fieldmaskpb.FieldMask           `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) Reset() {\n\t*x = NonStandardWithJSONNamesUpdateRequest{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardWithJSONNamesUpdateRequest.ProtoReflect.Descriptor instead.\nfunc (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWithJSONNames {\n\tif x != nil {\n\t\treturn x.Body\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\ntype NonStandardMessage_Thing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubThing *NonStandardMessage_Thing_SubThing `protobuf:\"bytes,1,opt,name=subThing,proto3\" json:\"subThing,omitempty\"`\n}\n\nfunc (x *NonStandardMessage_Thing) Reset() {\n\t*x = NonStandardMessage_Thing{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessage_Thing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessage_Thing) ProtoMessage() {}\n\nfunc (x *NonStandardMessage_Thing) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessage_Thing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0}\n}\n\nfunc (x *NonStandardMessage_Thing) GetSubThing() *NonStandardMessage_Thing_SubThing {\n\tif x != nil {\n\t\treturn x.SubThing\n\t}\n\treturn nil\n}\n\ntype NonStandardMessage_Thing_SubThing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubValue string `protobuf:\"bytes,1,opt,name=sub_value,json=subValue,proto3\" json:\"sub_value,omitempty\"`\n}\n\nfunc (x *NonStandardMessage_Thing_SubThing) Reset() {\n\t*x = NonStandardMessage_Thing_SubThing{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessage_Thing_SubThing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessage_Thing_SubThing) ProtoMessage() {}\n\nfunc (x *NonStandardMessage_Thing_SubThing) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessage_Thing_SubThing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0, 0}\n}\n\nfunc (x *NonStandardMessage_Thing_SubThing) GetSubValue() string {\n\tif x != nil {\n\t\treturn x.SubValue\n\t}\n\treturn \"\"\n}\n\ntype NonStandardMessageWithJSONNames_Thing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubThing *NonStandardMessageWithJSONNames_Thing_SubThing `protobuf:\"bytes,1,opt,name=subThing,json=SubThing,proto3\" json:\"subThing,omitempty\"`\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) Reset() {\n\t*x = NonStandardMessageWithJSONNames_Thing{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessageWithJSONNames_Thing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0}\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) GetSubThing() *NonStandardMessageWithJSONNames_Thing_SubThing {\n\tif x != nil {\n\t\treturn x.SubThing\n\t}\n\treturn nil\n}\n\ntype NonStandardMessageWithJSONNames_Thing_SubThing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubValue string `protobuf:\"bytes,1,opt,name=sub_value,json=sub_Value,proto3\" json:\"sub_value,omitempty\"`\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) Reset() {\n\t*x = NonStandardMessageWithJSONNames_Thing_SubThing{}\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[7]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[7]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessageWithJSONNames_Thing_SubThing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0, 0}\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) GetSubValue() string {\n\tif x != nil {\n\t\treturn x.SubValue\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_proto_examplepb_non_standard_names_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc = []byte{\n\t0x0a, 0x3a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64,\n\t0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c,\n\t0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x03, 0x0a,\n\t0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,\n\t0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75,\n\t0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d,\n\t0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16,\n\t0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,\n\t0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x13, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18,\n\t0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x65, 0x6e, 0x47, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x6e,\n\t0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x5e, 0x0a, 0x05, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53,\n\t0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54,\n\t0x68, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x9f, 0x01, 0x0a, 0x05,\n\t0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6d, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e,\n\t0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e,\n\t0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e,\n\t0x67, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x75, 0x62, 0x54,\n\t0x68, 0x69, 0x6e, 0x67, 0x1a, 0x27, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67,\n\t0x12, 0x1b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xaf, 0x01,\n\t0x0a, 0x18, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64,\n\t0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x04, 0x62, 0x6f,\n\t0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61,\n\t0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x62, 0x6f,\n\t0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73,\n\t0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d,\n\t0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22,\n\t0xd9, 0x03, 0x0a, 0x1f, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61,\n\t0x6d, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x02, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,\n\t0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75,\n\t0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d,\n\t0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16,\n\t0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,\n\t0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18,\n\t0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x45, 0x6e, 0x5f, 0x47, 0x42, 0x12, 0x0f, 0x0a, 0x02,\n\t0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x6c, 0x0a,\n\t0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x55, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f,\n\t0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68,\n\t0x69, 0x6e, 0x67, 0x52, 0x06, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x79, 0x1a, 0xad, 0x01, 0x0a, 0x05,\n\t0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x7a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e,\n\t0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e,\n\t0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a,\n\t0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53,\n\t0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e,\n\t0x67, 0x1a, 0x28, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a,\n\t0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x25,\n\t0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a,\n\t0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,\n\t0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x63, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e,\n\t0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70,\n\t0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64,\n\t0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xdb, 0x03, 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53,\n\t0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc5,\n\t0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74,\n\t0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,\n\t0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a,\n\t0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f,\n\t0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0xfc, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74,\n\t0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x55,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a,\n\t0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,\n\t0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61,\n\t0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f,\n\t0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x04,\n\t0x62, 0x6f, 0x64, 0x79, 0x32, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75,\n\t0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f,\n\t0x6e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,\n\t0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74,\n\t0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f,\n\t0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_non_standard_names_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData = file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_non_standard_names_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes = make([]protoimpl.MessageInfo, 8)\nvar file_examples_internal_proto_examplepb_non_standard_names_proto_goTypes = []any{\n\t(*NonStandardMessage)(nil),                             // 0: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage\n\t(*NonStandardUpdateRequest)(nil),                       // 1: grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest\n\t(*NonStandardMessageWithJSONNames)(nil),                // 2: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames\n\t(*NonStandardWithJSONNamesUpdateRequest)(nil),          // 3: grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest\n\t(*NonStandardMessage_Thing)(nil),                       // 4: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing\n\t(*NonStandardMessage_Thing_SubThing)(nil),              // 5: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing.SubThing\n\t(*NonStandardMessageWithJSONNames_Thing)(nil),          // 6: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing\n\t(*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing\n\t(*fieldmaskpb.FieldMask)(nil),                          // 8: google.protobuf.FieldMask\n}\nvar file_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs = []int32{\n\t4,  // 0: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing\n\t0,  // 1: grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest.body:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage\n\t8,  // 2: grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask\n\t6,  // 3: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.thing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing\n\t2,  // 4: grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest.body:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames\n\t8,  // 5: grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask\n\t5,  // 6: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing.subThing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing.SubThing\n\t7,  // 7: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing.subThing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing\n\t1,  // 8: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest\n\t3,  // 9: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.UpdateWithJSONNames:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest\n\t0,  // 10: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.Update:output_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage\n\t2,  // 11: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.UpdateWithJSONNames:output_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames\n\t10, // [10:12] is the sub-list for method output_type\n\t8,  // [8:10] is the sub-list for method input_type\n\t8,  // [8:8] is the sub-list for extension type_name\n\t8,  // [8:8] is the sub-list for extension extendee\n\t0,  // [0:8] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_non_standard_names_proto_init() }\nfunc file_examples_internal_proto_examplepb_non_standard_names_proto_init() {\n\tif File_examples_internal_proto_examplepb_non_standard_names_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   8,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_non_standard_names_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_non_standard_names_proto = out.File\n\tfile_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_non_standard_names_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/non_standard_names.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/non_standard_names.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_NonStandardService_Update_0 = &utilities.DoubleArray{Encoding: map[string]int{\"body\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_NonStandardService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client NonStandardServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonStandardUpdateRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_Update_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_NonStandardService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server NonStandardServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonStandardUpdateRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_Update_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Update(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_NonStandardService_UpdateWithJSONNames_0 = &utilities.DoubleArray{Encoding: map[string]int{\"body\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, marshaler runtime.Marshaler, client NonStandardServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonStandardWithJSONNamesUpdateRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_UpdateWithJSONNames_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.UpdateWithJSONNames(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, marshaler runtime.Marshaler, server NonStandardServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq NonStandardWithJSONNamesUpdateRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.UpdateMask = fieldMask\n\t\t}\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_UpdateWithJSONNames_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.UpdateWithJSONNames(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterNonStandardServiceHandlerServer registers the http handlers for service NonStandardService to \"mux\".\n// UnaryRPC     :call NonStandardServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterNonStandardServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server NonStandardServiceServer) error {\n\tmux.Handle(http.MethodPatch, pattern_NonStandardService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update\", runtime.WithHTTPPathPattern(\"/v1/example/non_standard/update\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_NonStandardService_Update_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_NonStandardService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_NonStandardService_UpdateWithJSONNames_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames\", runtime.WithHTTPPathPattern(\"/v1/example/non_standard/update_with_json_names\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_NonStandardService_UpdateWithJSONNames_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_NonStandardService_UpdateWithJSONNames_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterNonStandardServiceHandlerFromEndpoint is same as RegisterNonStandardServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterNonStandardServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterNonStandardServiceHandler(ctx, mux, conn)\n}\n\n// RegisterNonStandardServiceHandler registers the http handlers for service NonStandardService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterNonStandardServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterNonStandardServiceHandlerClient(ctx, mux, NewNonStandardServiceClient(conn))\n}\n\n// RegisterNonStandardServiceHandlerClient registers the http handlers for service NonStandardService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"NonStandardServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"NonStandardServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"NonStandardServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client NonStandardServiceClient) error {\n\tmux.Handle(http.MethodPatch, pattern_NonStandardService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update\", runtime.WithHTTPPathPattern(\"/v1/example/non_standard/update\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_NonStandardService_Update_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_NonStandardService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_NonStandardService_UpdateWithJSONNames_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames\", runtime.WithHTTPPathPattern(\"/v1/example/non_standard/update_with_json_names\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_NonStandardService_UpdateWithJSONNames_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_NonStandardService_UpdateWithJSONNames_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_NonStandardService_Update_0              = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"non_standard\", \"update\"}, \"\"))\n\tpattern_NonStandardService_UpdateWithJSONNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"non_standard\", \"update_with_json_names\"}, \"\"))\n)\n\nvar (\n\tforward_NonStandardService_Update_0              = runtime.ForwardResponseMessage\n\tforward_NonStandardService_UpdateWithJSONNames_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/non_standard_names.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/field_mask.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// NonStandardMessage has oddly named fields.\nmessage NonStandardMessage {\n  // Id represents the message identifier.\n  string id = 1;\n  int64 Num = 2;\n  int64 line_num = 3;\n  string langIdent = 4;\n  string STATUS = 5;\n  int64 en_GB = 6;\n  string no = 7;\n\n  message Thing {\n    message SubThing {\n      string sub_value = 1;\n    }\n    SubThing subThing = 1;\n  }\n  Thing thing = 8;\n}\n\nmessage NonStandardUpdateRequest {\n  NonStandardMessage body = 1;\n  google.protobuf.FieldMask update_mask = 2;\n}\n\n// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion.\nmessage NonStandardMessageWithJSONNames {\n  // Id represents the message identifier.\n  string id = 1 [json_name = \"ID\"];\n  int64 Num = 2 [json_name = \"Num\"];\n  int64 line_num = 3 [json_name = \"LineNum\"];\n  string langIdent = 4 [json_name = \"langIdent\"];\n  string STATUS = 5 [json_name = \"status\"];\n  int64 en_GB = 6 [json_name = \"En_GB\"];\n  string no = 7 [json_name = \"yes\"];\n\n  message Thing {\n    message SubThing {\n      string sub_value = 1 [json_name = \"sub_Value\"];\n    }\n    SubThing subThing = 1 [json_name = \"SubThing\"];\n  }\n  Thing thing = 8 [json_name = \"Thingy\"];\n}\n\nmessage NonStandardWithJSONNamesUpdateRequest {\n  NonStandardMessageWithJSONNames body = 1;\n  google.protobuf.FieldMask update_mask = 2;\n}\n\n// NonStandardService responds to incoming messages, applies a field mask and returns the masked response.\nservice NonStandardService {\n  // Apply field mask to empty NonStandardMessage and return result.\n  rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) {\n    option (google.api.http) = {\n      patch: \"/v1/example/non_standard/update\"\n      body: \"body\"\n    };\n  }\n\n  // Apply field mask to empty NonStandardMessageWithJSONNames and return result.\n  rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) {\n    option (google.api.http) = {\n      patch: \"/v1/example/non_standard/update_with_json_names\"\n      body: \"body\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/non_standard_names.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/non_standard_names.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"NonStandardService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/non_standard/update\": {\n      \"patch\": {\n        \"summary\": \"Apply field mask to empty NonStandardMessage and return result.\",\n        \"operationId\": \"NonStandardService_Update\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"NonStandardService\"\n        ]\n      }\n    },\n    \"/v1/example/non_standard/update_with_json_names\": {\n      \"patch\": {\n        \"summary\": \"Apply field mask to empty NonStandardMessageWithJSONNames and return result.\",\n        \"operationId\": \"NonStandardService_UpdateWithJSONNames\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNames\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNames\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"NonStandardService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbNonStandardMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"Num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"langIdent\": {\n          \"type\": \"string\"\n        },\n        \"STATUS\": {\n          \"type\": \"string\"\n        },\n        \"enGB\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"type\": \"string\"\n        },\n        \"thing\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageThing\"\n        }\n      },\n      \"description\": \"NonStandardMessage has oddly named fields.\"\n    },\n    \"examplepbNonStandardMessageThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"subThing\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageThingSubThing\"\n        }\n      }\n    },\n    \"examplepbNonStandardMessageThingSubThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"subValue\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"examplepbNonStandardMessageWithJSONNames\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"ID\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"Num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"LineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"langIdent\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"type\": \"string\"\n        },\n        \"En_GB\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"yes\": {\n          \"type\": \"string\"\n        },\n        \"Thingy\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNamesThing\"\n        }\n      },\n      \"description\": \"NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion.\"\n    },\n    \"examplepbNonStandardMessageWithJSONNamesThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"SubThing\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNamesThingSubThing\"\n        }\n      }\n    },\n    \"examplepbNonStandardMessageWithJSONNamesThingSubThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"sub_Value\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/non_standard_names_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/non_standard_names.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tNonStandardService_Update_FullMethodName              = \"/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update\"\n\tNonStandardService_UpdateWithJSONNames_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames\"\n)\n\n// NonStandardServiceClient is the client API for NonStandardService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// NonStandardService responds to incoming messages, applies a field mask and returns the masked response.\ntype NonStandardServiceClient interface {\n\t// Apply field mask to empty NonStandardMessage and return result.\n\tUpdate(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error)\n\t// Apply field mask to empty NonStandardMessageWithJSONNames and return result.\n\tUpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error)\n}\n\ntype nonStandardServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewNonStandardServiceClient(cc grpc.ClientConnInterface) NonStandardServiceClient {\n\treturn &nonStandardServiceClient{cc}\n}\n\nfunc (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(NonStandardMessage)\n\terr := c.cc.Invoke(ctx, NonStandardService_Update_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *nonStandardServiceClient) UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(NonStandardMessageWithJSONNames)\n\terr := c.cc.Invoke(ctx, NonStandardService_UpdateWithJSONNames_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// NonStandardServiceServer is the server API for NonStandardService service.\n// All implementations should embed UnimplementedNonStandardServiceServer\n// for forward compatibility.\n//\n// NonStandardService responds to incoming messages, applies a field mask and returns the masked response.\ntype NonStandardServiceServer interface {\n\t// Apply field mask to empty NonStandardMessage and return result.\n\tUpdate(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error)\n\t// Apply field mask to empty NonStandardMessageWithJSONNames and return result.\n\tUpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error)\n}\n\n// UnimplementedNonStandardServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedNonStandardServiceServer struct{}\n\nfunc (UnimplementedNonStandardServiceServer) Update(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Update not implemented\")\n}\nfunc (UnimplementedNonStandardServiceServer) UpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateWithJSONNames not implemented\")\n}\nfunc (UnimplementedNonStandardServiceServer) testEmbeddedByValue() {}\n\n// UnsafeNonStandardServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to NonStandardServiceServer will\n// result in compilation errors.\ntype UnsafeNonStandardServiceServer interface {\n\tmustEmbedUnimplementedNonStandardServiceServer()\n}\n\nfunc RegisterNonStandardServiceServer(s grpc.ServiceRegistrar, srv NonStandardServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedNonStandardServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&NonStandardService_ServiceDesc, srv)\n}\n\nfunc _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(NonStandardUpdateRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(NonStandardServiceServer).Update(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: NonStandardService_Update_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(NonStandardServiceServer).Update(ctx, req.(*NonStandardUpdateRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(NonStandardWithJSONNamesUpdateRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: NonStandardService_UpdateWithJSONNames_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, req.(*NonStandardWithJSONNamesUpdateRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// NonStandardService_ServiceDesc is the grpc.ServiceDesc for NonStandardService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar NonStandardService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.NonStandardService\",\n\tHandlerType: (*NonStandardServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Update\",\n\t\t\tHandler:    _NonStandardService_Update_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateWithJSONNames\",\n\t\t\tHandler:    _NonStandardService_UpdateWithJSONNames_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/non_standard_names.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/opaque.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - remote: buf.build/protocolbuffers/go:v1.36.6\n    out: .\n    opt:\n      - paths=source_relative\n      - default_api_level=API_OPAQUE\n  - remote: buf.build/grpc/go:v1.5.1\n    out: .\n    opt:\n      - paths=source_relative\n      - require_unimplemented_servers=false\n  - local: protoc-gen-grpc-gateway\n    out: .\n    opt:\n      - paths=source_relative\n      - use_opaque_api=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/opaque.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.6\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/opaque.proto\n\npackage examplepb\n\nimport (\n\tsub \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\ttimestamppb \"google.golang.org/protobuf/types/known/timestamppb\"\n\twrapperspb \"google.golang.org/protobuf/types/known/wrapperspb\"\n\treflect \"reflect\"\n\tunsafe \"unsafe\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype OpaqueSearchProductsRequest_OpaqueSortOrder int32\n\nconst (\n\tOpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_UNSPECIFIED       OpaqueSearchProductsRequest_OpaqueSortOrder = 0\n\tOpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_RELEVANCE         OpaqueSearchProductsRequest_OpaqueSortOrder = 1\n\tOpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH OpaqueSearchProductsRequest_OpaqueSortOrder = 2\n\tOpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW OpaqueSearchProductsRequest_OpaqueSortOrder = 3\n\tOpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_NEWEST_FIRST      OpaqueSearchProductsRequest_OpaqueSortOrder = 4\n\tOpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_RATING            OpaqueSearchProductsRequest_OpaqueSortOrder = 5\n\tOpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_POPULARITY        OpaqueSearchProductsRequest_OpaqueSortOrder = 6\n)\n\n// Enum value maps for OpaqueSearchProductsRequest_OpaqueSortOrder.\nvar (\n\tOpaqueSearchProductsRequest_OpaqueSortOrder_name = map[int32]string{\n\t\t0: \"OPAQUE_SORT_ORDER_UNSPECIFIED\",\n\t\t1: \"OPAQUE_SORT_ORDER_RELEVANCE\",\n\t\t2: \"OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH\",\n\t\t3: \"OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW\",\n\t\t4: \"OPAQUE_SORT_ORDER_NEWEST_FIRST\",\n\t\t5: \"OPAQUE_SORT_ORDER_RATING\",\n\t\t6: \"OPAQUE_SORT_ORDER_POPULARITY\",\n\t}\n\tOpaqueSearchProductsRequest_OpaqueSortOrder_value = map[string]int32{\n\t\t\"OPAQUE_SORT_ORDER_UNSPECIFIED\":       0,\n\t\t\"OPAQUE_SORT_ORDER_RELEVANCE\":         1,\n\t\t\"OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH\": 2,\n\t\t\"OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW\": 3,\n\t\t\"OPAQUE_SORT_ORDER_NEWEST_FIRST\":      4,\n\t\t\"OPAQUE_SORT_ORDER_RATING\":            5,\n\t\t\"OPAQUE_SORT_ORDER_POPULARITY\":        6,\n\t}\n)\n\nfunc (x OpaqueSearchProductsRequest_OpaqueSortOrder) Enum() *OpaqueSearchProductsRequest_OpaqueSortOrder {\n\tp := new(OpaqueSearchProductsRequest_OpaqueSortOrder)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueSearchProductsRequest_OpaqueSortOrder) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueSearchProductsRequest_OpaqueSortOrder) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[0].Descriptor()\n}\n\nfunc (OpaqueSearchProductsRequest_OpaqueSortOrder) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[0]\n}\n\nfunc (x OpaqueSearchProductsRequest_OpaqueSortOrder) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype OpaqueAddress_OpaqueAddressType int32\n\nconst (\n\tOpaqueAddress_OPAQUE_ADDRESS_TYPE_UNSPECIFIED OpaqueAddress_OpaqueAddressType = 0\n\tOpaqueAddress_OPAQUE_ADDRESS_TYPE_RESIDENTIAL OpaqueAddress_OpaqueAddressType = 1\n\tOpaqueAddress_OPAQUE_ADDRESS_TYPE_BUSINESS    OpaqueAddress_OpaqueAddressType = 2\n\tOpaqueAddress_OPAQUE_ADDRESS_TYPE_SHIPPING    OpaqueAddress_OpaqueAddressType = 3\n\tOpaqueAddress_OPAQUE_ADDRESS_TYPE_BILLING     OpaqueAddress_OpaqueAddressType = 4\n)\n\n// Enum value maps for OpaqueAddress_OpaqueAddressType.\nvar (\n\tOpaqueAddress_OpaqueAddressType_name = map[int32]string{\n\t\t0: \"OPAQUE_ADDRESS_TYPE_UNSPECIFIED\",\n\t\t1: \"OPAQUE_ADDRESS_TYPE_RESIDENTIAL\",\n\t\t2: \"OPAQUE_ADDRESS_TYPE_BUSINESS\",\n\t\t3: \"OPAQUE_ADDRESS_TYPE_SHIPPING\",\n\t\t4: \"OPAQUE_ADDRESS_TYPE_BILLING\",\n\t}\n\tOpaqueAddress_OpaqueAddressType_value = map[string]int32{\n\t\t\"OPAQUE_ADDRESS_TYPE_UNSPECIFIED\": 0,\n\t\t\"OPAQUE_ADDRESS_TYPE_RESIDENTIAL\": 1,\n\t\t\"OPAQUE_ADDRESS_TYPE_BUSINESS\":    2,\n\t\t\"OPAQUE_ADDRESS_TYPE_SHIPPING\":    3,\n\t\t\"OPAQUE_ADDRESS_TYPE_BILLING\":     4,\n\t}\n)\n\nfunc (x OpaqueAddress_OpaqueAddressType) Enum() *OpaqueAddress_OpaqueAddressType {\n\tp := new(OpaqueAddress_OpaqueAddressType)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueAddress_OpaqueAddressType) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueAddress_OpaqueAddressType) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[1].Descriptor()\n}\n\nfunc (OpaqueAddress_OpaqueAddressType) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[1]\n}\n\nfunc (x OpaqueAddress_OpaqueAddressType) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype OpaqueProduct_OpaqueProductStatus int32\n\nconst (\n\tOpaqueProduct_OPAQUE_PRODUCT_STATUS_UNSPECIFIED  OpaqueProduct_OpaqueProductStatus = 0\n\tOpaqueProduct_OPAQUE_PRODUCT_STATUS_DRAFT        OpaqueProduct_OpaqueProductStatus = 1\n\tOpaqueProduct_OPAQUE_PRODUCT_STATUS_ACTIVE       OpaqueProduct_OpaqueProductStatus = 2\n\tOpaqueProduct_OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK OpaqueProduct_OpaqueProductStatus = 3\n\tOpaqueProduct_OPAQUE_PRODUCT_STATUS_DISCONTINUED OpaqueProduct_OpaqueProductStatus = 4\n)\n\n// Enum value maps for OpaqueProduct_OpaqueProductStatus.\nvar (\n\tOpaqueProduct_OpaqueProductStatus_name = map[int32]string{\n\t\t0: \"OPAQUE_PRODUCT_STATUS_UNSPECIFIED\",\n\t\t1: \"OPAQUE_PRODUCT_STATUS_DRAFT\",\n\t\t2: \"OPAQUE_PRODUCT_STATUS_ACTIVE\",\n\t\t3: \"OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK\",\n\t\t4: \"OPAQUE_PRODUCT_STATUS_DISCONTINUED\",\n\t}\n\tOpaqueProduct_OpaqueProductStatus_value = map[string]int32{\n\t\t\"OPAQUE_PRODUCT_STATUS_UNSPECIFIED\":  0,\n\t\t\"OPAQUE_PRODUCT_STATUS_DRAFT\":        1,\n\t\t\"OPAQUE_PRODUCT_STATUS_ACTIVE\":       2,\n\t\t\"OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK\": 3,\n\t\t\"OPAQUE_PRODUCT_STATUS_DISCONTINUED\": 4,\n\t}\n)\n\nfunc (x OpaqueProduct_OpaqueProductStatus) Enum() *OpaqueProduct_OpaqueProductStatus {\n\tp := new(OpaqueProduct_OpaqueProductStatus)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueProduct_OpaqueProductStatus) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueProduct_OpaqueProductStatus) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[2].Descriptor()\n}\n\nfunc (OpaqueProduct_OpaqueProductStatus) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[2]\n}\n\nfunc (x OpaqueProduct_OpaqueProductStatus) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype OpaqueProduct_OpaqueProductDimensions_OpaqueUnit int32\n\nconst (\n\tOpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_UNSPECIFIED OpaqueProduct_OpaqueProductDimensions_OpaqueUnit = 0\n\tOpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_METRIC      OpaqueProduct_OpaqueProductDimensions_OpaqueUnit = 1\n\tOpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_IMPERIAL    OpaqueProduct_OpaqueProductDimensions_OpaqueUnit = 2\n)\n\n// Enum value maps for OpaqueProduct_OpaqueProductDimensions_OpaqueUnit.\nvar (\n\tOpaqueProduct_OpaqueProductDimensions_OpaqueUnit_name = map[int32]string{\n\t\t0: \"OPAQUE_UNIT_UNSPECIFIED\",\n\t\t1: \"OPAQUE_UNIT_METRIC\",\n\t\t2: \"OPAQUE_UNIT_IMPERIAL\",\n\t}\n\tOpaqueProduct_OpaqueProductDimensions_OpaqueUnit_value = map[string]int32{\n\t\t\"OPAQUE_UNIT_UNSPECIFIED\": 0,\n\t\t\"OPAQUE_UNIT_METRIC\":      1,\n\t\t\"OPAQUE_UNIT_IMPERIAL\":    2,\n\t}\n)\n\nfunc (x OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Enum() *OpaqueProduct_OpaqueProductDimensions_OpaqueUnit {\n\tp := new(OpaqueProduct_OpaqueProductDimensions_OpaqueUnit)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[3].Descriptor()\n}\n\nfunc (OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[3]\n}\n\nfunc (x OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype OpaqueCustomer_OpaqueCustomerStatus int32\n\nconst (\n\tOpaqueCustomer_OPAQUE_CUSTOMER_STATUS_UNSPECIFIED OpaqueCustomer_OpaqueCustomerStatus = 0\n\tOpaqueCustomer_OPAQUE_CUSTOMER_STATUS_ACTIVE      OpaqueCustomer_OpaqueCustomerStatus = 1\n\tOpaqueCustomer_OPAQUE_CUSTOMER_STATUS_INACTIVE    OpaqueCustomer_OpaqueCustomerStatus = 2\n\tOpaqueCustomer_OPAQUE_CUSTOMER_STATUS_SUSPENDED   OpaqueCustomer_OpaqueCustomerStatus = 3\n\tOpaqueCustomer_OPAQUE_CUSTOMER_STATUS_DELETED     OpaqueCustomer_OpaqueCustomerStatus = 4\n)\n\n// Enum value maps for OpaqueCustomer_OpaqueCustomerStatus.\nvar (\n\tOpaqueCustomer_OpaqueCustomerStatus_name = map[int32]string{\n\t\t0: \"OPAQUE_CUSTOMER_STATUS_UNSPECIFIED\",\n\t\t1: \"OPAQUE_CUSTOMER_STATUS_ACTIVE\",\n\t\t2: \"OPAQUE_CUSTOMER_STATUS_INACTIVE\",\n\t\t3: \"OPAQUE_CUSTOMER_STATUS_SUSPENDED\",\n\t\t4: \"OPAQUE_CUSTOMER_STATUS_DELETED\",\n\t}\n\tOpaqueCustomer_OpaqueCustomerStatus_value = map[string]int32{\n\t\t\"OPAQUE_CUSTOMER_STATUS_UNSPECIFIED\": 0,\n\t\t\"OPAQUE_CUSTOMER_STATUS_ACTIVE\":      1,\n\t\t\"OPAQUE_CUSTOMER_STATUS_INACTIVE\":    2,\n\t\t\"OPAQUE_CUSTOMER_STATUS_SUSPENDED\":   3,\n\t\t\"OPAQUE_CUSTOMER_STATUS_DELETED\":     4,\n\t}\n)\n\nfunc (x OpaqueCustomer_OpaqueCustomerStatus) Enum() *OpaqueCustomer_OpaqueCustomerStatus {\n\tp := new(OpaqueCustomer_OpaqueCustomerStatus)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueCustomer_OpaqueCustomerStatus) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueCustomer_OpaqueCustomerStatus) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[4].Descriptor()\n}\n\nfunc (OpaqueCustomer_OpaqueCustomerStatus) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[4]\n}\n\nfunc (x OpaqueCustomer_OpaqueCustomerStatus) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype OpaqueOrder_OpaqueOrderStatus int32\n\nconst (\n\tOpaqueOrder_OPAQUE_ORDER_STATUS_UNSPECIFIED OpaqueOrder_OpaqueOrderStatus = 0\n\tOpaqueOrder_OPAQUE_ORDER_STATUS_PENDING     OpaqueOrder_OpaqueOrderStatus = 1\n\tOpaqueOrder_OPAQUE_ORDER_STATUS_PROCESSING  OpaqueOrder_OpaqueOrderStatus = 2\n\tOpaqueOrder_OPAQUE_ORDER_STATUS_SHIPPED     OpaqueOrder_OpaqueOrderStatus = 3\n\tOpaqueOrder_OPAQUE_ORDER_STATUS_DELIVERED   OpaqueOrder_OpaqueOrderStatus = 4\n\tOpaqueOrder_OPAQUE_ORDER_STATUS_CANCELLED   OpaqueOrder_OpaqueOrderStatus = 5\n\tOpaqueOrder_OPAQUE_ORDER_STATUS_RETURNED    OpaqueOrder_OpaqueOrderStatus = 6\n)\n\n// Enum value maps for OpaqueOrder_OpaqueOrderStatus.\nvar (\n\tOpaqueOrder_OpaqueOrderStatus_name = map[int32]string{\n\t\t0: \"OPAQUE_ORDER_STATUS_UNSPECIFIED\",\n\t\t1: \"OPAQUE_ORDER_STATUS_PENDING\",\n\t\t2: \"OPAQUE_ORDER_STATUS_PROCESSING\",\n\t\t3: \"OPAQUE_ORDER_STATUS_SHIPPED\",\n\t\t4: \"OPAQUE_ORDER_STATUS_DELIVERED\",\n\t\t5: \"OPAQUE_ORDER_STATUS_CANCELLED\",\n\t\t6: \"OPAQUE_ORDER_STATUS_RETURNED\",\n\t}\n\tOpaqueOrder_OpaqueOrderStatus_value = map[string]int32{\n\t\t\"OPAQUE_ORDER_STATUS_UNSPECIFIED\": 0,\n\t\t\"OPAQUE_ORDER_STATUS_PENDING\":     1,\n\t\t\"OPAQUE_ORDER_STATUS_PROCESSING\":  2,\n\t\t\"OPAQUE_ORDER_STATUS_SHIPPED\":     3,\n\t\t\"OPAQUE_ORDER_STATUS_DELIVERED\":   4,\n\t\t\"OPAQUE_ORDER_STATUS_CANCELLED\":   5,\n\t\t\"OPAQUE_ORDER_STATUS_RETURNED\":    6,\n\t}\n)\n\nfunc (x OpaqueOrder_OpaqueOrderStatus) Enum() *OpaqueOrder_OpaqueOrderStatus {\n\tp := new(OpaqueOrder_OpaqueOrderStatus)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueOrder_OpaqueOrderStatus) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueOrder_OpaqueOrderStatus) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[5].Descriptor()\n}\n\nfunc (OpaqueOrder_OpaqueOrderStatus) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[5]\n}\n\nfunc (x OpaqueOrder_OpaqueOrderStatus) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype OpaqueCustomerEvent_OpaqueEventType int32\n\nconst (\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_UNSPECIFIED       OpaqueCustomerEvent_OpaqueEventType = 0\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_PAGE_VIEW         OpaqueCustomerEvent_OpaqueEventType = 1\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_PRODUCT_VIEW      OpaqueCustomerEvent_OpaqueEventType = 2\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_ADD_TO_CART       OpaqueCustomerEvent_OpaqueEventType = 3\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_REMOVE_FROM_CART  OpaqueCustomerEvent_OpaqueEventType = 4\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_CHECKOUT_START    OpaqueCustomerEvent_OpaqueEventType = 5\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE OpaqueCustomerEvent_OpaqueEventType = 6\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_SEARCH            OpaqueCustomerEvent_OpaqueEventType = 7\n\tOpaqueCustomerEvent_OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE    OpaqueCustomerEvent_OpaqueEventType = 8\n)\n\n// Enum value maps for OpaqueCustomerEvent_OpaqueEventType.\nvar (\n\tOpaqueCustomerEvent_OpaqueEventType_name = map[int32]string{\n\t\t0: \"OPAQUE_EVENT_TYPE_UNSPECIFIED\",\n\t\t1: \"OPAQUE_EVENT_TYPE_PAGE_VIEW\",\n\t\t2: \"OPAQUE_EVENT_TYPE_PRODUCT_VIEW\",\n\t\t3: \"OPAQUE_EVENT_TYPE_ADD_TO_CART\",\n\t\t4: \"OPAQUE_EVENT_TYPE_REMOVE_FROM_CART\",\n\t\t5: \"OPAQUE_EVENT_TYPE_CHECKOUT_START\",\n\t\t6: \"OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE\",\n\t\t7: \"OPAQUE_EVENT_TYPE_SEARCH\",\n\t\t8: \"OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE\",\n\t}\n\tOpaqueCustomerEvent_OpaqueEventType_value = map[string]int32{\n\t\t\"OPAQUE_EVENT_TYPE_UNSPECIFIED\":       0,\n\t\t\"OPAQUE_EVENT_TYPE_PAGE_VIEW\":         1,\n\t\t\"OPAQUE_EVENT_TYPE_PRODUCT_VIEW\":      2,\n\t\t\"OPAQUE_EVENT_TYPE_ADD_TO_CART\":       3,\n\t\t\"OPAQUE_EVENT_TYPE_REMOVE_FROM_CART\":  4,\n\t\t\"OPAQUE_EVENT_TYPE_CHECKOUT_START\":    5,\n\t\t\"OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE\": 6,\n\t\t\"OPAQUE_EVENT_TYPE_SEARCH\":            7,\n\t\t\"OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE\":    8,\n\t}\n)\n\nfunc (x OpaqueCustomerEvent_OpaqueEventType) Enum() *OpaqueCustomerEvent_OpaqueEventType {\n\tp := new(OpaqueCustomerEvent_OpaqueEventType)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueCustomerEvent_OpaqueEventType) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueCustomerEvent_OpaqueEventType) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[6].Descriptor()\n}\n\nfunc (OpaqueCustomerEvent_OpaqueEventType) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[6]\n}\n\nfunc (x OpaqueCustomerEvent_OpaqueEventType) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype OpaqueActivityUpdate_OpaqueUpdateType int32\n\nconst (\n\tOpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_UNSPECIFIED      OpaqueActivityUpdate_OpaqueUpdateType = 0\n\tOpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_RECOMMENDATION   OpaqueActivityUpdate_OpaqueUpdateType = 1\n\tOpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_NOTIFICATION     OpaqueActivityUpdate_OpaqueUpdateType = 2\n\tOpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_OFFER            OpaqueActivityUpdate_OpaqueUpdateType = 3\n\tOpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE OpaqueActivityUpdate_OpaqueUpdateType = 4\n\tOpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_PRICE_CHANGE     OpaqueActivityUpdate_OpaqueUpdateType = 5\n\tOpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_CART_REMINDER    OpaqueActivityUpdate_OpaqueUpdateType = 6\n)\n\n// Enum value maps for OpaqueActivityUpdate_OpaqueUpdateType.\nvar (\n\tOpaqueActivityUpdate_OpaqueUpdateType_name = map[int32]string{\n\t\t0: \"OPAQUE_UPDATE_TYPE_UNSPECIFIED\",\n\t\t1: \"OPAQUE_UPDATE_TYPE_RECOMMENDATION\",\n\t\t2: \"OPAQUE_UPDATE_TYPE_NOTIFICATION\",\n\t\t3: \"OPAQUE_UPDATE_TYPE_OFFER\",\n\t\t4: \"OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE\",\n\t\t5: \"OPAQUE_UPDATE_TYPE_PRICE_CHANGE\",\n\t\t6: \"OPAQUE_UPDATE_TYPE_CART_REMINDER\",\n\t}\n\tOpaqueActivityUpdate_OpaqueUpdateType_value = map[string]int32{\n\t\t\"OPAQUE_UPDATE_TYPE_UNSPECIFIED\":      0,\n\t\t\"OPAQUE_UPDATE_TYPE_RECOMMENDATION\":   1,\n\t\t\"OPAQUE_UPDATE_TYPE_NOTIFICATION\":     2,\n\t\t\"OPAQUE_UPDATE_TYPE_OFFER\":            3,\n\t\t\"OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE\": 4,\n\t\t\"OPAQUE_UPDATE_TYPE_PRICE_CHANGE\":     5,\n\t\t\"OPAQUE_UPDATE_TYPE_CART_REMINDER\":    6,\n\t}\n)\n\nfunc (x OpaqueActivityUpdate_OpaqueUpdateType) Enum() *OpaqueActivityUpdate_OpaqueUpdateType {\n\tp := new(OpaqueActivityUpdate_OpaqueUpdateType)\n\t*p = x\n\treturn p\n}\n\nfunc (x OpaqueActivityUpdate_OpaqueUpdateType) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (OpaqueActivityUpdate_OpaqueUpdateType) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_opaque_proto_enumTypes[7].Descriptor()\n}\n\nfunc (OpaqueActivityUpdate_OpaqueUpdateType) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_opaque_proto_enumTypes[7]\n}\n\nfunc (x OpaqueActivityUpdate_OpaqueUpdateType) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// OpaqueUpdateProductRequest represents a request to update a product\ntype OpaqueUpdateProductRequest struct {\n\tstate                 protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Product    *OpaqueProduct         `protobuf:\"bytes,1,opt,name=product\"`\n\txxx_hidden_UpdateMask *fieldmaskpb.FieldMask `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask\"`\n\tunknownFields         protoimpl.UnknownFields\n\tsizeCache             protoimpl.SizeCache\n}\n\nfunc (x *OpaqueUpdateProductRequest) Reset() {\n\t*x = OpaqueUpdateProductRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueUpdateProductRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueUpdateProductRequest) ProtoMessage() {}\n\nfunc (x *OpaqueUpdateProductRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueUpdateProductRequest) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueUpdateProductRequest) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.xxx_hidden_UpdateMask\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueUpdateProductRequest) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueUpdateProductRequest) SetUpdateMask(v *fieldmaskpb.FieldMask) {\n\tx.xxx_hidden_UpdateMask = v\n}\n\nfunc (x *OpaqueUpdateProductRequest) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueUpdateProductRequest) HasUpdateMask() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_UpdateMask != nil\n}\n\nfunc (x *OpaqueUpdateProductRequest) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\nfunc (x *OpaqueUpdateProductRequest) ClearUpdateMask() {\n\tx.xxx_hidden_UpdateMask = nil\n}\n\ntype OpaqueUpdateProductRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProduct    *OpaqueProduct\n\tUpdateMask *fieldmaskpb.FieldMask\n}\n\nfunc (b0 OpaqueUpdateProductRequest_builder) Build() *OpaqueUpdateProductRequest {\n\tm0 := &OpaqueUpdateProductRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Product = b.Product\n\tx.xxx_hidden_UpdateMask = b.UpdateMask\n\treturn m0\n}\n\n// OpaqueUpdateProductResponse represents the response for OpaqueUpdateProduct\ntype OpaqueUpdateProductResponse struct {\n\tstate              protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Product *OpaqueProduct         `protobuf:\"bytes,1,opt,name=product\"`\n\tunknownFields      protoimpl.UnknownFields\n\tsizeCache          protoimpl.SizeCache\n}\n\nfunc (x *OpaqueUpdateProductResponse) Reset() {\n\t*x = OpaqueUpdateProductResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueUpdateProductResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueUpdateProductResponse) ProtoMessage() {}\n\nfunc (x *OpaqueUpdateProductResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueUpdateProductResponse) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueUpdateProductResponse) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueUpdateProductResponse) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueUpdateProductResponse) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\ntype OpaqueUpdateProductResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProduct *OpaqueProduct\n}\n\nfunc (b0 OpaqueUpdateProductResponse_builder) Build() *OpaqueUpdateProductResponse {\n\tm0 := &OpaqueUpdateProductResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Product = b.Product\n\treturn m0\n}\n\n// OpaqueGetProductRequest represents a request for product information\ntype OpaqueGetProductRequest struct {\n\tstate                             protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_ProductId              *string                `protobuf:\"bytes,1,opt,name=product_id,json=productId\"`\n\txxx_hidden_IncludeVariants        bool                   `protobuf:\"varint,2,opt,name=include_variants,json=includeVariants\"`\n\txxx_hidden_IncludeRelatedProducts bool                   `protobuf:\"varint,3,opt,name=include_related_products,json=includeRelatedProducts\"`\n\txxx_hidden_LanguageCode           *string                `protobuf:\"bytes,4,opt,name=language_code,json=languageCode\"`\n\txxx_hidden_CurrencyCode           *string                `protobuf:\"bytes,5,opt,name=currency_code,json=currencyCode\"`\n\tXXX_raceDetectHookData            protoimpl.RaceDetectHookData\n\tXXX_presence                      [1]uint32\n\tunknownFields                     protoimpl.UnknownFields\n\tsizeCache                         protoimpl.SizeCache\n}\n\nfunc (x *OpaqueGetProductRequest) Reset() {\n\t*x = OpaqueGetProductRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueGetProductRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueGetProductRequest) ProtoMessage() {}\n\nfunc (x *OpaqueGetProductRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueGetProductRequest) GetProductId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ProductId != nil {\n\t\t\treturn *x.xxx_hidden_ProductId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueGetProductRequest) GetIncludeVariants() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_IncludeVariants\n\t}\n\treturn false\n}\n\nfunc (x *OpaqueGetProductRequest) GetIncludeRelatedProducts() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_IncludeRelatedProducts\n\t}\n\treturn false\n}\n\nfunc (x *OpaqueGetProductRequest) GetLanguageCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_LanguageCode != nil {\n\t\t\treturn *x.xxx_hidden_LanguageCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueGetProductRequest) GetCurrencyCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CurrencyCode != nil {\n\t\t\treturn *x.xxx_hidden_CurrencyCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueGetProductRequest) SetProductId(v string) {\n\tx.xxx_hidden_ProductId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 5)\n}\n\nfunc (x *OpaqueGetProductRequest) SetIncludeVariants(v bool) {\n\tx.xxx_hidden_IncludeVariants = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 5)\n}\n\nfunc (x *OpaqueGetProductRequest) SetIncludeRelatedProducts(v bool) {\n\tx.xxx_hidden_IncludeRelatedProducts = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 5)\n}\n\nfunc (x *OpaqueGetProductRequest) SetLanguageCode(v string) {\n\tx.xxx_hidden_LanguageCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 5)\n}\n\nfunc (x *OpaqueGetProductRequest) SetCurrencyCode(v string) {\n\tx.xxx_hidden_CurrencyCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 5)\n}\n\nfunc (x *OpaqueGetProductRequest) HasProductId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueGetProductRequest) HasIncludeVariants() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueGetProductRequest) HasIncludeRelatedProducts() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueGetProductRequest) HasLanguageCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 3)\n}\n\nfunc (x *OpaqueGetProductRequest) HasCurrencyCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 4)\n}\n\nfunc (x *OpaqueGetProductRequest) ClearProductId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_ProductId = nil\n}\n\nfunc (x *OpaqueGetProductRequest) ClearIncludeVariants() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_IncludeVariants = false\n}\n\nfunc (x *OpaqueGetProductRequest) ClearIncludeRelatedProducts() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_IncludeRelatedProducts = false\n}\n\nfunc (x *OpaqueGetProductRequest) ClearLanguageCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)\n\tx.xxx_hidden_LanguageCode = nil\n}\n\nfunc (x *OpaqueGetProductRequest) ClearCurrencyCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)\n\tx.xxx_hidden_CurrencyCode = nil\n}\n\ntype OpaqueGetProductRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProductId              *string\n\tIncludeVariants        *bool\n\tIncludeRelatedProducts *bool\n\tLanguageCode           *string\n\tCurrencyCode           *string\n}\n\nfunc (b0 OpaqueGetProductRequest_builder) Build() *OpaqueGetProductRequest {\n\tm0 := &OpaqueGetProductRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.ProductId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 5)\n\t\tx.xxx_hidden_ProductId = b.ProductId\n\t}\n\tif b.IncludeVariants != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 5)\n\t\tx.xxx_hidden_IncludeVariants = *b.IncludeVariants\n\t}\n\tif b.IncludeRelatedProducts != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 5)\n\t\tx.xxx_hidden_IncludeRelatedProducts = *b.IncludeRelatedProducts\n\t}\n\tif b.LanguageCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 5)\n\t\tx.xxx_hidden_LanguageCode = b.LanguageCode\n\t}\n\tif b.CurrencyCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 5)\n\t\tx.xxx_hidden_CurrencyCode = b.CurrencyCode\n\t}\n\treturn m0\n}\n\n// OpaqueGetProductResponse represents a response with product information\ntype OpaqueGetProductResponse struct {\n\tstate              protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Product *OpaqueProduct         `protobuf:\"bytes,1,opt,name=product\"`\n\tunknownFields      protoimpl.UnknownFields\n\tsizeCache          protoimpl.SizeCache\n}\n\nfunc (x *OpaqueGetProductResponse) Reset() {\n\t*x = OpaqueGetProductResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueGetProductResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueGetProductResponse) ProtoMessage() {}\n\nfunc (x *OpaqueGetProductResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueGetProductResponse) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueGetProductResponse) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueGetProductResponse) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueGetProductResponse) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\ntype OpaqueGetProductResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProduct *OpaqueProduct\n}\n\nfunc (b0 OpaqueGetProductResponse_builder) Build() *OpaqueGetProductResponse {\n\tm0 := &OpaqueGetProductResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Product = b.Product\n\treturn m0\n}\n\n// OpaqueSearchProductsRequest represents a product search request\ntype OpaqueSearchProductsRequest struct {\n\tstate                   protoimpl.MessageState                      `protogen:\"opaque.v1\"`\n\txxx_hidden_Query        *string                                     `protobuf:\"bytes,1,opt,name=query\"`\n\txxx_hidden_CategoryIds  []string                                    `protobuf:\"bytes,2,rep,name=category_ids,json=categoryIds\"`\n\txxx_hidden_Brands       []string                                    `protobuf:\"bytes,3,rep,name=brands\"`\n\txxx_hidden_MinPrice     *OpaquePrice                                `protobuf:\"bytes,4,opt,name=min_price,json=minPrice\"`\n\txxx_hidden_MaxPrice     *OpaquePrice                                `protobuf:\"bytes,5,opt,name=max_price,json=maxPrice\"`\n\txxx_hidden_Tags         []string                                    `protobuf:\"bytes,6,rep,name=tags\"`\n\txxx_hidden_SortBy       OpaqueSearchProductsRequest_OpaqueSortOrder `protobuf:\"varint,7,opt,name=sort_by,json=sortBy,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest_OpaqueSortOrder\"`\n\txxx_hidden_Page         int32                                       `protobuf:\"varint,8,opt,name=page\"`\n\txxx_hidden_PageSize     int32                                       `protobuf:\"varint,9,opt,name=page_size,json=pageSize\"`\n\txxx_hidden_LanguageCode *string                                     `protobuf:\"bytes,10,opt,name=language_code,json=languageCode\"`\n\txxx_hidden_CurrencyCode *string                                     `protobuf:\"bytes,11,opt,name=currency_code,json=currencyCode\"`\n\txxx_hidden_FieldMask    *fieldmaskpb.FieldMask                      `protobuf:\"bytes,12,opt,name=field_mask,json=fieldMask\"`\n\txxx_hidden_Filters      map[string]string                           `protobuf:\"bytes,13,rep,name=filters\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tXXX_raceDetectHookData  protoimpl.RaceDetectHookData\n\tXXX_presence            [1]uint32\n\tunknownFields           protoimpl.UnknownFields\n\tsizeCache               protoimpl.SizeCache\n}\n\nfunc (x *OpaqueSearchProductsRequest) Reset() {\n\t*x = OpaqueSearchProductsRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueSearchProductsRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueSearchProductsRequest) ProtoMessage() {}\n\nfunc (x *OpaqueSearchProductsRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetQuery() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Query != nil {\n\t\t\treturn *x.xxx_hidden_Query\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetCategoryIds() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_CategoryIds\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetBrands() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Brands\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetMinPrice() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MinPrice\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetMaxPrice() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MaxPrice\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetTags() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Tags\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetSortBy() OpaqueSearchProductsRequest_OpaqueSortOrder {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 6) {\n\t\t\treturn x.xxx_hidden_SortBy\n\t\t}\n\t}\n\treturn OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_UNSPECIFIED\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetPage() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Page\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetPageSize() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_PageSize\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetLanguageCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_LanguageCode != nil {\n\t\t\treturn *x.xxx_hidden_LanguageCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetCurrencyCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CurrencyCode != nil {\n\t\t\treturn *x.xxx_hidden_CurrencyCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetFieldMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.xxx_hidden_FieldMask\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) GetFilters() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Filters\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetQuery(v string) {\n\tx.xxx_hidden_Query = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 13)\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetCategoryIds(v []string) {\n\tx.xxx_hidden_CategoryIds = v\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetBrands(v []string) {\n\tx.xxx_hidden_Brands = v\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetMinPrice(v *OpaquePrice) {\n\tx.xxx_hidden_MinPrice = v\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetMaxPrice(v *OpaquePrice) {\n\tx.xxx_hidden_MaxPrice = v\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetTags(v []string) {\n\tx.xxx_hidden_Tags = v\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetSortBy(v OpaqueSearchProductsRequest_OpaqueSortOrder) {\n\tx.xxx_hidden_SortBy = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 6, 13)\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetPage(v int32) {\n\tx.xxx_hidden_Page = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 7, 13)\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetPageSize(v int32) {\n\tx.xxx_hidden_PageSize = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 8, 13)\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetLanguageCode(v string) {\n\tx.xxx_hidden_LanguageCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 9, 13)\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetCurrencyCode(v string) {\n\tx.xxx_hidden_CurrencyCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 10, 13)\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetFieldMask(v *fieldmaskpb.FieldMask) {\n\tx.xxx_hidden_FieldMask = v\n}\n\nfunc (x *OpaqueSearchProductsRequest) SetFilters(v map[string]string) {\n\tx.xxx_hidden_Filters = v\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasQuery() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasMinPrice() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_MinPrice != nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasMaxPrice() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_MaxPrice != nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasSortBy() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 6)\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasPage() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 7)\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasPageSize() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 8)\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasLanguageCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 9)\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasCurrencyCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 10)\n}\n\nfunc (x *OpaqueSearchProductsRequest) HasFieldMask() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_FieldMask != nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearQuery() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_Query = nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearMinPrice() {\n\tx.xxx_hidden_MinPrice = nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearMaxPrice() {\n\tx.xxx_hidden_MaxPrice = nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearSortBy() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 6)\n\tx.xxx_hidden_SortBy = OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_UNSPECIFIED\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearPage() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 7)\n\tx.xxx_hidden_Page = 0\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearPageSize() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 8)\n\tx.xxx_hidden_PageSize = 0\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearLanguageCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 9)\n\tx.xxx_hidden_LanguageCode = nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearCurrencyCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 10)\n\tx.xxx_hidden_CurrencyCode = nil\n}\n\nfunc (x *OpaqueSearchProductsRequest) ClearFieldMask() {\n\tx.xxx_hidden_FieldMask = nil\n}\n\ntype OpaqueSearchProductsRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tQuery        *string\n\tCategoryIds  []string\n\tBrands       []string\n\tMinPrice     *OpaquePrice\n\tMaxPrice     *OpaquePrice\n\tTags         []string\n\tSortBy       *OpaqueSearchProductsRequest_OpaqueSortOrder\n\tPage         *int32\n\tPageSize     *int32\n\tLanguageCode *string\n\tCurrencyCode *string\n\tFieldMask    *fieldmaskpb.FieldMask\n\tFilters      map[string]string\n}\n\nfunc (b0 OpaqueSearchProductsRequest_builder) Build() *OpaqueSearchProductsRequest {\n\tm0 := &OpaqueSearchProductsRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.Query != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 13)\n\t\tx.xxx_hidden_Query = b.Query\n\t}\n\tx.xxx_hidden_CategoryIds = b.CategoryIds\n\tx.xxx_hidden_Brands = b.Brands\n\tx.xxx_hidden_MinPrice = b.MinPrice\n\tx.xxx_hidden_MaxPrice = b.MaxPrice\n\tx.xxx_hidden_Tags = b.Tags\n\tif b.SortBy != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 6, 13)\n\t\tx.xxx_hidden_SortBy = *b.SortBy\n\t}\n\tif b.Page != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 7, 13)\n\t\tx.xxx_hidden_Page = *b.Page\n\t}\n\tif b.PageSize != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 8, 13)\n\t\tx.xxx_hidden_PageSize = *b.PageSize\n\t}\n\tif b.LanguageCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 9, 13)\n\t\tx.xxx_hidden_LanguageCode = b.LanguageCode\n\t}\n\tif b.CurrencyCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 10, 13)\n\t\tx.xxx_hidden_CurrencyCode = b.CurrencyCode\n\t}\n\tx.xxx_hidden_FieldMask = b.FieldMask\n\tx.xxx_hidden_Filters = b.Filters\n\treturn m0\n}\n\n// OpaqueSearchProductsResponse represents a single product in search results\ntype OpaqueSearchProductsResponse struct {\n\tstate              protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Product *OpaqueProduct         `protobuf:\"bytes,1,opt,name=product\"`\n\tunknownFields      protoimpl.UnknownFields\n\tsizeCache          protoimpl.SizeCache\n}\n\nfunc (x *OpaqueSearchProductsResponse) Reset() {\n\t*x = OpaqueSearchProductsResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueSearchProductsResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueSearchProductsResponse) ProtoMessage() {}\n\nfunc (x *OpaqueSearchProductsResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueSearchProductsResponse) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchProductsResponse) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueSearchProductsResponse) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueSearchProductsResponse) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\ntype OpaqueSearchProductsResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProduct *OpaqueProduct\n}\n\nfunc (b0 OpaqueSearchProductsResponse_builder) Build() *OpaqueSearchProductsResponse {\n\tm0 := &OpaqueSearchProductsResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Product = b.Product\n\treturn m0\n}\n\n// OpaqueCreateProductRequest represents a request to create a product\ntype OpaqueCreateProductRequest struct {\n\tstate                  protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_ProductId   *string                `protobuf:\"bytes,1,opt,name=product_id,json=productId\"`\n\txxx_hidden_Product     *OpaqueProduct         `protobuf:\"bytes,2,opt,name=product\"`\n\tXXX_raceDetectHookData protoimpl.RaceDetectHookData\n\tXXX_presence           [1]uint32\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCreateProductRequest) Reset() {\n\t*x = OpaqueCreateProductRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCreateProductRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCreateProductRequest) ProtoMessage() {}\n\nfunc (x *OpaqueCreateProductRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCreateProductRequest) GetProductId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ProductId != nil {\n\t\t\treturn *x.xxx_hidden_ProductId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCreateProductRequest) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCreateProductRequest) SetProductId(v string) {\n\tx.xxx_hidden_ProductId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)\n}\n\nfunc (x *OpaqueCreateProductRequest) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueCreateProductRequest) HasProductId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueCreateProductRequest) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueCreateProductRequest) ClearProductId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_ProductId = nil\n}\n\nfunc (x *OpaqueCreateProductRequest) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\ntype OpaqueCreateProductRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProductId *string\n\tProduct   *OpaqueProduct\n}\n\nfunc (b0 OpaqueCreateProductRequest_builder) Build() *OpaqueCreateProductRequest {\n\tm0 := &OpaqueCreateProductRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.ProductId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)\n\t\tx.xxx_hidden_ProductId = b.ProductId\n\t}\n\tx.xxx_hidden_Product = b.Product\n\treturn m0\n}\n\n// OpaqueCreateProductResponse represents the created product\ntype OpaqueCreateProductResponse struct {\n\tstate              protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Product *OpaqueProduct         `protobuf:\"bytes,1,opt,name=product\"`\n\tunknownFields      protoimpl.UnknownFields\n\tsizeCache          protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCreateProductResponse) Reset() {\n\t*x = OpaqueCreateProductResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[7]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCreateProductResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCreateProductResponse) ProtoMessage() {}\n\nfunc (x *OpaqueCreateProductResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[7]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCreateProductResponse) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCreateProductResponse) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueCreateProductResponse) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueCreateProductResponse) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\ntype OpaqueCreateProductResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProduct *OpaqueProduct\n}\n\nfunc (b0 OpaqueCreateProductResponse_builder) Build() *OpaqueCreateProductResponse {\n\tm0 := &OpaqueCreateProductResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Product = b.Product\n\treturn m0\n}\n\n// OpaqueCreateProductFieldRequest represents a request to create a product\ntype OpaqueCreateProductFieldRequest struct {\n\tstate                  protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_ProductId   *string                `protobuf:\"bytes,1,opt,name=product_id,json=productId\"`\n\txxx_hidden_Product     *OpaqueProduct         `protobuf:\"bytes,2,opt,name=product\"`\n\tXXX_raceDetectHookData protoimpl.RaceDetectHookData\n\tXXX_presence           [1]uint32\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) Reset() {\n\t*x = OpaqueCreateProductFieldRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[8]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCreateProductFieldRequest) ProtoMessage() {}\n\nfunc (x *OpaqueCreateProductFieldRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[8]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) GetProductId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ProductId != nil {\n\t\t\treturn *x.xxx_hidden_ProductId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) SetProductId(v string) {\n\tx.xxx_hidden_ProductId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) HasProductId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) ClearProductId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_ProductId = nil\n}\n\nfunc (x *OpaqueCreateProductFieldRequest) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\ntype OpaqueCreateProductFieldRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProductId *string\n\tProduct   *OpaqueProduct\n}\n\nfunc (b0 OpaqueCreateProductFieldRequest_builder) Build() *OpaqueCreateProductFieldRequest {\n\tm0 := &OpaqueCreateProductFieldRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.ProductId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)\n\t\tx.xxx_hidden_ProductId = b.ProductId\n\t}\n\tx.xxx_hidden_Product = b.Product\n\treturn m0\n}\n\n// OpaqueCreateProductFieldResponse represents the created product\ntype OpaqueCreateProductFieldResponse struct {\n\tstate              protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Product *OpaqueProduct         `protobuf:\"bytes,1,opt,name=product\"`\n\tunknownFields      protoimpl.UnknownFields\n\tsizeCache          protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCreateProductFieldResponse) Reset() {\n\t*x = OpaqueCreateProductFieldResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[9]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCreateProductFieldResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCreateProductFieldResponse) ProtoMessage() {}\n\nfunc (x *OpaqueCreateProductFieldResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[9]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCreateProductFieldResponse) GetProduct() *OpaqueProduct {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Product\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCreateProductFieldResponse) SetProduct(v *OpaqueProduct) {\n\tx.xxx_hidden_Product = v\n}\n\nfunc (x *OpaqueCreateProductFieldResponse) HasProduct() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Product != nil\n}\n\nfunc (x *OpaqueCreateProductFieldResponse) ClearProduct() {\n\tx.xxx_hidden_Product = nil\n}\n\ntype OpaqueCreateProductFieldResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProduct *OpaqueProduct\n}\n\nfunc (b0 OpaqueCreateProductFieldResponse_builder) Build() *OpaqueCreateProductFieldResponse {\n\tm0 := &OpaqueCreateProductFieldResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Product = b.Product\n\treturn m0\n}\n\n// OpaqueProcessOrdersRequest represents a request to process order\ntype OpaqueProcessOrdersRequest struct {\n\tstate            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Order *OpaqueOrder           `protobuf:\"bytes,1,opt,name=order\"`\n\tunknownFields    protoimpl.UnknownFields\n\tsizeCache        protoimpl.SizeCache\n}\n\nfunc (x *OpaqueProcessOrdersRequest) Reset() {\n\t*x = OpaqueProcessOrdersRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[10]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueProcessOrdersRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueProcessOrdersRequest) ProtoMessage() {}\n\nfunc (x *OpaqueProcessOrdersRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[10]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueProcessOrdersRequest) GetOrder() *OpaqueOrder {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Order\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProcessOrdersRequest) SetOrder(v *OpaqueOrder) {\n\tx.xxx_hidden_Order = v\n}\n\nfunc (x *OpaqueProcessOrdersRequest) HasOrder() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Order != nil\n}\n\nfunc (x *OpaqueProcessOrdersRequest) ClearOrder() {\n\tx.xxx_hidden_Order = nil\n}\n\ntype OpaqueProcessOrdersRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tOrder *OpaqueOrder\n}\n\nfunc (b0 OpaqueProcessOrdersRequest_builder) Build() *OpaqueProcessOrdersRequest {\n\tm0 := &OpaqueProcessOrdersRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Order = b.Order\n\treturn m0\n}\n\n// OpaqueProcessOrdersResponse represents orders processing result\ntype OpaqueProcessOrdersResponse struct {\n\tstate              protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Summary *OpaqueOrderSummary    `protobuf:\"bytes,1,opt,name=summary\"`\n\tunknownFields      protoimpl.UnknownFields\n\tsizeCache          protoimpl.SizeCache\n}\n\nfunc (x *OpaqueProcessOrdersResponse) Reset() {\n\t*x = OpaqueProcessOrdersResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[11]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueProcessOrdersResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueProcessOrdersResponse) ProtoMessage() {}\n\nfunc (x *OpaqueProcessOrdersResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[11]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueProcessOrdersResponse) GetSummary() *OpaqueOrderSummary {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Summary\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProcessOrdersResponse) SetSummary(v *OpaqueOrderSummary) {\n\tx.xxx_hidden_Summary = v\n}\n\nfunc (x *OpaqueProcessOrdersResponse) HasSummary() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Summary != nil\n}\n\nfunc (x *OpaqueProcessOrdersResponse) ClearSummary() {\n\tx.xxx_hidden_Summary = nil\n}\n\ntype OpaqueProcessOrdersResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tSummary *OpaqueOrderSummary\n}\n\nfunc (b0 OpaqueProcessOrdersResponse_builder) Build() *OpaqueProcessOrdersResponse {\n\tm0 := &OpaqueProcessOrdersResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Summary = b.Summary\n\treturn m0\n}\n\n// OpaqueStreamCustomerActivityRequest represents a report of user activity\ntype OpaqueStreamCustomerActivityRequest struct {\n\tstate            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Event *OpaqueCustomerEvent   `protobuf:\"bytes,1,opt,name=event\"`\n\tunknownFields    protoimpl.UnknownFields\n\tsizeCache        protoimpl.SizeCache\n}\n\nfunc (x *OpaqueStreamCustomerActivityRequest) Reset() {\n\t*x = OpaqueStreamCustomerActivityRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[12]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueStreamCustomerActivityRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueStreamCustomerActivityRequest) ProtoMessage() {}\n\nfunc (x *OpaqueStreamCustomerActivityRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[12]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueStreamCustomerActivityRequest) GetEvent() *OpaqueCustomerEvent {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Event\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueStreamCustomerActivityRequest) SetEvent(v *OpaqueCustomerEvent) {\n\tx.xxx_hidden_Event = v\n}\n\nfunc (x *OpaqueStreamCustomerActivityRequest) HasEvent() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Event != nil\n}\n\nfunc (x *OpaqueStreamCustomerActivityRequest) ClearEvent() {\n\tx.xxx_hidden_Event = nil\n}\n\ntype OpaqueStreamCustomerActivityRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tEvent *OpaqueCustomerEvent\n}\n\nfunc (b0 OpaqueStreamCustomerActivityRequest_builder) Build() *OpaqueStreamCustomerActivityRequest {\n\tm0 := &OpaqueStreamCustomerActivityRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Event = b.Event\n\treturn m0\n}\n\n// OpaqueStreamCustomerActivityRequest represents a report of server activity\ntype OpaqueStreamCustomerActivityResponse struct {\n\tstate            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Event *OpaqueActivityUpdate  `protobuf:\"bytes,2,opt,name=event\"`\n\tunknownFields    protoimpl.UnknownFields\n\tsizeCache        protoimpl.SizeCache\n}\n\nfunc (x *OpaqueStreamCustomerActivityResponse) Reset() {\n\t*x = OpaqueStreamCustomerActivityResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[13]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueStreamCustomerActivityResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueStreamCustomerActivityResponse) ProtoMessage() {}\n\nfunc (x *OpaqueStreamCustomerActivityResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[13]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueStreamCustomerActivityResponse) GetEvent() *OpaqueActivityUpdate {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Event\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueStreamCustomerActivityResponse) SetEvent(v *OpaqueActivityUpdate) {\n\tx.xxx_hidden_Event = v\n}\n\nfunc (x *OpaqueStreamCustomerActivityResponse) HasEvent() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Event != nil\n}\n\nfunc (x *OpaqueStreamCustomerActivityResponse) ClearEvent() {\n\tx.xxx_hidden_Event = nil\n}\n\ntype OpaqueStreamCustomerActivityResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tEvent *OpaqueActivityUpdate\n}\n\nfunc (b0 OpaqueStreamCustomerActivityResponse_builder) Build() *OpaqueStreamCustomerActivityResponse {\n\tm0 := &OpaqueStreamCustomerActivityResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Event = b.Event\n\treturn m0\n}\n\n// OpaqueSearchOrdersRequest represents queryable information to find orders\ntype OpaqueSearchOrdersRequest struct {\n\tstate            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Order *OpaqueOrder           `protobuf:\"bytes,1,opt,name=order\"`\n\tunknownFields    protoimpl.UnknownFields\n\tsizeCache        protoimpl.SizeCache\n}\n\nfunc (x *OpaqueSearchOrdersRequest) Reset() {\n\t*x = OpaqueSearchOrdersRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[14]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueSearchOrdersRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueSearchOrdersRequest) ProtoMessage() {}\n\nfunc (x *OpaqueSearchOrdersRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[14]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueSearchOrdersRequest) GetOrder() *OpaqueOrder {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Order\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchOrdersRequest) SetOrder(v *OpaqueOrder) {\n\tx.xxx_hidden_Order = v\n}\n\nfunc (x *OpaqueSearchOrdersRequest) HasOrder() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Order != nil\n}\n\nfunc (x *OpaqueSearchOrdersRequest) ClearOrder() {\n\tx.xxx_hidden_Order = nil\n}\n\ntype OpaqueSearchOrdersRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tOrder *OpaqueOrder\n}\n\nfunc (b0 OpaqueSearchOrdersRequest_builder) Build() *OpaqueSearchOrdersRequest {\n\tm0 := &OpaqueSearchOrdersRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Order = b.Order\n\treturn m0\n}\n\n// OpaqueSearchOrdersResponse represents a list of orders found\ntype OpaqueSearchOrdersResponse struct {\n\tstate             protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Orders *[]*OpaqueOrder        `protobuf:\"bytes,1,rep,name=orders\"`\n\tunknownFields     protoimpl.UnknownFields\n\tsizeCache         protoimpl.SizeCache\n}\n\nfunc (x *OpaqueSearchOrdersResponse) Reset() {\n\t*x = OpaqueSearchOrdersResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[15]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueSearchOrdersResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueSearchOrdersResponse) ProtoMessage() {}\n\nfunc (x *OpaqueSearchOrdersResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[15]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueSearchOrdersResponse) GetOrders() []*OpaqueOrder {\n\tif x != nil {\n\t\tif x.xxx_hidden_Orders != nil {\n\t\t\treturn *x.xxx_hidden_Orders\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueSearchOrdersResponse) SetOrders(v []*OpaqueOrder) {\n\tx.xxx_hidden_Orders = &v\n}\n\ntype OpaqueSearchOrdersResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tOrders []*OpaqueOrder\n}\n\nfunc (b0 OpaqueSearchOrdersResponse_builder) Build() *OpaqueSearchOrdersResponse {\n\tm0 := &OpaqueSearchOrdersResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Orders = &b.Orders\n\treturn m0\n}\n\n// OpaqueEchoNoteRequest demonstrates an opaque body that maps to a foreign message.\ntype OpaqueEchoNoteRequest struct {\n\tstate           protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Note *sub.StringMessage     `protobuf:\"bytes,1,opt,name=note\"`\n\tunknownFields   protoimpl.UnknownFields\n\tsizeCache       protoimpl.SizeCache\n}\n\nfunc (x *OpaqueEchoNoteRequest) Reset() {\n\t*x = OpaqueEchoNoteRequest{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[16]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueEchoNoteRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueEchoNoteRequest) ProtoMessage() {}\n\nfunc (x *OpaqueEchoNoteRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[16]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueEchoNoteRequest) GetNote() *sub.StringMessage {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Note\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueEchoNoteRequest) SetNote(v *sub.StringMessage) {\n\tx.xxx_hidden_Note = v\n}\n\nfunc (x *OpaqueEchoNoteRequest) HasNote() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Note != nil\n}\n\nfunc (x *OpaqueEchoNoteRequest) ClearNote() {\n\tx.xxx_hidden_Note = nil\n}\n\ntype OpaqueEchoNoteRequest_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tNote *sub.StringMessage\n}\n\nfunc (b0 OpaqueEchoNoteRequest_builder) Build() *OpaqueEchoNoteRequest {\n\tm0 := &OpaqueEchoNoteRequest{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Note = b.Note\n\treturn m0\n}\n\n// OpaqueEchoNoteResponse mirrors the request payload for simplicity.\ntype OpaqueEchoNoteResponse struct {\n\tstate           protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Note *sub.StringMessage     `protobuf:\"bytes,1,opt,name=note\"`\n\tunknownFields   protoimpl.UnknownFields\n\tsizeCache       protoimpl.SizeCache\n}\n\nfunc (x *OpaqueEchoNoteResponse) Reset() {\n\t*x = OpaqueEchoNoteResponse{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[17]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueEchoNoteResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueEchoNoteResponse) ProtoMessage() {}\n\nfunc (x *OpaqueEchoNoteResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[17]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueEchoNoteResponse) GetNote() *sub.StringMessage {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Note\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueEchoNoteResponse) SetNote(v *sub.StringMessage) {\n\tx.xxx_hidden_Note = v\n}\n\nfunc (x *OpaqueEchoNoteResponse) HasNote() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Note != nil\n}\n\nfunc (x *OpaqueEchoNoteResponse) ClearNote() {\n\tx.xxx_hidden_Note = nil\n}\n\ntype OpaqueEchoNoteResponse_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tNote *sub.StringMessage\n}\n\nfunc (b0 OpaqueEchoNoteResponse_builder) Build() *OpaqueEchoNoteResponse {\n\tm0 := &OpaqueEchoNoteResponse{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Note = b.Note\n\treturn m0\n}\n\n// OpaqueAddress represents a physical address\ntype OpaqueAddress struct {\n\tstate                  protoimpl.MessageState          `protogen:\"opaque.v1\"`\n\txxx_hidden_StreetLine1 *string                         `protobuf:\"bytes,1,opt,name=street_line1,json=streetLine1\"`\n\txxx_hidden_StreetLine2 *string                         `protobuf:\"bytes,2,opt,name=street_line2,json=streetLine2\"`\n\txxx_hidden_City        *string                         `protobuf:\"bytes,3,opt,name=city\"`\n\txxx_hidden_State       *string                         `protobuf:\"bytes,4,opt,name=state\"`\n\txxx_hidden_Country     *string                         `protobuf:\"bytes,5,opt,name=country\"`\n\txxx_hidden_PostalCode  *string                         `protobuf:\"bytes,6,opt,name=postal_code,json=postalCode\"`\n\txxx_hidden_AddressType OpaqueAddress_OpaqueAddressType `protobuf:\"varint,7,opt,name=address_type,json=addressType,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress_OpaqueAddressType\"`\n\txxx_hidden_IsDefault   *wrapperspb.BoolValue           `protobuf:\"bytes,8,opt,name=is_default,json=isDefault\"`\n\txxx_hidden_Metadata    map[string]string               `protobuf:\"bytes,9,rep,name=metadata\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tXXX_raceDetectHookData protoimpl.RaceDetectHookData\n\tXXX_presence           [1]uint32\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *OpaqueAddress) Reset() {\n\t*x = OpaqueAddress{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[18]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueAddress) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueAddress) ProtoMessage() {}\n\nfunc (x *OpaqueAddress) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[18]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueAddress) GetStreetLine1() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_StreetLine1 != nil {\n\t\t\treturn *x.xxx_hidden_StreetLine1\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueAddress) GetStreetLine2() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_StreetLine2 != nil {\n\t\t\treturn *x.xxx_hidden_StreetLine2\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueAddress) GetCity() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_City != nil {\n\t\t\treturn *x.xxx_hidden_City\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueAddress) GetState() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_State != nil {\n\t\t\treturn *x.xxx_hidden_State\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueAddress) GetCountry() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Country != nil {\n\t\t\treturn *x.xxx_hidden_Country\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueAddress) GetPostalCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_PostalCode != nil {\n\t\t\treturn *x.xxx_hidden_PostalCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueAddress) GetAddressType() OpaqueAddress_OpaqueAddressType {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 6) {\n\t\t\treturn x.xxx_hidden_AddressType\n\t\t}\n\t}\n\treturn OpaqueAddress_OPAQUE_ADDRESS_TYPE_UNSPECIFIED\n}\n\nfunc (x *OpaqueAddress) GetIsDefault() *wrapperspb.BoolValue {\n\tif x != nil {\n\t\treturn x.xxx_hidden_IsDefault\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueAddress) GetMetadata() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Metadata\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueAddress) SetStreetLine1(v string) {\n\tx.xxx_hidden_StreetLine1 = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 9)\n}\n\nfunc (x *OpaqueAddress) SetStreetLine2(v string) {\n\tx.xxx_hidden_StreetLine2 = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 9)\n}\n\nfunc (x *OpaqueAddress) SetCity(v string) {\n\tx.xxx_hidden_City = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 9)\n}\n\nfunc (x *OpaqueAddress) SetState(v string) {\n\tx.xxx_hidden_State = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 9)\n}\n\nfunc (x *OpaqueAddress) SetCountry(v string) {\n\tx.xxx_hidden_Country = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 9)\n}\n\nfunc (x *OpaqueAddress) SetPostalCode(v string) {\n\tx.xxx_hidden_PostalCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 5, 9)\n}\n\nfunc (x *OpaqueAddress) SetAddressType(v OpaqueAddress_OpaqueAddressType) {\n\tx.xxx_hidden_AddressType = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 6, 9)\n}\n\nfunc (x *OpaqueAddress) SetIsDefault(v *wrapperspb.BoolValue) {\n\tx.xxx_hidden_IsDefault = v\n}\n\nfunc (x *OpaqueAddress) SetMetadata(v map[string]string) {\n\tx.xxx_hidden_Metadata = v\n}\n\nfunc (x *OpaqueAddress) HasStreetLine1() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueAddress) HasStreetLine2() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueAddress) HasCity() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueAddress) HasState() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 3)\n}\n\nfunc (x *OpaqueAddress) HasCountry() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 4)\n}\n\nfunc (x *OpaqueAddress) HasPostalCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 5)\n}\n\nfunc (x *OpaqueAddress) HasAddressType() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 6)\n}\n\nfunc (x *OpaqueAddress) HasIsDefault() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_IsDefault != nil\n}\n\nfunc (x *OpaqueAddress) ClearStreetLine1() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_StreetLine1 = nil\n}\n\nfunc (x *OpaqueAddress) ClearStreetLine2() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_StreetLine2 = nil\n}\n\nfunc (x *OpaqueAddress) ClearCity() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_City = nil\n}\n\nfunc (x *OpaqueAddress) ClearState() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)\n\tx.xxx_hidden_State = nil\n}\n\nfunc (x *OpaqueAddress) ClearCountry() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)\n\tx.xxx_hidden_Country = nil\n}\n\nfunc (x *OpaqueAddress) ClearPostalCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 5)\n\tx.xxx_hidden_PostalCode = nil\n}\n\nfunc (x *OpaqueAddress) ClearAddressType() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 6)\n\tx.xxx_hidden_AddressType = OpaqueAddress_OPAQUE_ADDRESS_TYPE_UNSPECIFIED\n}\n\nfunc (x *OpaqueAddress) ClearIsDefault() {\n\tx.xxx_hidden_IsDefault = nil\n}\n\ntype OpaqueAddress_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tStreetLine1 *string\n\tStreetLine2 *string\n\tCity        *string\n\tState       *string\n\tCountry     *string\n\tPostalCode  *string\n\tAddressType *OpaqueAddress_OpaqueAddressType\n\tIsDefault   *wrapperspb.BoolValue\n\tMetadata    map[string]string\n}\n\nfunc (b0 OpaqueAddress_builder) Build() *OpaqueAddress {\n\tm0 := &OpaqueAddress{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.StreetLine1 != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 9)\n\t\tx.xxx_hidden_StreetLine1 = b.StreetLine1\n\t}\n\tif b.StreetLine2 != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 9)\n\t\tx.xxx_hidden_StreetLine2 = b.StreetLine2\n\t}\n\tif b.City != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 9)\n\t\tx.xxx_hidden_City = b.City\n\t}\n\tif b.State != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 9)\n\t\tx.xxx_hidden_State = b.State\n\t}\n\tif b.Country != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 9)\n\t\tx.xxx_hidden_Country = b.Country\n\t}\n\tif b.PostalCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 5, 9)\n\t\tx.xxx_hidden_PostalCode = b.PostalCode\n\t}\n\tif b.AddressType != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 6, 9)\n\t\tx.xxx_hidden_AddressType = *b.AddressType\n\t}\n\tx.xxx_hidden_IsDefault = b.IsDefault\n\tx.xxx_hidden_Metadata = b.Metadata\n\treturn m0\n}\n\n// OpaquePrice represents a monetary value with currency\ntype OpaquePrice struct {\n\tstate                      protoimpl.MessageState  `protogen:\"opaque.v1\"`\n\txxx_hidden_Amount          float64                 `protobuf:\"fixed64,1,opt,name=amount\"`\n\txxx_hidden_CurrencyCode    *string                 `protobuf:\"bytes,2,opt,name=currency_code,json=currencyCode\"`\n\txxx_hidden_IsDiscounted    bool                    `protobuf:\"varint,3,opt,name=is_discounted,json=isDiscounted\"`\n\txxx_hidden_OriginalAmount  *wrapperspb.DoubleValue `protobuf:\"bytes,4,opt,name=original_amount,json=originalAmount\"`\n\txxx_hidden_PriceValidUntil *timestamppb.Timestamp  `protobuf:\"bytes,5,opt,name=price_valid_until,json=priceValidUntil\"`\n\tXXX_raceDetectHookData     protoimpl.RaceDetectHookData\n\tXXX_presence               [1]uint32\n\tunknownFields              protoimpl.UnknownFields\n\tsizeCache                  protoimpl.SizeCache\n}\n\nfunc (x *OpaquePrice) Reset() {\n\t*x = OpaquePrice{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[19]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaquePrice) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaquePrice) ProtoMessage() {}\n\nfunc (x *OpaquePrice) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[19]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaquePrice) GetAmount() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Amount\n\t}\n\treturn 0\n}\n\nfunc (x *OpaquePrice) GetCurrencyCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CurrencyCode != nil {\n\t\t\treturn *x.xxx_hidden_CurrencyCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaquePrice) GetIsDiscounted() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_IsDiscounted\n\t}\n\treturn false\n}\n\nfunc (x *OpaquePrice) GetOriginalAmount() *wrapperspb.DoubleValue {\n\tif x != nil {\n\t\treturn x.xxx_hidden_OriginalAmount\n\t}\n\treturn nil\n}\n\nfunc (x *OpaquePrice) GetPriceValidUntil() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_PriceValidUntil\n\t}\n\treturn nil\n}\n\nfunc (x *OpaquePrice) SetAmount(v float64) {\n\tx.xxx_hidden_Amount = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 5)\n}\n\nfunc (x *OpaquePrice) SetCurrencyCode(v string) {\n\tx.xxx_hidden_CurrencyCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 5)\n}\n\nfunc (x *OpaquePrice) SetIsDiscounted(v bool) {\n\tx.xxx_hidden_IsDiscounted = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 5)\n}\n\nfunc (x *OpaquePrice) SetOriginalAmount(v *wrapperspb.DoubleValue) {\n\tx.xxx_hidden_OriginalAmount = v\n}\n\nfunc (x *OpaquePrice) SetPriceValidUntil(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_PriceValidUntil = v\n}\n\nfunc (x *OpaquePrice) HasAmount() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaquePrice) HasCurrencyCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaquePrice) HasIsDiscounted() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaquePrice) HasOriginalAmount() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_OriginalAmount != nil\n}\n\nfunc (x *OpaquePrice) HasPriceValidUntil() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_PriceValidUntil != nil\n}\n\nfunc (x *OpaquePrice) ClearAmount() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_Amount = 0\n}\n\nfunc (x *OpaquePrice) ClearCurrencyCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_CurrencyCode = nil\n}\n\nfunc (x *OpaquePrice) ClearIsDiscounted() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_IsDiscounted = false\n}\n\nfunc (x *OpaquePrice) ClearOriginalAmount() {\n\tx.xxx_hidden_OriginalAmount = nil\n}\n\nfunc (x *OpaquePrice) ClearPriceValidUntil() {\n\tx.xxx_hidden_PriceValidUntil = nil\n}\n\ntype OpaquePrice_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tAmount          *float64\n\tCurrencyCode    *string\n\tIsDiscounted    *bool\n\tOriginalAmount  *wrapperspb.DoubleValue\n\tPriceValidUntil *timestamppb.Timestamp\n}\n\nfunc (b0 OpaquePrice_builder) Build() *OpaquePrice {\n\tm0 := &OpaquePrice{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.Amount != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 5)\n\t\tx.xxx_hidden_Amount = *b.Amount\n\t}\n\tif b.CurrencyCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 5)\n\t\tx.xxx_hidden_CurrencyCode = b.CurrencyCode\n\t}\n\tif b.IsDiscounted != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 5)\n\t\tx.xxx_hidden_IsDiscounted = *b.IsDiscounted\n\t}\n\tx.xxx_hidden_OriginalAmount = b.OriginalAmount\n\tx.xxx_hidden_PriceValidUntil = b.PriceValidUntil\n\treturn m0\n}\n\n// OpaqueProductCategory represents a product category\ntype OpaqueProductCategory struct {\n\tstate                     protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_CategoryId     *string                `protobuf:\"bytes,1,opt,name=category_id,json=categoryId\"`\n\txxx_hidden_Name           *string                `protobuf:\"bytes,2,opt,name=name\"`\n\txxx_hidden_Description    *string                `protobuf:\"bytes,3,opt,name=description\"`\n\txxx_hidden_ParentCategory *OpaqueProductCategory `protobuf:\"bytes,4,opt,name=parent_category,json=parentCategory\"`\n\txxx_hidden_Tags           []string               `protobuf:\"bytes,5,rep,name=tags\"`\n\txxx_hidden_CreatedAt      *timestamppb.Timestamp `protobuf:\"bytes,6,opt,name=created_at,json=createdAt\"`\n\txxx_hidden_UpdatedAt      *timestamppb.Timestamp `protobuf:\"bytes,7,opt,name=updated_at,json=updatedAt\"`\n\tXXX_raceDetectHookData    protoimpl.RaceDetectHookData\n\tXXX_presence              [1]uint32\n\tunknownFields             protoimpl.UnknownFields\n\tsizeCache                 protoimpl.SizeCache\n}\n\nfunc (x *OpaqueProductCategory) Reset() {\n\t*x = OpaqueProductCategory{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[20]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueProductCategory) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueProductCategory) ProtoMessage() {}\n\nfunc (x *OpaqueProductCategory) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[20]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueProductCategory) GetCategoryId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CategoryId != nil {\n\t\t\treturn *x.xxx_hidden_CategoryId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProductCategory) GetName() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Name != nil {\n\t\t\treturn *x.xxx_hidden_Name\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProductCategory) GetDescription() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Description != nil {\n\t\t\treturn *x.xxx_hidden_Description\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProductCategory) GetParentCategory() *OpaqueProductCategory {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ParentCategory\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductCategory) GetTags() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Tags\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductCategory) GetCreatedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_CreatedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductCategory) GetUpdatedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_UpdatedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductCategory) SetCategoryId(v string) {\n\tx.xxx_hidden_CategoryId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 7)\n}\n\nfunc (x *OpaqueProductCategory) SetName(v string) {\n\tx.xxx_hidden_Name = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 7)\n}\n\nfunc (x *OpaqueProductCategory) SetDescription(v string) {\n\tx.xxx_hidden_Description = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 7)\n}\n\nfunc (x *OpaqueProductCategory) SetParentCategory(v *OpaqueProductCategory) {\n\tx.xxx_hidden_ParentCategory = v\n}\n\nfunc (x *OpaqueProductCategory) SetTags(v []string) {\n\tx.xxx_hidden_Tags = v\n}\n\nfunc (x *OpaqueProductCategory) SetCreatedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_CreatedAt = v\n}\n\nfunc (x *OpaqueProductCategory) SetUpdatedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_UpdatedAt = v\n}\n\nfunc (x *OpaqueProductCategory) HasCategoryId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueProductCategory) HasName() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueProductCategory) HasDescription() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueProductCategory) HasParentCategory() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ParentCategory != nil\n}\n\nfunc (x *OpaqueProductCategory) HasCreatedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_CreatedAt != nil\n}\n\nfunc (x *OpaqueProductCategory) HasUpdatedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_UpdatedAt != nil\n}\n\nfunc (x *OpaqueProductCategory) ClearCategoryId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_CategoryId = nil\n}\n\nfunc (x *OpaqueProductCategory) ClearName() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Name = nil\n}\n\nfunc (x *OpaqueProductCategory) ClearDescription() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_Description = nil\n}\n\nfunc (x *OpaqueProductCategory) ClearParentCategory() {\n\tx.xxx_hidden_ParentCategory = nil\n}\n\nfunc (x *OpaqueProductCategory) ClearCreatedAt() {\n\tx.xxx_hidden_CreatedAt = nil\n}\n\nfunc (x *OpaqueProductCategory) ClearUpdatedAt() {\n\tx.xxx_hidden_UpdatedAt = nil\n}\n\ntype OpaqueProductCategory_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tCategoryId     *string\n\tName           *string\n\tDescription    *string\n\tParentCategory *OpaqueProductCategory\n\tTags           []string\n\tCreatedAt      *timestamppb.Timestamp\n\tUpdatedAt      *timestamppb.Timestamp\n}\n\nfunc (b0 OpaqueProductCategory_builder) Build() *OpaqueProductCategory {\n\tm0 := &OpaqueProductCategory{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.CategoryId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 7)\n\t\tx.xxx_hidden_CategoryId = b.CategoryId\n\t}\n\tif b.Name != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 7)\n\t\tx.xxx_hidden_Name = b.Name\n\t}\n\tif b.Description != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 7)\n\t\tx.xxx_hidden_Description = b.Description\n\t}\n\tx.xxx_hidden_ParentCategory = b.ParentCategory\n\tx.xxx_hidden_Tags = b.Tags\n\tx.xxx_hidden_CreatedAt = b.CreatedAt\n\tx.xxx_hidden_UpdatedAt = b.UpdatedAt\n\treturn m0\n}\n\n// OpaqueProductVariant represents a specific variant of a product\ntype OpaqueProductVariant struct {\n\tstate                     protoimpl.MessageState              `protogen:\"opaque.v1\"`\n\txxx_hidden_VariantId      *string                             `protobuf:\"bytes,1,opt,name=variant_id,json=variantId\"`\n\txxx_hidden_Sku            *string                             `protobuf:\"bytes,2,opt,name=sku\"`\n\txxx_hidden_Name           *string                             `protobuf:\"bytes,3,opt,name=name\"`\n\txxx_hidden_Price          *OpaquePrice                        `protobuf:\"bytes,4,opt,name=price\"`\n\txxx_hidden_InventoryCount int32                               `protobuf:\"varint,5,opt,name=inventory_count,json=inventoryCount\"`\n\txxx_hidden_Attributes     map[string]string                   `protobuf:\"bytes,6,rep,name=attributes\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_ImageData      []byte                              `protobuf:\"bytes,7,opt,name=image_data,json=imageData\"`\n\txxx_hidden_ImageUrls      []string                            `protobuf:\"bytes,8,rep,name=image_urls,json=imageUrls\"`\n\txxx_hidden_IsAvailable    *wrapperspb.BoolValue               `protobuf:\"bytes,9,opt,name=is_available,json=isAvailable\"`\n\txxx_hidden_DiscountInfo   isOpaqueProductVariant_DiscountInfo `protobuf_oneof:\"discount_info\"`\n\tXXX_raceDetectHookData    protoimpl.RaceDetectHookData\n\tXXX_presence              [1]uint32\n\tunknownFields             protoimpl.UnknownFields\n\tsizeCache                 protoimpl.SizeCache\n}\n\nfunc (x *OpaqueProductVariant) Reset() {\n\t*x = OpaqueProductVariant{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[21]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueProductVariant) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueProductVariant) ProtoMessage() {}\n\nfunc (x *OpaqueProductVariant) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[21]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueProductVariant) GetVariantId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_VariantId != nil {\n\t\t\treturn *x.xxx_hidden_VariantId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProductVariant) GetSku() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Sku != nil {\n\t\t\treturn *x.xxx_hidden_Sku\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProductVariant) GetName() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Name != nil {\n\t\t\treturn *x.xxx_hidden_Name\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProductVariant) GetPrice() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Price\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductVariant) GetInventoryCount() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_InventoryCount\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProductVariant) GetAttributes() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Attributes\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductVariant) GetImageData() []byte {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ImageData\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductVariant) GetImageUrls() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ImageUrls\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductVariant) GetIsAvailable() *wrapperspb.BoolValue {\n\tif x != nil {\n\t\treturn x.xxx_hidden_IsAvailable\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProductVariant) GetPercentageOff() float64 {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_DiscountInfo.(*opaqueProductVariant_PercentageOff); ok {\n\t\t\treturn x.PercentageOff\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProductVariant) GetFixedAmountOff() float64 {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_DiscountInfo.(*opaqueProductVariant_FixedAmountOff); ok {\n\t\t\treturn x.FixedAmountOff\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProductVariant) SetVariantId(v string) {\n\tx.xxx_hidden_VariantId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 10)\n}\n\nfunc (x *OpaqueProductVariant) SetSku(v string) {\n\tx.xxx_hidden_Sku = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 10)\n}\n\nfunc (x *OpaqueProductVariant) SetName(v string) {\n\tx.xxx_hidden_Name = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 10)\n}\n\nfunc (x *OpaqueProductVariant) SetPrice(v *OpaquePrice) {\n\tx.xxx_hidden_Price = v\n}\n\nfunc (x *OpaqueProductVariant) SetInventoryCount(v int32) {\n\tx.xxx_hidden_InventoryCount = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 10)\n}\n\nfunc (x *OpaqueProductVariant) SetAttributes(v map[string]string) {\n\tx.xxx_hidden_Attributes = v\n}\n\nfunc (x *OpaqueProductVariant) SetImageData(v []byte) {\n\tif v == nil {\n\t\tv = []byte{}\n\t}\n\tx.xxx_hidden_ImageData = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 6, 10)\n}\n\nfunc (x *OpaqueProductVariant) SetImageUrls(v []string) {\n\tx.xxx_hidden_ImageUrls = v\n}\n\nfunc (x *OpaqueProductVariant) SetIsAvailable(v *wrapperspb.BoolValue) {\n\tx.xxx_hidden_IsAvailable = v\n}\n\nfunc (x *OpaqueProductVariant) SetPercentageOff(v float64) {\n\tx.xxx_hidden_DiscountInfo = &opaqueProductVariant_PercentageOff{v}\n}\n\nfunc (x *OpaqueProductVariant) SetFixedAmountOff(v float64) {\n\tx.xxx_hidden_DiscountInfo = &opaqueProductVariant_FixedAmountOff{v}\n}\n\nfunc (x *OpaqueProductVariant) HasVariantId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueProductVariant) HasSku() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueProductVariant) HasName() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueProductVariant) HasPrice() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Price != nil\n}\n\nfunc (x *OpaqueProductVariant) HasInventoryCount() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 4)\n}\n\nfunc (x *OpaqueProductVariant) HasImageData() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 6)\n}\n\nfunc (x *OpaqueProductVariant) HasIsAvailable() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_IsAvailable != nil\n}\n\nfunc (x *OpaqueProductVariant) HasDiscountInfo() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_DiscountInfo != nil\n}\n\nfunc (x *OpaqueProductVariant) HasPercentageOff() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_DiscountInfo.(*opaqueProductVariant_PercentageOff)\n\treturn ok\n}\n\nfunc (x *OpaqueProductVariant) HasFixedAmountOff() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_DiscountInfo.(*opaqueProductVariant_FixedAmountOff)\n\treturn ok\n}\n\nfunc (x *OpaqueProductVariant) ClearVariantId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_VariantId = nil\n}\n\nfunc (x *OpaqueProductVariant) ClearSku() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Sku = nil\n}\n\nfunc (x *OpaqueProductVariant) ClearName() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_Name = nil\n}\n\nfunc (x *OpaqueProductVariant) ClearPrice() {\n\tx.xxx_hidden_Price = nil\n}\n\nfunc (x *OpaqueProductVariant) ClearInventoryCount() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)\n\tx.xxx_hidden_InventoryCount = 0\n}\n\nfunc (x *OpaqueProductVariant) ClearImageData() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 6)\n\tx.xxx_hidden_ImageData = nil\n}\n\nfunc (x *OpaqueProductVariant) ClearIsAvailable() {\n\tx.xxx_hidden_IsAvailable = nil\n}\n\nfunc (x *OpaqueProductVariant) ClearDiscountInfo() {\n\tx.xxx_hidden_DiscountInfo = nil\n}\n\nfunc (x *OpaqueProductVariant) ClearPercentageOff() {\n\tif _, ok := x.xxx_hidden_DiscountInfo.(*opaqueProductVariant_PercentageOff); ok {\n\t\tx.xxx_hidden_DiscountInfo = nil\n\t}\n}\n\nfunc (x *OpaqueProductVariant) ClearFixedAmountOff() {\n\tif _, ok := x.xxx_hidden_DiscountInfo.(*opaqueProductVariant_FixedAmountOff); ok {\n\t\tx.xxx_hidden_DiscountInfo = nil\n\t}\n}\n\nconst OpaqueProductVariant_DiscountInfo_not_set_case case_OpaqueProductVariant_DiscountInfo = 0\nconst OpaqueProductVariant_PercentageOff_case case_OpaqueProductVariant_DiscountInfo = 10\nconst OpaqueProductVariant_FixedAmountOff_case case_OpaqueProductVariant_DiscountInfo = 11\n\nfunc (x *OpaqueProductVariant) WhichDiscountInfo() case_OpaqueProductVariant_DiscountInfo {\n\tif x == nil {\n\t\treturn OpaqueProductVariant_DiscountInfo_not_set_case\n\t}\n\tswitch x.xxx_hidden_DiscountInfo.(type) {\n\tcase *opaqueProductVariant_PercentageOff:\n\t\treturn OpaqueProductVariant_PercentageOff_case\n\tcase *opaqueProductVariant_FixedAmountOff:\n\t\treturn OpaqueProductVariant_FixedAmountOff_case\n\tdefault:\n\t\treturn OpaqueProductVariant_DiscountInfo_not_set_case\n\t}\n}\n\ntype OpaqueProductVariant_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tVariantId      *string\n\tSku            *string\n\tName           *string\n\tPrice          *OpaquePrice\n\tInventoryCount *int32\n\tAttributes     map[string]string\n\tImageData      []byte\n\tImageUrls      []string\n\tIsAvailable    *wrapperspb.BoolValue\n\t// Fields of oneof xxx_hidden_DiscountInfo:\n\tPercentageOff  *float64\n\tFixedAmountOff *float64\n\t// -- end of xxx_hidden_DiscountInfo\n}\n\nfunc (b0 OpaqueProductVariant_builder) Build() *OpaqueProductVariant {\n\tm0 := &OpaqueProductVariant{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.VariantId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 10)\n\t\tx.xxx_hidden_VariantId = b.VariantId\n\t}\n\tif b.Sku != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 10)\n\t\tx.xxx_hidden_Sku = b.Sku\n\t}\n\tif b.Name != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 10)\n\t\tx.xxx_hidden_Name = b.Name\n\t}\n\tx.xxx_hidden_Price = b.Price\n\tif b.InventoryCount != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 10)\n\t\tx.xxx_hidden_InventoryCount = *b.InventoryCount\n\t}\n\tx.xxx_hidden_Attributes = b.Attributes\n\tif b.ImageData != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 6, 10)\n\t\tx.xxx_hidden_ImageData = b.ImageData\n\t}\n\tx.xxx_hidden_ImageUrls = b.ImageUrls\n\tx.xxx_hidden_IsAvailable = b.IsAvailable\n\tif b.PercentageOff != nil {\n\t\tx.xxx_hidden_DiscountInfo = &opaqueProductVariant_PercentageOff{*b.PercentageOff}\n\t}\n\tif b.FixedAmountOff != nil {\n\t\tx.xxx_hidden_DiscountInfo = &opaqueProductVariant_FixedAmountOff{*b.FixedAmountOff}\n\t}\n\treturn m0\n}\n\ntype case_OpaqueProductVariant_DiscountInfo protoreflect.FieldNumber\n\nfunc (x case_OpaqueProductVariant_DiscountInfo) String() string {\n\tmd := file_examples_internal_proto_examplepb_opaque_proto_msgTypes[21].Descriptor()\n\tif x == 0 {\n\t\treturn \"not set\"\n\t}\n\treturn protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))\n}\n\ntype isOpaqueProductVariant_DiscountInfo interface {\n\tisOpaqueProductVariant_DiscountInfo()\n}\n\ntype opaqueProductVariant_PercentageOff struct {\n\tPercentageOff float64 `protobuf:\"fixed64,10,opt,name=percentage_off,json=percentageOff,oneof\"`\n}\n\ntype opaqueProductVariant_FixedAmountOff struct {\n\tFixedAmountOff float64 `protobuf:\"fixed64,11,opt,name=fixed_amount_off,json=fixedAmountOff,oneof\"`\n}\n\nfunc (*opaqueProductVariant_PercentageOff) isOpaqueProductVariant_DiscountInfo() {}\n\nfunc (*opaqueProductVariant_FixedAmountOff) isOpaqueProductVariant_DiscountInfo() {}\n\n// OpaqueProduct represents a product in the e-commerce system\ntype OpaqueProduct struct {\n\tstate                          protoimpl.MessageState                 `protogen:\"opaque.v1\"`\n\txxx_hidden_ProductId           *string                                `protobuf:\"bytes,1,opt,name=product_id,json=productId\"`\n\txxx_hidden_Name                *string                                `protobuf:\"bytes,2,opt,name=name\"`\n\txxx_hidden_Description         *string                                `protobuf:\"bytes,3,opt,name=description\"`\n\txxx_hidden_Brand               *string                                `protobuf:\"bytes,4,opt,name=brand\"`\n\txxx_hidden_BasePrice           *OpaquePrice                           `protobuf:\"bytes,5,opt,name=base_price,json=basePrice\"`\n\txxx_hidden_Category            *OpaqueProductCategory                 `protobuf:\"bytes,6,opt,name=category\"`\n\txxx_hidden_Variants            *[]*OpaqueProductVariant               `protobuf:\"bytes,7,rep,name=variants\"`\n\txxx_hidden_Tags                []string                               `protobuf:\"bytes,8,rep,name=tags\"`\n\txxx_hidden_AverageRating       float64                                `protobuf:\"fixed64,9,opt,name=average_rating,json=averageRating\"`\n\txxx_hidden_ReviewCount         int32                                  `protobuf:\"varint,10,opt,name=review_count,json=reviewCount\"`\n\txxx_hidden_IsFeatured          *wrapperspb.BoolValue                  `protobuf:\"bytes,11,opt,name=is_featured,json=isFeatured\"`\n\txxx_hidden_CreatedAt           *timestamppb.Timestamp                 `protobuf:\"bytes,12,opt,name=created_at,json=createdAt\"`\n\txxx_hidden_UpdatedAt           *timestamppb.Timestamp                 `protobuf:\"bytes,13,opt,name=updated_at,json=updatedAt\"`\n\txxx_hidden_AverageShippingTime *durationpb.Duration                   `protobuf:\"bytes,14,opt,name=average_shipping_time,json=averageShippingTime\"`\n\txxx_hidden_Status              OpaqueProduct_OpaqueProductStatus      `protobuf:\"varint,15,opt,name=status,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct_OpaqueProductStatus\"`\n\txxx_hidden_Metadata            map[string]string                      `protobuf:\"bytes,16,rep,name=metadata\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_RegionalPrices      map[string]*OpaquePrice                `protobuf:\"bytes,17,rep,name=regional_prices,json=regionalPrices\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_Dimensions          *OpaqueProduct_OpaqueProductDimensions `protobuf:\"bytes,18,opt,name=dimensions\"`\n\txxx_hidden_TaxInfo             isOpaqueProduct_TaxInfo                `protobuf_oneof:\"tax_info\"`\n\tXXX_raceDetectHookData         protoimpl.RaceDetectHookData\n\tXXX_presence                   [1]uint32\n\tunknownFields                  protoimpl.UnknownFields\n\tsizeCache                      protoimpl.SizeCache\n}\n\nfunc (x *OpaqueProduct) Reset() {\n\t*x = OpaqueProduct{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[22]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueProduct) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueProduct) ProtoMessage() {}\n\nfunc (x *OpaqueProduct) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[22]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueProduct) GetProductId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ProductId != nil {\n\t\t\treturn *x.xxx_hidden_ProductId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProduct) GetName() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Name != nil {\n\t\t\treturn *x.xxx_hidden_Name\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProduct) GetDescription() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Description != nil {\n\t\t\treturn *x.xxx_hidden_Description\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProduct) GetBrand() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Brand != nil {\n\t\t\treturn *x.xxx_hidden_Brand\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueProduct) GetBasePrice() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_BasePrice\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetCategory() *OpaqueProductCategory {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Category\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetVariants() []*OpaqueProductVariant {\n\tif x != nil {\n\t\tif x.xxx_hidden_Variants != nil {\n\t\t\treturn *x.xxx_hidden_Variants\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetTags() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Tags\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetAverageRating() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_AverageRating\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProduct) GetReviewCount() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ReviewCount\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProduct) GetIsFeatured() *wrapperspb.BoolValue {\n\tif x != nil {\n\t\treturn x.xxx_hidden_IsFeatured\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetCreatedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_CreatedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetUpdatedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_UpdatedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetAverageShippingTime() *durationpb.Duration {\n\tif x != nil {\n\t\treturn x.xxx_hidden_AverageShippingTime\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetStatus() OpaqueProduct_OpaqueProductStatus {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 14) {\n\t\t\treturn x.xxx_hidden_Status\n\t\t}\n\t}\n\treturn OpaqueProduct_OPAQUE_PRODUCT_STATUS_UNSPECIFIED\n}\n\nfunc (x *OpaqueProduct) GetMetadata() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Metadata\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetRegionalPrices() map[string]*OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_RegionalPrices\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetDimensions() *OpaqueProduct_OpaqueProductDimensions {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Dimensions\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueProduct) GetTaxPercentage() float64 {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_TaxInfo.(*opaqueProduct_TaxPercentage); ok {\n\t\t\treturn x.TaxPercentage\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProduct) GetTaxExempt() bool {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_TaxInfo.(*opaqueProduct_TaxExempt); ok {\n\t\t\treturn x.TaxExempt\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (x *OpaqueProduct) SetProductId(v string) {\n\tx.xxx_hidden_ProductId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 19)\n}\n\nfunc (x *OpaqueProduct) SetName(v string) {\n\tx.xxx_hidden_Name = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 19)\n}\n\nfunc (x *OpaqueProduct) SetDescription(v string) {\n\tx.xxx_hidden_Description = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 19)\n}\n\nfunc (x *OpaqueProduct) SetBrand(v string) {\n\tx.xxx_hidden_Brand = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 19)\n}\n\nfunc (x *OpaqueProduct) SetBasePrice(v *OpaquePrice) {\n\tx.xxx_hidden_BasePrice = v\n}\n\nfunc (x *OpaqueProduct) SetCategory(v *OpaqueProductCategory) {\n\tx.xxx_hidden_Category = v\n}\n\nfunc (x *OpaqueProduct) SetVariants(v []*OpaqueProductVariant) {\n\tx.xxx_hidden_Variants = &v\n}\n\nfunc (x *OpaqueProduct) SetTags(v []string) {\n\tx.xxx_hidden_Tags = v\n}\n\nfunc (x *OpaqueProduct) SetAverageRating(v float64) {\n\tx.xxx_hidden_AverageRating = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 8, 19)\n}\n\nfunc (x *OpaqueProduct) SetReviewCount(v int32) {\n\tx.xxx_hidden_ReviewCount = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 9, 19)\n}\n\nfunc (x *OpaqueProduct) SetIsFeatured(v *wrapperspb.BoolValue) {\n\tx.xxx_hidden_IsFeatured = v\n}\n\nfunc (x *OpaqueProduct) SetCreatedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_CreatedAt = v\n}\n\nfunc (x *OpaqueProduct) SetUpdatedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_UpdatedAt = v\n}\n\nfunc (x *OpaqueProduct) SetAverageShippingTime(v *durationpb.Duration) {\n\tx.xxx_hidden_AverageShippingTime = v\n}\n\nfunc (x *OpaqueProduct) SetStatus(v OpaqueProduct_OpaqueProductStatus) {\n\tx.xxx_hidden_Status = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 14, 19)\n}\n\nfunc (x *OpaqueProduct) SetMetadata(v map[string]string) {\n\tx.xxx_hidden_Metadata = v\n}\n\nfunc (x *OpaqueProduct) SetRegionalPrices(v map[string]*OpaquePrice) {\n\tx.xxx_hidden_RegionalPrices = v\n}\n\nfunc (x *OpaqueProduct) SetDimensions(v *OpaqueProduct_OpaqueProductDimensions) {\n\tx.xxx_hidden_Dimensions = v\n}\n\nfunc (x *OpaqueProduct) SetTaxPercentage(v float64) {\n\tx.xxx_hidden_TaxInfo = &opaqueProduct_TaxPercentage{v}\n}\n\nfunc (x *OpaqueProduct) SetTaxExempt(v bool) {\n\tx.xxx_hidden_TaxInfo = &opaqueProduct_TaxExempt{v}\n}\n\nfunc (x *OpaqueProduct) HasProductId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueProduct) HasName() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueProduct) HasDescription() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueProduct) HasBrand() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 3)\n}\n\nfunc (x *OpaqueProduct) HasBasePrice() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_BasePrice != nil\n}\n\nfunc (x *OpaqueProduct) HasCategory() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Category != nil\n}\n\nfunc (x *OpaqueProduct) HasAverageRating() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 8)\n}\n\nfunc (x *OpaqueProduct) HasReviewCount() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 9)\n}\n\nfunc (x *OpaqueProduct) HasIsFeatured() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_IsFeatured != nil\n}\n\nfunc (x *OpaqueProduct) HasCreatedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_CreatedAt != nil\n}\n\nfunc (x *OpaqueProduct) HasUpdatedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_UpdatedAt != nil\n}\n\nfunc (x *OpaqueProduct) HasAverageShippingTime() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_AverageShippingTime != nil\n}\n\nfunc (x *OpaqueProduct) HasStatus() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 14)\n}\n\nfunc (x *OpaqueProduct) HasDimensions() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Dimensions != nil\n}\n\nfunc (x *OpaqueProduct) HasTaxInfo() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_TaxInfo != nil\n}\n\nfunc (x *OpaqueProduct) HasTaxPercentage() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_TaxInfo.(*opaqueProduct_TaxPercentage)\n\treturn ok\n}\n\nfunc (x *OpaqueProduct) HasTaxExempt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_TaxInfo.(*opaqueProduct_TaxExempt)\n\treturn ok\n}\n\nfunc (x *OpaqueProduct) ClearProductId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_ProductId = nil\n}\n\nfunc (x *OpaqueProduct) ClearName() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Name = nil\n}\n\nfunc (x *OpaqueProduct) ClearDescription() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_Description = nil\n}\n\nfunc (x *OpaqueProduct) ClearBrand() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)\n\tx.xxx_hidden_Brand = nil\n}\n\nfunc (x *OpaqueProduct) ClearBasePrice() {\n\tx.xxx_hidden_BasePrice = nil\n}\n\nfunc (x *OpaqueProduct) ClearCategory() {\n\tx.xxx_hidden_Category = nil\n}\n\nfunc (x *OpaqueProduct) ClearAverageRating() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 8)\n\tx.xxx_hidden_AverageRating = 0\n}\n\nfunc (x *OpaqueProduct) ClearReviewCount() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 9)\n\tx.xxx_hidden_ReviewCount = 0\n}\n\nfunc (x *OpaqueProduct) ClearIsFeatured() {\n\tx.xxx_hidden_IsFeatured = nil\n}\n\nfunc (x *OpaqueProduct) ClearCreatedAt() {\n\tx.xxx_hidden_CreatedAt = nil\n}\n\nfunc (x *OpaqueProduct) ClearUpdatedAt() {\n\tx.xxx_hidden_UpdatedAt = nil\n}\n\nfunc (x *OpaqueProduct) ClearAverageShippingTime() {\n\tx.xxx_hidden_AverageShippingTime = nil\n}\n\nfunc (x *OpaqueProduct) ClearStatus() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 14)\n\tx.xxx_hidden_Status = OpaqueProduct_OPAQUE_PRODUCT_STATUS_UNSPECIFIED\n}\n\nfunc (x *OpaqueProduct) ClearDimensions() {\n\tx.xxx_hidden_Dimensions = nil\n}\n\nfunc (x *OpaqueProduct) ClearTaxInfo() {\n\tx.xxx_hidden_TaxInfo = nil\n}\n\nfunc (x *OpaqueProduct) ClearTaxPercentage() {\n\tif _, ok := x.xxx_hidden_TaxInfo.(*opaqueProduct_TaxPercentage); ok {\n\t\tx.xxx_hidden_TaxInfo = nil\n\t}\n}\n\nfunc (x *OpaqueProduct) ClearTaxExempt() {\n\tif _, ok := x.xxx_hidden_TaxInfo.(*opaqueProduct_TaxExempt); ok {\n\t\tx.xxx_hidden_TaxInfo = nil\n\t}\n}\n\nconst OpaqueProduct_TaxInfo_not_set_case case_OpaqueProduct_TaxInfo = 0\nconst OpaqueProduct_TaxPercentage_case case_OpaqueProduct_TaxInfo = 19\nconst OpaqueProduct_TaxExempt_case case_OpaqueProduct_TaxInfo = 20\n\nfunc (x *OpaqueProduct) WhichTaxInfo() case_OpaqueProduct_TaxInfo {\n\tif x == nil {\n\t\treturn OpaqueProduct_TaxInfo_not_set_case\n\t}\n\tswitch x.xxx_hidden_TaxInfo.(type) {\n\tcase *opaqueProduct_TaxPercentage:\n\t\treturn OpaqueProduct_TaxPercentage_case\n\tcase *opaqueProduct_TaxExempt:\n\t\treturn OpaqueProduct_TaxExempt_case\n\tdefault:\n\t\treturn OpaqueProduct_TaxInfo_not_set_case\n\t}\n}\n\ntype OpaqueProduct_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProductId           *string\n\tName                *string\n\tDescription         *string\n\tBrand               *string\n\tBasePrice           *OpaquePrice\n\tCategory            *OpaqueProductCategory\n\tVariants            []*OpaqueProductVariant\n\tTags                []string\n\tAverageRating       *float64\n\tReviewCount         *int32\n\tIsFeatured          *wrapperspb.BoolValue\n\tCreatedAt           *timestamppb.Timestamp\n\tUpdatedAt           *timestamppb.Timestamp\n\tAverageShippingTime *durationpb.Duration\n\tStatus              *OpaqueProduct_OpaqueProductStatus\n\tMetadata            map[string]string\n\tRegionalPrices      map[string]*OpaquePrice\n\tDimensions          *OpaqueProduct_OpaqueProductDimensions\n\t// Fields of oneof xxx_hidden_TaxInfo:\n\tTaxPercentage *float64\n\tTaxExempt     *bool\n\t// -- end of xxx_hidden_TaxInfo\n}\n\nfunc (b0 OpaqueProduct_builder) Build() *OpaqueProduct {\n\tm0 := &OpaqueProduct{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.ProductId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 19)\n\t\tx.xxx_hidden_ProductId = b.ProductId\n\t}\n\tif b.Name != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 19)\n\t\tx.xxx_hidden_Name = b.Name\n\t}\n\tif b.Description != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 19)\n\t\tx.xxx_hidden_Description = b.Description\n\t}\n\tif b.Brand != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 19)\n\t\tx.xxx_hidden_Brand = b.Brand\n\t}\n\tx.xxx_hidden_BasePrice = b.BasePrice\n\tx.xxx_hidden_Category = b.Category\n\tx.xxx_hidden_Variants = &b.Variants\n\tx.xxx_hidden_Tags = b.Tags\n\tif b.AverageRating != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 8, 19)\n\t\tx.xxx_hidden_AverageRating = *b.AverageRating\n\t}\n\tif b.ReviewCount != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 9, 19)\n\t\tx.xxx_hidden_ReviewCount = *b.ReviewCount\n\t}\n\tx.xxx_hidden_IsFeatured = b.IsFeatured\n\tx.xxx_hidden_CreatedAt = b.CreatedAt\n\tx.xxx_hidden_UpdatedAt = b.UpdatedAt\n\tx.xxx_hidden_AverageShippingTime = b.AverageShippingTime\n\tif b.Status != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 14, 19)\n\t\tx.xxx_hidden_Status = *b.Status\n\t}\n\tx.xxx_hidden_Metadata = b.Metadata\n\tx.xxx_hidden_RegionalPrices = b.RegionalPrices\n\tx.xxx_hidden_Dimensions = b.Dimensions\n\tif b.TaxPercentage != nil {\n\t\tx.xxx_hidden_TaxInfo = &opaqueProduct_TaxPercentage{*b.TaxPercentage}\n\t}\n\tif b.TaxExempt != nil {\n\t\tx.xxx_hidden_TaxInfo = &opaqueProduct_TaxExempt{*b.TaxExempt}\n\t}\n\treturn m0\n}\n\ntype case_OpaqueProduct_TaxInfo protoreflect.FieldNumber\n\nfunc (x case_OpaqueProduct_TaxInfo) String() string {\n\tmd := file_examples_internal_proto_examplepb_opaque_proto_msgTypes[22].Descriptor()\n\tif x == 0 {\n\t\treturn \"not set\"\n\t}\n\treturn protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))\n}\n\ntype isOpaqueProduct_TaxInfo interface {\n\tisOpaqueProduct_TaxInfo()\n}\n\ntype opaqueProduct_TaxPercentage struct {\n\tTaxPercentage float64 `protobuf:\"fixed64,19,opt,name=tax_percentage,json=taxPercentage,oneof\"`\n}\n\ntype opaqueProduct_TaxExempt struct {\n\tTaxExempt bool `protobuf:\"varint,20,opt,name=tax_exempt,json=taxExempt,oneof\"`\n}\n\nfunc (*opaqueProduct_TaxPercentage) isOpaqueProduct_TaxInfo() {}\n\nfunc (*opaqueProduct_TaxExempt) isOpaqueProduct_TaxInfo() {}\n\n// OpaqueCustomer represents a customer in the e-commerce system\ntype OpaqueCustomer struct {\n\tstate                     protoimpl.MessageState                 `protogen:\"opaque.v1\"`\n\txxx_hidden_CustomerId     *string                                `protobuf:\"bytes,1,opt,name=customer_id,json=customerId\"`\n\txxx_hidden_Email          *string                                `protobuf:\"bytes,2,opt,name=email\"`\n\txxx_hidden_FirstName      *string                                `protobuf:\"bytes,3,opt,name=first_name,json=firstName\"`\n\txxx_hidden_LastName       *string                                `protobuf:\"bytes,4,opt,name=last_name,json=lastName\"`\n\txxx_hidden_PhoneNumber    *string                                `protobuf:\"bytes,5,opt,name=phone_number,json=phoneNumber\"`\n\txxx_hidden_Addresses      *[]*OpaqueAddress                      `protobuf:\"bytes,6,rep,name=addresses\"`\n\txxx_hidden_CreatedAt      *timestamppb.Timestamp                 `protobuf:\"bytes,7,opt,name=created_at,json=createdAt\"`\n\txxx_hidden_LastLogin      *timestamppb.Timestamp                 `protobuf:\"bytes,8,opt,name=last_login,json=lastLogin\"`\n\txxx_hidden_Status         OpaqueCustomer_OpaqueCustomerStatus    `protobuf:\"varint,9,opt,name=status,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer_OpaqueCustomerStatus\"`\n\txxx_hidden_LoyaltyInfo    *OpaqueCustomer_OpaqueLoyaltyInfo      `protobuf:\"bytes,10,opt,name=loyalty_info,json=loyaltyInfo\"`\n\txxx_hidden_Preferences    map[string]string                      `protobuf:\"bytes,11,rep,name=preferences\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_PaymentMethods *[]*OpaqueCustomer_OpaquePaymentMethod `protobuf:\"bytes,12,rep,name=payment_methods,json=paymentMethods\"`\n\tXXX_raceDetectHookData    protoimpl.RaceDetectHookData\n\tXXX_presence              [1]uint32\n\tunknownFields             protoimpl.UnknownFields\n\tsizeCache                 protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCustomer) Reset() {\n\t*x = OpaqueCustomer{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[23]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCustomer) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCustomer) ProtoMessage() {}\n\nfunc (x *OpaqueCustomer) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[23]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCustomer) GetCustomerId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CustomerId != nil {\n\t\t\treturn *x.xxx_hidden_CustomerId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer) GetEmail() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Email != nil {\n\t\t\treturn *x.xxx_hidden_Email\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer) GetFirstName() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_FirstName != nil {\n\t\t\treturn *x.xxx_hidden_FirstName\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer) GetLastName() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_LastName != nil {\n\t\t\treturn *x.xxx_hidden_LastName\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer) GetPhoneNumber() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_PhoneNumber != nil {\n\t\t\treturn *x.xxx_hidden_PhoneNumber\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer) GetAddresses() []*OpaqueAddress {\n\tif x != nil {\n\t\tif x.xxx_hidden_Addresses != nil {\n\t\t\treturn *x.xxx_hidden_Addresses\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer) GetCreatedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_CreatedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer) GetLastLogin() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_LastLogin\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer) GetStatus() OpaqueCustomer_OpaqueCustomerStatus {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 8) {\n\t\t\treturn x.xxx_hidden_Status\n\t\t}\n\t}\n\treturn OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_UNSPECIFIED\n}\n\nfunc (x *OpaqueCustomer) GetLoyaltyInfo() *OpaqueCustomer_OpaqueLoyaltyInfo {\n\tif x != nil {\n\t\treturn x.xxx_hidden_LoyaltyInfo\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer) GetPreferences() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Preferences\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer) GetPaymentMethods() []*OpaqueCustomer_OpaquePaymentMethod {\n\tif x != nil {\n\t\tif x.xxx_hidden_PaymentMethods != nil {\n\t\t\treturn *x.xxx_hidden_PaymentMethods\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer) SetCustomerId(v string) {\n\tx.xxx_hidden_CustomerId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 12)\n}\n\nfunc (x *OpaqueCustomer) SetEmail(v string) {\n\tx.xxx_hidden_Email = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 12)\n}\n\nfunc (x *OpaqueCustomer) SetFirstName(v string) {\n\tx.xxx_hidden_FirstName = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 12)\n}\n\nfunc (x *OpaqueCustomer) SetLastName(v string) {\n\tx.xxx_hidden_LastName = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 12)\n}\n\nfunc (x *OpaqueCustomer) SetPhoneNumber(v string) {\n\tx.xxx_hidden_PhoneNumber = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 12)\n}\n\nfunc (x *OpaqueCustomer) SetAddresses(v []*OpaqueAddress) {\n\tx.xxx_hidden_Addresses = &v\n}\n\nfunc (x *OpaqueCustomer) SetCreatedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_CreatedAt = v\n}\n\nfunc (x *OpaqueCustomer) SetLastLogin(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_LastLogin = v\n}\n\nfunc (x *OpaqueCustomer) SetStatus(v OpaqueCustomer_OpaqueCustomerStatus) {\n\tx.xxx_hidden_Status = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 8, 12)\n}\n\nfunc (x *OpaqueCustomer) SetLoyaltyInfo(v *OpaqueCustomer_OpaqueLoyaltyInfo) {\n\tx.xxx_hidden_LoyaltyInfo = v\n}\n\nfunc (x *OpaqueCustomer) SetPreferences(v map[string]string) {\n\tx.xxx_hidden_Preferences = v\n}\n\nfunc (x *OpaqueCustomer) SetPaymentMethods(v []*OpaqueCustomer_OpaquePaymentMethod) {\n\tx.xxx_hidden_PaymentMethods = &v\n}\n\nfunc (x *OpaqueCustomer) HasCustomerId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueCustomer) HasEmail() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueCustomer) HasFirstName() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueCustomer) HasLastName() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 3)\n}\n\nfunc (x *OpaqueCustomer) HasPhoneNumber() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 4)\n}\n\nfunc (x *OpaqueCustomer) HasCreatedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_CreatedAt != nil\n}\n\nfunc (x *OpaqueCustomer) HasLastLogin() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_LastLogin != nil\n}\n\nfunc (x *OpaqueCustomer) HasStatus() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 8)\n}\n\nfunc (x *OpaqueCustomer) HasLoyaltyInfo() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_LoyaltyInfo != nil\n}\n\nfunc (x *OpaqueCustomer) ClearCustomerId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_CustomerId = nil\n}\n\nfunc (x *OpaqueCustomer) ClearEmail() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Email = nil\n}\n\nfunc (x *OpaqueCustomer) ClearFirstName() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_FirstName = nil\n}\n\nfunc (x *OpaqueCustomer) ClearLastName() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)\n\tx.xxx_hidden_LastName = nil\n}\n\nfunc (x *OpaqueCustomer) ClearPhoneNumber() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)\n\tx.xxx_hidden_PhoneNumber = nil\n}\n\nfunc (x *OpaqueCustomer) ClearCreatedAt() {\n\tx.xxx_hidden_CreatedAt = nil\n}\n\nfunc (x *OpaqueCustomer) ClearLastLogin() {\n\tx.xxx_hidden_LastLogin = nil\n}\n\nfunc (x *OpaqueCustomer) ClearStatus() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 8)\n\tx.xxx_hidden_Status = OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_UNSPECIFIED\n}\n\nfunc (x *OpaqueCustomer) ClearLoyaltyInfo() {\n\tx.xxx_hidden_LoyaltyInfo = nil\n}\n\ntype OpaqueCustomer_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tCustomerId     *string\n\tEmail          *string\n\tFirstName      *string\n\tLastName       *string\n\tPhoneNumber    *string\n\tAddresses      []*OpaqueAddress\n\tCreatedAt      *timestamppb.Timestamp\n\tLastLogin      *timestamppb.Timestamp\n\tStatus         *OpaqueCustomer_OpaqueCustomerStatus\n\tLoyaltyInfo    *OpaqueCustomer_OpaqueLoyaltyInfo\n\tPreferences    map[string]string\n\tPaymentMethods []*OpaqueCustomer_OpaquePaymentMethod\n}\n\nfunc (b0 OpaqueCustomer_builder) Build() *OpaqueCustomer {\n\tm0 := &OpaqueCustomer{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.CustomerId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 12)\n\t\tx.xxx_hidden_CustomerId = b.CustomerId\n\t}\n\tif b.Email != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 12)\n\t\tx.xxx_hidden_Email = b.Email\n\t}\n\tif b.FirstName != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 12)\n\t\tx.xxx_hidden_FirstName = b.FirstName\n\t}\n\tif b.LastName != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 12)\n\t\tx.xxx_hidden_LastName = b.LastName\n\t}\n\tif b.PhoneNumber != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 12)\n\t\tx.xxx_hidden_PhoneNumber = b.PhoneNumber\n\t}\n\tx.xxx_hidden_Addresses = &b.Addresses\n\tx.xxx_hidden_CreatedAt = b.CreatedAt\n\tx.xxx_hidden_LastLogin = b.LastLogin\n\tif b.Status != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 8, 12)\n\t\tx.xxx_hidden_Status = *b.Status\n\t}\n\tx.xxx_hidden_LoyaltyInfo = b.LoyaltyInfo\n\tx.xxx_hidden_Preferences = b.Preferences\n\tx.xxx_hidden_PaymentMethods = &b.PaymentMethods\n\treturn m0\n}\n\n// OpaqueOrderItem represents an item in an order\ntype OpaqueOrderItem struct {\n\tstate                         protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_ProductId          *string                `protobuf:\"bytes,1,opt,name=product_id,json=productId\"`\n\txxx_hidden_VariantId          *string                `protobuf:\"bytes,2,opt,name=variant_id,json=variantId\"`\n\txxx_hidden_ProductName        *string                `protobuf:\"bytes,3,opt,name=product_name,json=productName\"`\n\txxx_hidden_Quantity           int32                  `protobuf:\"varint,4,opt,name=quantity\"`\n\txxx_hidden_UnitPrice          *OpaquePrice           `protobuf:\"bytes,5,opt,name=unit_price,json=unitPrice\"`\n\txxx_hidden_TotalPrice         *OpaquePrice           `protobuf:\"bytes,6,opt,name=total_price,json=totalPrice\"`\n\txxx_hidden_SelectedAttributes map[string]string      `protobuf:\"bytes,7,rep,name=selected_attributes,json=selectedAttributes\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_GiftWrapped        *wrapperspb.BoolValue  `protobuf:\"bytes,8,opt,name=gift_wrapped,json=giftWrapped\"`\n\txxx_hidden_GiftMessage        *string                `protobuf:\"bytes,9,opt,name=gift_message,json=giftMessage\"`\n\tXXX_raceDetectHookData        protoimpl.RaceDetectHookData\n\tXXX_presence                  [1]uint32\n\tunknownFields                 protoimpl.UnknownFields\n\tsizeCache                     protoimpl.SizeCache\n}\n\nfunc (x *OpaqueOrderItem) Reset() {\n\t*x = OpaqueOrderItem{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[24]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueOrderItem) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueOrderItem) ProtoMessage() {}\n\nfunc (x *OpaqueOrderItem) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[24]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueOrderItem) GetProductId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ProductId != nil {\n\t\t\treturn *x.xxx_hidden_ProductId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrderItem) GetVariantId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_VariantId != nil {\n\t\t\treturn *x.xxx_hidden_VariantId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrderItem) GetProductName() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ProductName != nil {\n\t\t\treturn *x.xxx_hidden_ProductName\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrderItem) GetQuantity() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Quantity\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueOrderItem) GetUnitPrice() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_UnitPrice\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderItem) GetTotalPrice() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_TotalPrice\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderItem) GetSelectedAttributes() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_SelectedAttributes\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderItem) GetGiftWrapped() *wrapperspb.BoolValue {\n\tif x != nil {\n\t\treturn x.xxx_hidden_GiftWrapped\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderItem) GetGiftMessage() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_GiftMessage != nil {\n\t\t\treturn *x.xxx_hidden_GiftMessage\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrderItem) SetProductId(v string) {\n\tx.xxx_hidden_ProductId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 9)\n}\n\nfunc (x *OpaqueOrderItem) SetVariantId(v string) {\n\tx.xxx_hidden_VariantId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 9)\n}\n\nfunc (x *OpaqueOrderItem) SetProductName(v string) {\n\tx.xxx_hidden_ProductName = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 9)\n}\n\nfunc (x *OpaqueOrderItem) SetQuantity(v int32) {\n\tx.xxx_hidden_Quantity = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 9)\n}\n\nfunc (x *OpaqueOrderItem) SetUnitPrice(v *OpaquePrice) {\n\tx.xxx_hidden_UnitPrice = v\n}\n\nfunc (x *OpaqueOrderItem) SetTotalPrice(v *OpaquePrice) {\n\tx.xxx_hidden_TotalPrice = v\n}\n\nfunc (x *OpaqueOrderItem) SetSelectedAttributes(v map[string]string) {\n\tx.xxx_hidden_SelectedAttributes = v\n}\n\nfunc (x *OpaqueOrderItem) SetGiftWrapped(v *wrapperspb.BoolValue) {\n\tx.xxx_hidden_GiftWrapped = v\n}\n\nfunc (x *OpaqueOrderItem) SetGiftMessage(v string) {\n\tx.xxx_hidden_GiftMessage = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 8, 9)\n}\n\nfunc (x *OpaqueOrderItem) HasProductId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueOrderItem) HasVariantId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueOrderItem) HasProductName() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueOrderItem) HasQuantity() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 3)\n}\n\nfunc (x *OpaqueOrderItem) HasUnitPrice() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_UnitPrice != nil\n}\n\nfunc (x *OpaqueOrderItem) HasTotalPrice() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_TotalPrice != nil\n}\n\nfunc (x *OpaqueOrderItem) HasGiftWrapped() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_GiftWrapped != nil\n}\n\nfunc (x *OpaqueOrderItem) HasGiftMessage() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 8)\n}\n\nfunc (x *OpaqueOrderItem) ClearProductId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_ProductId = nil\n}\n\nfunc (x *OpaqueOrderItem) ClearVariantId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_VariantId = nil\n}\n\nfunc (x *OpaqueOrderItem) ClearProductName() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_ProductName = nil\n}\n\nfunc (x *OpaqueOrderItem) ClearQuantity() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)\n\tx.xxx_hidden_Quantity = 0\n}\n\nfunc (x *OpaqueOrderItem) ClearUnitPrice() {\n\tx.xxx_hidden_UnitPrice = nil\n}\n\nfunc (x *OpaqueOrderItem) ClearTotalPrice() {\n\tx.xxx_hidden_TotalPrice = nil\n}\n\nfunc (x *OpaqueOrderItem) ClearGiftWrapped() {\n\tx.xxx_hidden_GiftWrapped = nil\n}\n\nfunc (x *OpaqueOrderItem) ClearGiftMessage() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 8)\n\tx.xxx_hidden_GiftMessage = nil\n}\n\ntype OpaqueOrderItem_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tProductId          *string\n\tVariantId          *string\n\tProductName        *string\n\tQuantity           *int32\n\tUnitPrice          *OpaquePrice\n\tTotalPrice         *OpaquePrice\n\tSelectedAttributes map[string]string\n\tGiftWrapped        *wrapperspb.BoolValue\n\tGiftMessage        *string\n}\n\nfunc (b0 OpaqueOrderItem_builder) Build() *OpaqueOrderItem {\n\tm0 := &OpaqueOrderItem{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.ProductId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 9)\n\t\tx.xxx_hidden_ProductId = b.ProductId\n\t}\n\tif b.VariantId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 9)\n\t\tx.xxx_hidden_VariantId = b.VariantId\n\t}\n\tif b.ProductName != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 9)\n\t\tx.xxx_hidden_ProductName = b.ProductName\n\t}\n\tif b.Quantity != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 9)\n\t\tx.xxx_hidden_Quantity = *b.Quantity\n\t}\n\tx.xxx_hidden_UnitPrice = b.UnitPrice\n\tx.xxx_hidden_TotalPrice = b.TotalPrice\n\tx.xxx_hidden_SelectedAttributes = b.SelectedAttributes\n\tx.xxx_hidden_GiftWrapped = b.GiftWrapped\n\tif b.GiftMessage != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 8, 9)\n\t\tx.xxx_hidden_GiftMessage = b.GiftMessage\n\t}\n\treturn m0\n}\n\n// OpaqueOrder represents a customer order\ntype OpaqueOrder struct {\n\tstate                      protoimpl.MessageState          `protogen:\"opaque.v1\"`\n\txxx_hidden_OrderId         *string                         `protobuf:\"bytes,1,opt,name=order_id,json=orderId\"`\n\txxx_hidden_CustomerId      *string                         `protobuf:\"bytes,2,opt,name=customer_id,json=customerId\"`\n\txxx_hidden_Items           *[]*OpaqueOrderItem             `protobuf:\"bytes,3,rep,name=items\"`\n\txxx_hidden_Subtotal        *OpaquePrice                    `protobuf:\"bytes,4,opt,name=subtotal\"`\n\txxx_hidden_Tax             *OpaquePrice                    `protobuf:\"bytes,5,opt,name=tax\"`\n\txxx_hidden_Shipping        *OpaquePrice                    `protobuf:\"bytes,6,opt,name=shipping\"`\n\txxx_hidden_Total           *OpaquePrice                    `protobuf:\"bytes,7,opt,name=total\"`\n\txxx_hidden_ShippingAddress *OpaqueAddress                  `protobuf:\"bytes,8,opt,name=shipping_address,json=shippingAddress\"`\n\txxx_hidden_BillingAddress  *OpaqueAddress                  `protobuf:\"bytes,9,opt,name=billing_address,json=billingAddress\"`\n\txxx_hidden_Status          OpaqueOrder_OpaqueOrderStatus   `protobuf:\"varint,10,opt,name=status,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder_OpaqueOrderStatus\"`\n\txxx_hidden_PaymentMethodId *string                         `protobuf:\"bytes,11,opt,name=payment_method_id,json=paymentMethodId\"`\n\txxx_hidden_TrackingNumber  *string                         `protobuf:\"bytes,12,opt,name=tracking_number,json=trackingNumber\"`\n\txxx_hidden_CreatedAt       *timestamppb.Timestamp          `protobuf:\"bytes,13,opt,name=created_at,json=createdAt\"`\n\txxx_hidden_UpdatedAt       *timestamppb.Timestamp          `protobuf:\"bytes,14,opt,name=updated_at,json=updatedAt\"`\n\txxx_hidden_ShippedAt       *timestamppb.Timestamp          `protobuf:\"bytes,15,opt,name=shipped_at,json=shippedAt\"`\n\txxx_hidden_DeliveredAt     *timestamppb.Timestamp          `protobuf:\"bytes,16,opt,name=delivered_at,json=deliveredAt\"`\n\txxx_hidden_ShippingInfo    *OpaqueOrder_OpaqueShippingInfo `protobuf:\"bytes,17,opt,name=shipping_info,json=shippingInfo\"`\n\txxx_hidden_Metadata        map[string]string               `protobuf:\"bytes,18,rep,name=metadata\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_DiscountApplied isOpaqueOrder_DiscountApplied   `protobuf_oneof:\"discount_applied\"`\n\tXXX_raceDetectHookData     protoimpl.RaceDetectHookData\n\tXXX_presence               [1]uint32\n\tunknownFields              protoimpl.UnknownFields\n\tsizeCache                  protoimpl.SizeCache\n}\n\nfunc (x *OpaqueOrder) Reset() {\n\t*x = OpaqueOrder{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[25]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueOrder) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueOrder) ProtoMessage() {}\n\nfunc (x *OpaqueOrder) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[25]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueOrder) GetOrderId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_OrderId != nil {\n\t\t\treturn *x.xxx_hidden_OrderId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder) GetCustomerId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CustomerId != nil {\n\t\t\treturn *x.xxx_hidden_CustomerId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder) GetItems() []*OpaqueOrderItem {\n\tif x != nil {\n\t\tif x.xxx_hidden_Items != nil {\n\t\t\treturn *x.xxx_hidden_Items\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetSubtotal() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Subtotal\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetTax() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Tax\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetShipping() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Shipping\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetTotal() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Total\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetShippingAddress() *OpaqueAddress {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ShippingAddress\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetBillingAddress() *OpaqueAddress {\n\tif x != nil {\n\t\treturn x.xxx_hidden_BillingAddress\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetStatus() OpaqueOrder_OpaqueOrderStatus {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 9) {\n\t\t\treturn x.xxx_hidden_Status\n\t\t}\n\t}\n\treturn OpaqueOrder_OPAQUE_ORDER_STATUS_UNSPECIFIED\n}\n\nfunc (x *OpaqueOrder) GetPaymentMethodId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_PaymentMethodId != nil {\n\t\t\treturn *x.xxx_hidden_PaymentMethodId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder) GetTrackingNumber() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_TrackingNumber != nil {\n\t\t\treturn *x.xxx_hidden_TrackingNumber\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder) GetCreatedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_CreatedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetUpdatedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_UpdatedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetShippedAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ShippedAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetDeliveredAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_DeliveredAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetShippingInfo() *OpaqueOrder_OpaqueShippingInfo {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ShippingInfo\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetMetadata() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Metadata\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder) GetCouponCode() string {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_DiscountApplied.(*opaqueOrder_CouponCode); ok {\n\t\t\treturn x.CouponCode\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder) GetPromotionId() string {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_DiscountApplied.(*opaqueOrder_PromotionId); ok {\n\t\t\treturn x.PromotionId\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder) SetOrderId(v string) {\n\tx.xxx_hidden_OrderId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 19)\n}\n\nfunc (x *OpaqueOrder) SetCustomerId(v string) {\n\tx.xxx_hidden_CustomerId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 19)\n}\n\nfunc (x *OpaqueOrder) SetItems(v []*OpaqueOrderItem) {\n\tx.xxx_hidden_Items = &v\n}\n\nfunc (x *OpaqueOrder) SetSubtotal(v *OpaquePrice) {\n\tx.xxx_hidden_Subtotal = v\n}\n\nfunc (x *OpaqueOrder) SetTax(v *OpaquePrice) {\n\tx.xxx_hidden_Tax = v\n}\n\nfunc (x *OpaqueOrder) SetShipping(v *OpaquePrice) {\n\tx.xxx_hidden_Shipping = v\n}\n\nfunc (x *OpaqueOrder) SetTotal(v *OpaquePrice) {\n\tx.xxx_hidden_Total = v\n}\n\nfunc (x *OpaqueOrder) SetShippingAddress(v *OpaqueAddress) {\n\tx.xxx_hidden_ShippingAddress = v\n}\n\nfunc (x *OpaqueOrder) SetBillingAddress(v *OpaqueAddress) {\n\tx.xxx_hidden_BillingAddress = v\n}\n\nfunc (x *OpaqueOrder) SetStatus(v OpaqueOrder_OpaqueOrderStatus) {\n\tx.xxx_hidden_Status = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 9, 19)\n}\n\nfunc (x *OpaqueOrder) SetPaymentMethodId(v string) {\n\tx.xxx_hidden_PaymentMethodId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 10, 19)\n}\n\nfunc (x *OpaqueOrder) SetTrackingNumber(v string) {\n\tx.xxx_hidden_TrackingNumber = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 11, 19)\n}\n\nfunc (x *OpaqueOrder) SetCreatedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_CreatedAt = v\n}\n\nfunc (x *OpaqueOrder) SetUpdatedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_UpdatedAt = v\n}\n\nfunc (x *OpaqueOrder) SetShippedAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_ShippedAt = v\n}\n\nfunc (x *OpaqueOrder) SetDeliveredAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_DeliveredAt = v\n}\n\nfunc (x *OpaqueOrder) SetShippingInfo(v *OpaqueOrder_OpaqueShippingInfo) {\n\tx.xxx_hidden_ShippingInfo = v\n}\n\nfunc (x *OpaqueOrder) SetMetadata(v map[string]string) {\n\tx.xxx_hidden_Metadata = v\n}\n\nfunc (x *OpaqueOrder) SetCouponCode(v string) {\n\tx.xxx_hidden_DiscountApplied = &opaqueOrder_CouponCode{v}\n}\n\nfunc (x *OpaqueOrder) SetPromotionId(v string) {\n\tx.xxx_hidden_DiscountApplied = &opaqueOrder_PromotionId{v}\n}\n\nfunc (x *OpaqueOrder) HasOrderId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueOrder) HasCustomerId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueOrder) HasSubtotal() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Subtotal != nil\n}\n\nfunc (x *OpaqueOrder) HasTax() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Tax != nil\n}\n\nfunc (x *OpaqueOrder) HasShipping() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Shipping != nil\n}\n\nfunc (x *OpaqueOrder) HasTotal() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Total != nil\n}\n\nfunc (x *OpaqueOrder) HasShippingAddress() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ShippingAddress != nil\n}\n\nfunc (x *OpaqueOrder) HasBillingAddress() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_BillingAddress != nil\n}\n\nfunc (x *OpaqueOrder) HasStatus() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 9)\n}\n\nfunc (x *OpaqueOrder) HasPaymentMethodId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 10)\n}\n\nfunc (x *OpaqueOrder) HasTrackingNumber() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 11)\n}\n\nfunc (x *OpaqueOrder) HasCreatedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_CreatedAt != nil\n}\n\nfunc (x *OpaqueOrder) HasUpdatedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_UpdatedAt != nil\n}\n\nfunc (x *OpaqueOrder) HasShippedAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ShippedAt != nil\n}\n\nfunc (x *OpaqueOrder) HasDeliveredAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_DeliveredAt != nil\n}\n\nfunc (x *OpaqueOrder) HasShippingInfo() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ShippingInfo != nil\n}\n\nfunc (x *OpaqueOrder) HasDiscountApplied() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_DiscountApplied != nil\n}\n\nfunc (x *OpaqueOrder) HasCouponCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_DiscountApplied.(*opaqueOrder_CouponCode)\n\treturn ok\n}\n\nfunc (x *OpaqueOrder) HasPromotionId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_DiscountApplied.(*opaqueOrder_PromotionId)\n\treturn ok\n}\n\nfunc (x *OpaqueOrder) ClearOrderId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_OrderId = nil\n}\n\nfunc (x *OpaqueOrder) ClearCustomerId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_CustomerId = nil\n}\n\nfunc (x *OpaqueOrder) ClearSubtotal() {\n\tx.xxx_hidden_Subtotal = nil\n}\n\nfunc (x *OpaqueOrder) ClearTax() {\n\tx.xxx_hidden_Tax = nil\n}\n\nfunc (x *OpaqueOrder) ClearShipping() {\n\tx.xxx_hidden_Shipping = nil\n}\n\nfunc (x *OpaqueOrder) ClearTotal() {\n\tx.xxx_hidden_Total = nil\n}\n\nfunc (x *OpaqueOrder) ClearShippingAddress() {\n\tx.xxx_hidden_ShippingAddress = nil\n}\n\nfunc (x *OpaqueOrder) ClearBillingAddress() {\n\tx.xxx_hidden_BillingAddress = nil\n}\n\nfunc (x *OpaqueOrder) ClearStatus() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 9)\n\tx.xxx_hidden_Status = OpaqueOrder_OPAQUE_ORDER_STATUS_UNSPECIFIED\n}\n\nfunc (x *OpaqueOrder) ClearPaymentMethodId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 10)\n\tx.xxx_hidden_PaymentMethodId = nil\n}\n\nfunc (x *OpaqueOrder) ClearTrackingNumber() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 11)\n\tx.xxx_hidden_TrackingNumber = nil\n}\n\nfunc (x *OpaqueOrder) ClearCreatedAt() {\n\tx.xxx_hidden_CreatedAt = nil\n}\n\nfunc (x *OpaqueOrder) ClearUpdatedAt() {\n\tx.xxx_hidden_UpdatedAt = nil\n}\n\nfunc (x *OpaqueOrder) ClearShippedAt() {\n\tx.xxx_hidden_ShippedAt = nil\n}\n\nfunc (x *OpaqueOrder) ClearDeliveredAt() {\n\tx.xxx_hidden_DeliveredAt = nil\n}\n\nfunc (x *OpaqueOrder) ClearShippingInfo() {\n\tx.xxx_hidden_ShippingInfo = nil\n}\n\nfunc (x *OpaqueOrder) ClearDiscountApplied() {\n\tx.xxx_hidden_DiscountApplied = nil\n}\n\nfunc (x *OpaqueOrder) ClearCouponCode() {\n\tif _, ok := x.xxx_hidden_DiscountApplied.(*opaqueOrder_CouponCode); ok {\n\t\tx.xxx_hidden_DiscountApplied = nil\n\t}\n}\n\nfunc (x *OpaqueOrder) ClearPromotionId() {\n\tif _, ok := x.xxx_hidden_DiscountApplied.(*opaqueOrder_PromotionId); ok {\n\t\tx.xxx_hidden_DiscountApplied = nil\n\t}\n}\n\nconst OpaqueOrder_DiscountApplied_not_set_case case_OpaqueOrder_DiscountApplied = 0\nconst OpaqueOrder_CouponCode_case case_OpaqueOrder_DiscountApplied = 19\nconst OpaqueOrder_PromotionId_case case_OpaqueOrder_DiscountApplied = 20\n\nfunc (x *OpaqueOrder) WhichDiscountApplied() case_OpaqueOrder_DiscountApplied {\n\tif x == nil {\n\t\treturn OpaqueOrder_DiscountApplied_not_set_case\n\t}\n\tswitch x.xxx_hidden_DiscountApplied.(type) {\n\tcase *opaqueOrder_CouponCode:\n\t\treturn OpaqueOrder_CouponCode_case\n\tcase *opaqueOrder_PromotionId:\n\t\treturn OpaqueOrder_PromotionId_case\n\tdefault:\n\t\treturn OpaqueOrder_DiscountApplied_not_set_case\n\t}\n}\n\ntype OpaqueOrder_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tOrderId         *string\n\tCustomerId      *string\n\tItems           []*OpaqueOrderItem\n\tSubtotal        *OpaquePrice\n\tTax             *OpaquePrice\n\tShipping        *OpaquePrice\n\tTotal           *OpaquePrice\n\tShippingAddress *OpaqueAddress\n\tBillingAddress  *OpaqueAddress\n\tStatus          *OpaqueOrder_OpaqueOrderStatus\n\tPaymentMethodId *string\n\tTrackingNumber  *string\n\tCreatedAt       *timestamppb.Timestamp\n\tUpdatedAt       *timestamppb.Timestamp\n\tShippedAt       *timestamppb.Timestamp\n\tDeliveredAt     *timestamppb.Timestamp\n\tShippingInfo    *OpaqueOrder_OpaqueShippingInfo\n\tMetadata        map[string]string\n\t// Fields of oneof xxx_hidden_DiscountApplied:\n\tCouponCode  *string\n\tPromotionId *string\n\t// -- end of xxx_hidden_DiscountApplied\n}\n\nfunc (b0 OpaqueOrder_builder) Build() *OpaqueOrder {\n\tm0 := &OpaqueOrder{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.OrderId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 19)\n\t\tx.xxx_hidden_OrderId = b.OrderId\n\t}\n\tif b.CustomerId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 19)\n\t\tx.xxx_hidden_CustomerId = b.CustomerId\n\t}\n\tx.xxx_hidden_Items = &b.Items\n\tx.xxx_hidden_Subtotal = b.Subtotal\n\tx.xxx_hidden_Tax = b.Tax\n\tx.xxx_hidden_Shipping = b.Shipping\n\tx.xxx_hidden_Total = b.Total\n\tx.xxx_hidden_ShippingAddress = b.ShippingAddress\n\tx.xxx_hidden_BillingAddress = b.BillingAddress\n\tif b.Status != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 9, 19)\n\t\tx.xxx_hidden_Status = *b.Status\n\t}\n\tif b.PaymentMethodId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 10, 19)\n\t\tx.xxx_hidden_PaymentMethodId = b.PaymentMethodId\n\t}\n\tif b.TrackingNumber != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 11, 19)\n\t\tx.xxx_hidden_TrackingNumber = b.TrackingNumber\n\t}\n\tx.xxx_hidden_CreatedAt = b.CreatedAt\n\tx.xxx_hidden_UpdatedAt = b.UpdatedAt\n\tx.xxx_hidden_ShippedAt = b.ShippedAt\n\tx.xxx_hidden_DeliveredAt = b.DeliveredAt\n\tx.xxx_hidden_ShippingInfo = b.ShippingInfo\n\tx.xxx_hidden_Metadata = b.Metadata\n\tif b.CouponCode != nil {\n\t\tx.xxx_hidden_DiscountApplied = &opaqueOrder_CouponCode{*b.CouponCode}\n\t}\n\tif b.PromotionId != nil {\n\t\tx.xxx_hidden_DiscountApplied = &opaqueOrder_PromotionId{*b.PromotionId}\n\t}\n\treturn m0\n}\n\ntype case_OpaqueOrder_DiscountApplied protoreflect.FieldNumber\n\nfunc (x case_OpaqueOrder_DiscountApplied) String() string {\n\tmd := file_examples_internal_proto_examplepb_opaque_proto_msgTypes[25].Descriptor()\n\tif x == 0 {\n\t\treturn \"not set\"\n\t}\n\treturn protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))\n}\n\ntype isOpaqueOrder_DiscountApplied interface {\n\tisOpaqueOrder_DiscountApplied()\n}\n\ntype opaqueOrder_CouponCode struct {\n\tCouponCode string `protobuf:\"bytes,19,opt,name=coupon_code,json=couponCode,oneof\"`\n}\n\ntype opaqueOrder_PromotionId struct {\n\tPromotionId string `protobuf:\"bytes,20,opt,name=promotion_id,json=promotionId,oneof\"`\n}\n\nfunc (*opaqueOrder_CouponCode) isOpaqueOrder_DiscountApplied() {}\n\nfunc (*opaqueOrder_PromotionId) isOpaqueOrder_DiscountApplied() {}\n\n// OpaqueOrderSummary represents a summary of processed orders\ntype OpaqueOrderSummary struct {\n\tstate                           protoimpl.MessageState                  `protogen:\"opaque.v1\"`\n\txxx_hidden_TotalOrdersProcessed int32                                   `protobuf:\"varint,1,opt,name=total_orders_processed,json=totalOrdersProcessed\"`\n\txxx_hidden_SuccessfulOrders     int32                                   `protobuf:\"varint,2,opt,name=successful_orders,json=successfulOrders\"`\n\txxx_hidden_FailedOrders         int32                                   `protobuf:\"varint,3,opt,name=failed_orders,json=failedOrders\"`\n\txxx_hidden_TotalValue           *OpaquePrice                            `protobuf:\"bytes,4,opt,name=total_value,json=totalValue\"`\n\txxx_hidden_OrderIds             []string                                `protobuf:\"bytes,5,rep,name=order_ids,json=orderIds\"`\n\txxx_hidden_ErrorDetails         map[string]string                       `protobuf:\"bytes,6,rep,name=error_details,json=errorDetails\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_ProcessingTime       *timestamppb.Timestamp                  `protobuf:\"bytes,7,opt,name=processing_time,json=processingTime\"`\n\txxx_hidden_Errors               *[]*OpaqueOrderSummary_OpaqueOrderError `protobuf:\"bytes,8,rep,name=errors\"`\n\tXXX_raceDetectHookData          protoimpl.RaceDetectHookData\n\tXXX_presence                    [1]uint32\n\tunknownFields                   protoimpl.UnknownFields\n\tsizeCache                       protoimpl.SizeCache\n}\n\nfunc (x *OpaqueOrderSummary) Reset() {\n\t*x = OpaqueOrderSummary{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[26]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueOrderSummary) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueOrderSummary) ProtoMessage() {}\n\nfunc (x *OpaqueOrderSummary) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[26]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueOrderSummary) GetTotalOrdersProcessed() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_TotalOrdersProcessed\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueOrderSummary) GetSuccessfulOrders() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_SuccessfulOrders\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueOrderSummary) GetFailedOrders() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_FailedOrders\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueOrderSummary) GetTotalValue() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_TotalValue\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderSummary) GetOrderIds() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_OrderIds\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderSummary) GetErrorDetails() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ErrorDetails\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderSummary) GetProcessingTime() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ProcessingTime\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderSummary) GetErrors() []*OpaqueOrderSummary_OpaqueOrderError {\n\tif x != nil {\n\t\tif x.xxx_hidden_Errors != nil {\n\t\t\treturn *x.xxx_hidden_Errors\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrderSummary) SetTotalOrdersProcessed(v int32) {\n\tx.xxx_hidden_TotalOrdersProcessed = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 8)\n}\n\nfunc (x *OpaqueOrderSummary) SetSuccessfulOrders(v int32) {\n\tx.xxx_hidden_SuccessfulOrders = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 8)\n}\n\nfunc (x *OpaqueOrderSummary) SetFailedOrders(v int32) {\n\tx.xxx_hidden_FailedOrders = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 8)\n}\n\nfunc (x *OpaqueOrderSummary) SetTotalValue(v *OpaquePrice) {\n\tx.xxx_hidden_TotalValue = v\n}\n\nfunc (x *OpaqueOrderSummary) SetOrderIds(v []string) {\n\tx.xxx_hidden_OrderIds = v\n}\n\nfunc (x *OpaqueOrderSummary) SetErrorDetails(v map[string]string) {\n\tx.xxx_hidden_ErrorDetails = v\n}\n\nfunc (x *OpaqueOrderSummary) SetProcessingTime(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_ProcessingTime = v\n}\n\nfunc (x *OpaqueOrderSummary) SetErrors(v []*OpaqueOrderSummary_OpaqueOrderError) {\n\tx.xxx_hidden_Errors = &v\n}\n\nfunc (x *OpaqueOrderSummary) HasTotalOrdersProcessed() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueOrderSummary) HasSuccessfulOrders() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueOrderSummary) HasFailedOrders() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueOrderSummary) HasTotalValue() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_TotalValue != nil\n}\n\nfunc (x *OpaqueOrderSummary) HasProcessingTime() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ProcessingTime != nil\n}\n\nfunc (x *OpaqueOrderSummary) ClearTotalOrdersProcessed() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_TotalOrdersProcessed = 0\n}\n\nfunc (x *OpaqueOrderSummary) ClearSuccessfulOrders() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_SuccessfulOrders = 0\n}\n\nfunc (x *OpaqueOrderSummary) ClearFailedOrders() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_FailedOrders = 0\n}\n\nfunc (x *OpaqueOrderSummary) ClearTotalValue() {\n\tx.xxx_hidden_TotalValue = nil\n}\n\nfunc (x *OpaqueOrderSummary) ClearProcessingTime() {\n\tx.xxx_hidden_ProcessingTime = nil\n}\n\ntype OpaqueOrderSummary_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tTotalOrdersProcessed *int32\n\tSuccessfulOrders     *int32\n\tFailedOrders         *int32\n\tTotalValue           *OpaquePrice\n\tOrderIds             []string\n\tErrorDetails         map[string]string\n\tProcessingTime       *timestamppb.Timestamp\n\tErrors               []*OpaqueOrderSummary_OpaqueOrderError\n}\n\nfunc (b0 OpaqueOrderSummary_builder) Build() *OpaqueOrderSummary {\n\tm0 := &OpaqueOrderSummary{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.TotalOrdersProcessed != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 8)\n\t\tx.xxx_hidden_TotalOrdersProcessed = *b.TotalOrdersProcessed\n\t}\n\tif b.SuccessfulOrders != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 8)\n\t\tx.xxx_hidden_SuccessfulOrders = *b.SuccessfulOrders\n\t}\n\tif b.FailedOrders != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 8)\n\t\tx.xxx_hidden_FailedOrders = *b.FailedOrders\n\t}\n\tx.xxx_hidden_TotalValue = b.TotalValue\n\tx.xxx_hidden_OrderIds = b.OrderIds\n\tx.xxx_hidden_ErrorDetails = b.ErrorDetails\n\tx.xxx_hidden_ProcessingTime = b.ProcessingTime\n\tx.xxx_hidden_Errors = &b.Errors\n\treturn m0\n}\n\n// OpaqueCustomerEvent represents a customer activity event\ntype OpaqueCustomerEvent struct {\n\tstate                  protoimpl.MessageState              `protogen:\"opaque.v1\"`\n\txxx_hidden_CustomerId  *string                             `protobuf:\"bytes,1,opt,name=customer_id,json=customerId\"`\n\txxx_hidden_SessionId   *string                             `protobuf:\"bytes,2,opt,name=session_id,json=sessionId\"`\n\txxx_hidden_EventType   OpaqueCustomerEvent_OpaqueEventType `protobuf:\"varint,3,opt,name=event_type,json=eventType,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent_OpaqueEventType\"`\n\txxx_hidden_Timestamp   *timestamppb.Timestamp              `protobuf:\"bytes,4,opt,name=timestamp\"`\n\txxx_hidden_ProductId   *string                             `protobuf:\"bytes,5,opt,name=product_id,json=productId\"`\n\txxx_hidden_CategoryId  *string                             `protobuf:\"bytes,6,opt,name=category_id,json=categoryId\"`\n\txxx_hidden_SearchQuery *string                             `protobuf:\"bytes,7,opt,name=search_query,json=searchQuery\"`\n\txxx_hidden_PageUrl     *string                             `protobuf:\"bytes,8,opt,name=page_url,json=pageUrl\"`\n\txxx_hidden_Value       int32                               `protobuf:\"varint,9,opt,name=value\"`\n\txxx_hidden_EventData   map[string]string                   `protobuf:\"bytes,10,rep,name=event_data,json=eventData\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_DeviceType  *string                             `protobuf:\"bytes,11,opt,name=device_type,json=deviceType\"`\n\txxx_hidden_IpAddress   *string                             `protobuf:\"bytes,12,opt,name=ip_address,json=ipAddress\"`\n\txxx_hidden_UserAgent   *string                             `protobuf:\"bytes,13,opt,name=user_agent,json=userAgent\"`\n\tXXX_raceDetectHookData protoimpl.RaceDetectHookData\n\tXXX_presence           [1]uint32\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCustomerEvent) Reset() {\n\t*x = OpaqueCustomerEvent{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[27]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCustomerEvent) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCustomerEvent) ProtoMessage() {}\n\nfunc (x *OpaqueCustomerEvent) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[27]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCustomerEvent) GetCustomerId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CustomerId != nil {\n\t\t\treturn *x.xxx_hidden_CustomerId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetSessionId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_SessionId != nil {\n\t\t\treturn *x.xxx_hidden_SessionId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetEventType() OpaqueCustomerEvent_OpaqueEventType {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 2) {\n\t\t\treturn x.xxx_hidden_EventType\n\t\t}\n\t}\n\treturn OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_UNSPECIFIED\n}\n\nfunc (x *OpaqueCustomerEvent) GetTimestamp() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Timestamp\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomerEvent) GetProductId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ProductId != nil {\n\t\t\treturn *x.xxx_hidden_ProductId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetCategoryId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CategoryId != nil {\n\t\t\treturn *x.xxx_hidden_CategoryId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetSearchQuery() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_SearchQuery != nil {\n\t\t\treturn *x.xxx_hidden_SearchQuery\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetPageUrl() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_PageUrl != nil {\n\t\t\treturn *x.xxx_hidden_PageUrl\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetValue() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Value\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueCustomerEvent) GetEventData() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_EventData\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomerEvent) GetDeviceType() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_DeviceType != nil {\n\t\t\treturn *x.xxx_hidden_DeviceType\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetIpAddress() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_IpAddress != nil {\n\t\t\treturn *x.xxx_hidden_IpAddress\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) GetUserAgent() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_UserAgent != nil {\n\t\t\treturn *x.xxx_hidden_UserAgent\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomerEvent) SetCustomerId(v string) {\n\tx.xxx_hidden_CustomerId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetSessionId(v string) {\n\tx.xxx_hidden_SessionId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetEventType(v OpaqueCustomerEvent_OpaqueEventType) {\n\tx.xxx_hidden_EventType = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetTimestamp(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_Timestamp = v\n}\n\nfunc (x *OpaqueCustomerEvent) SetProductId(v string) {\n\tx.xxx_hidden_ProductId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetCategoryId(v string) {\n\tx.xxx_hidden_CategoryId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 5, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetSearchQuery(v string) {\n\tx.xxx_hidden_SearchQuery = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 6, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetPageUrl(v string) {\n\tx.xxx_hidden_PageUrl = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 7, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetValue(v int32) {\n\tx.xxx_hidden_Value = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 8, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetEventData(v map[string]string) {\n\tx.xxx_hidden_EventData = v\n}\n\nfunc (x *OpaqueCustomerEvent) SetDeviceType(v string) {\n\tx.xxx_hidden_DeviceType = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 10, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetIpAddress(v string) {\n\tx.xxx_hidden_IpAddress = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 11, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) SetUserAgent(v string) {\n\tx.xxx_hidden_UserAgent = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 12, 13)\n}\n\nfunc (x *OpaqueCustomerEvent) HasCustomerId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueCustomerEvent) HasSessionId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueCustomerEvent) HasEventType() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueCustomerEvent) HasTimestamp() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Timestamp != nil\n}\n\nfunc (x *OpaqueCustomerEvent) HasProductId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 4)\n}\n\nfunc (x *OpaqueCustomerEvent) HasCategoryId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 5)\n}\n\nfunc (x *OpaqueCustomerEvent) HasSearchQuery() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 6)\n}\n\nfunc (x *OpaqueCustomerEvent) HasPageUrl() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 7)\n}\n\nfunc (x *OpaqueCustomerEvent) HasValue() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 8)\n}\n\nfunc (x *OpaqueCustomerEvent) HasDeviceType() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 10)\n}\n\nfunc (x *OpaqueCustomerEvent) HasIpAddress() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 11)\n}\n\nfunc (x *OpaqueCustomerEvent) HasUserAgent() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 12)\n}\n\nfunc (x *OpaqueCustomerEvent) ClearCustomerId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_CustomerId = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearSessionId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_SessionId = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearEventType() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_EventType = OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_UNSPECIFIED\n}\n\nfunc (x *OpaqueCustomerEvent) ClearTimestamp() {\n\tx.xxx_hidden_Timestamp = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearProductId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)\n\tx.xxx_hidden_ProductId = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearCategoryId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 5)\n\tx.xxx_hidden_CategoryId = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearSearchQuery() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 6)\n\tx.xxx_hidden_SearchQuery = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearPageUrl() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 7)\n\tx.xxx_hidden_PageUrl = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearValue() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 8)\n\tx.xxx_hidden_Value = 0\n}\n\nfunc (x *OpaqueCustomerEvent) ClearDeviceType() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 10)\n\tx.xxx_hidden_DeviceType = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearIpAddress() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 11)\n\tx.xxx_hidden_IpAddress = nil\n}\n\nfunc (x *OpaqueCustomerEvent) ClearUserAgent() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 12)\n\tx.xxx_hidden_UserAgent = nil\n}\n\ntype OpaqueCustomerEvent_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tCustomerId  *string\n\tSessionId   *string\n\tEventType   *OpaqueCustomerEvent_OpaqueEventType\n\tTimestamp   *timestamppb.Timestamp\n\tProductId   *string\n\tCategoryId  *string\n\tSearchQuery *string\n\tPageUrl     *string\n\tValue       *int32\n\tEventData   map[string]string\n\tDeviceType  *string\n\tIpAddress   *string\n\tUserAgent   *string\n}\n\nfunc (b0 OpaqueCustomerEvent_builder) Build() *OpaqueCustomerEvent {\n\tm0 := &OpaqueCustomerEvent{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.CustomerId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 13)\n\t\tx.xxx_hidden_CustomerId = b.CustomerId\n\t}\n\tif b.SessionId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 13)\n\t\tx.xxx_hidden_SessionId = b.SessionId\n\t}\n\tif b.EventType != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 13)\n\t\tx.xxx_hidden_EventType = *b.EventType\n\t}\n\tx.xxx_hidden_Timestamp = b.Timestamp\n\tif b.ProductId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 13)\n\t\tx.xxx_hidden_ProductId = b.ProductId\n\t}\n\tif b.CategoryId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 5, 13)\n\t\tx.xxx_hidden_CategoryId = b.CategoryId\n\t}\n\tif b.SearchQuery != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 6, 13)\n\t\tx.xxx_hidden_SearchQuery = b.SearchQuery\n\t}\n\tif b.PageUrl != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 7, 13)\n\t\tx.xxx_hidden_PageUrl = b.PageUrl\n\t}\n\tif b.Value != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 8, 13)\n\t\tx.xxx_hidden_Value = *b.Value\n\t}\n\tx.xxx_hidden_EventData = b.EventData\n\tif b.DeviceType != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 10, 13)\n\t\tx.xxx_hidden_DeviceType = b.DeviceType\n\t}\n\tif b.IpAddress != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 11, 13)\n\t\tx.xxx_hidden_IpAddress = b.IpAddress\n\t}\n\tif b.UserAgent != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 12, 13)\n\t\tx.xxx_hidden_UserAgent = b.UserAgent\n\t}\n\treturn m0\n}\n\n// OpaqueActivityUpdate represents a server response to customer activity\ntype OpaqueActivityUpdate struct {\n\tstate                         protoimpl.MessageState                `protogen:\"opaque.v1\"`\n\txxx_hidden_CustomerId         *string                               `protobuf:\"bytes,1,opt,name=customer_id,json=customerId\"`\n\txxx_hidden_SessionId          *string                               `protobuf:\"bytes,2,opt,name=session_id,json=sessionId\"`\n\txxx_hidden_UpdateType         OpaqueActivityUpdate_OpaqueUpdateType `protobuf:\"varint,3,opt,name=update_type,json=updateType,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate_OpaqueUpdateType\"`\n\txxx_hidden_Timestamp          *timestamppb.Timestamp                `protobuf:\"bytes,4,opt,name=timestamp\"`\n\txxx_hidden_Message            *string                               `protobuf:\"bytes,5,opt,name=message\"`\n\txxx_hidden_ProductIds         []string                              `protobuf:\"bytes,6,rep,name=product_ids,json=productIds\"`\n\txxx_hidden_PriceUpdate        *OpaquePrice                          `protobuf:\"bytes,7,opt,name=price_update,json=priceUpdate\"`\n\txxx_hidden_InventoryCount     int32                                 `protobuf:\"varint,8,opt,name=inventory_count,json=inventoryCount\"`\n\txxx_hidden_OfferCode          *string                               `protobuf:\"bytes,9,opt,name=offer_code,json=offerCode\"`\n\txxx_hidden_OfferExpiry        *durationpb.Duration                  `protobuf:\"bytes,10,opt,name=offer_expiry,json=offerExpiry\"`\n\txxx_hidden_DiscountPercentage float64                               `protobuf:\"fixed64,11,opt,name=discount_percentage,json=discountPercentage\"`\n\txxx_hidden_UpdateData         map[string]string                     `protobuf:\"bytes,12,rep,name=update_data,json=updateData\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_Priority           int32                                 `protobuf:\"varint,13,opt,name=priority\"`\n\txxx_hidden_ActionData         isOpaqueActivityUpdate_ActionData     `protobuf_oneof:\"action_data\"`\n\tXXX_raceDetectHookData        protoimpl.RaceDetectHookData\n\tXXX_presence                  [1]uint32\n\tunknownFields                 protoimpl.UnknownFields\n\tsizeCache                     protoimpl.SizeCache\n}\n\nfunc (x *OpaqueActivityUpdate) Reset() {\n\t*x = OpaqueActivityUpdate{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[28]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueActivityUpdate) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueActivityUpdate) ProtoMessage() {}\n\nfunc (x *OpaqueActivityUpdate) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[28]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueActivityUpdate) GetCustomerId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_CustomerId != nil {\n\t\t\treturn *x.xxx_hidden_CustomerId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueActivityUpdate) GetSessionId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_SessionId != nil {\n\t\t\treturn *x.xxx_hidden_SessionId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueActivityUpdate) GetUpdateType() OpaqueActivityUpdate_OpaqueUpdateType {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 2) {\n\t\t\treturn x.xxx_hidden_UpdateType\n\t\t}\n\t}\n\treturn OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_UNSPECIFIED\n}\n\nfunc (x *OpaqueActivityUpdate) GetTimestamp() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Timestamp\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueActivityUpdate) GetMessage() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Message != nil {\n\t\t\treturn *x.xxx_hidden_Message\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueActivityUpdate) GetProductIds() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ProductIds\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueActivityUpdate) GetPriceUpdate() *OpaquePrice {\n\tif x != nil {\n\t\treturn x.xxx_hidden_PriceUpdate\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueActivityUpdate) GetInventoryCount() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_InventoryCount\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueActivityUpdate) GetOfferCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_OfferCode != nil {\n\t\t\treturn *x.xxx_hidden_OfferCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueActivityUpdate) GetOfferExpiry() *durationpb.Duration {\n\tif x != nil {\n\t\treturn x.xxx_hidden_OfferExpiry\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueActivityUpdate) GetDiscountPercentage() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_DiscountPercentage\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueActivityUpdate) GetUpdateData() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_UpdateData\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueActivityUpdate) GetPriority() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Priority\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueActivityUpdate) GetRedirectUrl() string {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_ActionData.(*opaqueActivityUpdate_RedirectUrl); ok {\n\t\t\treturn x.RedirectUrl\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueActivityUpdate) GetNotificationId() string {\n\tif x != nil {\n\t\tif x, ok := x.xxx_hidden_ActionData.(*opaqueActivityUpdate_NotificationId); ok {\n\t\t\treturn x.NotificationId\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueActivityUpdate) SetCustomerId(v string) {\n\tx.xxx_hidden_CustomerId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetSessionId(v string) {\n\tx.xxx_hidden_SessionId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetUpdateType(v OpaqueActivityUpdate_OpaqueUpdateType) {\n\tx.xxx_hidden_UpdateType = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetTimestamp(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_Timestamp = v\n}\n\nfunc (x *OpaqueActivityUpdate) SetMessage(v string) {\n\tx.xxx_hidden_Message = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetProductIds(v []string) {\n\tx.xxx_hidden_ProductIds = v\n}\n\nfunc (x *OpaqueActivityUpdate) SetPriceUpdate(v *OpaquePrice) {\n\tx.xxx_hidden_PriceUpdate = v\n}\n\nfunc (x *OpaqueActivityUpdate) SetInventoryCount(v int32) {\n\tx.xxx_hidden_InventoryCount = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 7, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetOfferCode(v string) {\n\tx.xxx_hidden_OfferCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 8, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetOfferExpiry(v *durationpb.Duration) {\n\tx.xxx_hidden_OfferExpiry = v\n}\n\nfunc (x *OpaqueActivityUpdate) SetDiscountPercentage(v float64) {\n\tx.xxx_hidden_DiscountPercentage = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 10, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetUpdateData(v map[string]string) {\n\tx.xxx_hidden_UpdateData = v\n}\n\nfunc (x *OpaqueActivityUpdate) SetPriority(v int32) {\n\tx.xxx_hidden_Priority = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 12, 14)\n}\n\nfunc (x *OpaqueActivityUpdate) SetRedirectUrl(v string) {\n\tx.xxx_hidden_ActionData = &opaqueActivityUpdate_RedirectUrl{v}\n}\n\nfunc (x *OpaqueActivityUpdate) SetNotificationId(v string) {\n\tx.xxx_hidden_ActionData = &opaqueActivityUpdate_NotificationId{v}\n}\n\nfunc (x *OpaqueActivityUpdate) HasCustomerId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueActivityUpdate) HasSessionId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueActivityUpdate) HasUpdateType() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueActivityUpdate) HasTimestamp() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Timestamp != nil\n}\n\nfunc (x *OpaqueActivityUpdate) HasMessage() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 4)\n}\n\nfunc (x *OpaqueActivityUpdate) HasPriceUpdate() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_PriceUpdate != nil\n}\n\nfunc (x *OpaqueActivityUpdate) HasInventoryCount() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 7)\n}\n\nfunc (x *OpaqueActivityUpdate) HasOfferCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 8)\n}\n\nfunc (x *OpaqueActivityUpdate) HasOfferExpiry() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_OfferExpiry != nil\n}\n\nfunc (x *OpaqueActivityUpdate) HasDiscountPercentage() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 10)\n}\n\nfunc (x *OpaqueActivityUpdate) HasPriority() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 12)\n}\n\nfunc (x *OpaqueActivityUpdate) HasActionData() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ActionData != nil\n}\n\nfunc (x *OpaqueActivityUpdate) HasRedirectUrl() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_ActionData.(*opaqueActivityUpdate_RedirectUrl)\n\treturn ok\n}\n\nfunc (x *OpaqueActivityUpdate) HasNotificationId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\t_, ok := x.xxx_hidden_ActionData.(*opaqueActivityUpdate_NotificationId)\n\treturn ok\n}\n\nfunc (x *OpaqueActivityUpdate) ClearCustomerId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_CustomerId = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearSessionId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_SessionId = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearUpdateType() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_UpdateType = OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_UNSPECIFIED\n}\n\nfunc (x *OpaqueActivityUpdate) ClearTimestamp() {\n\tx.xxx_hidden_Timestamp = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearMessage() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)\n\tx.xxx_hidden_Message = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearPriceUpdate() {\n\tx.xxx_hidden_PriceUpdate = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearInventoryCount() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 7)\n\tx.xxx_hidden_InventoryCount = 0\n}\n\nfunc (x *OpaqueActivityUpdate) ClearOfferCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 8)\n\tx.xxx_hidden_OfferCode = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearOfferExpiry() {\n\tx.xxx_hidden_OfferExpiry = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearDiscountPercentage() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 10)\n\tx.xxx_hidden_DiscountPercentage = 0\n}\n\nfunc (x *OpaqueActivityUpdate) ClearPriority() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 12)\n\tx.xxx_hidden_Priority = 0\n}\n\nfunc (x *OpaqueActivityUpdate) ClearActionData() {\n\tx.xxx_hidden_ActionData = nil\n}\n\nfunc (x *OpaqueActivityUpdate) ClearRedirectUrl() {\n\tif _, ok := x.xxx_hidden_ActionData.(*opaqueActivityUpdate_RedirectUrl); ok {\n\t\tx.xxx_hidden_ActionData = nil\n\t}\n}\n\nfunc (x *OpaqueActivityUpdate) ClearNotificationId() {\n\tif _, ok := x.xxx_hidden_ActionData.(*opaqueActivityUpdate_NotificationId); ok {\n\t\tx.xxx_hidden_ActionData = nil\n\t}\n}\n\nconst OpaqueActivityUpdate_ActionData_not_set_case case_OpaqueActivityUpdate_ActionData = 0\nconst OpaqueActivityUpdate_RedirectUrl_case case_OpaqueActivityUpdate_ActionData = 14\nconst OpaqueActivityUpdate_NotificationId_case case_OpaqueActivityUpdate_ActionData = 15\n\nfunc (x *OpaqueActivityUpdate) WhichActionData() case_OpaqueActivityUpdate_ActionData {\n\tif x == nil {\n\t\treturn OpaqueActivityUpdate_ActionData_not_set_case\n\t}\n\tswitch x.xxx_hidden_ActionData.(type) {\n\tcase *opaqueActivityUpdate_RedirectUrl:\n\t\treturn OpaqueActivityUpdate_RedirectUrl_case\n\tcase *opaqueActivityUpdate_NotificationId:\n\t\treturn OpaqueActivityUpdate_NotificationId_case\n\tdefault:\n\t\treturn OpaqueActivityUpdate_ActionData_not_set_case\n\t}\n}\n\ntype OpaqueActivityUpdate_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tCustomerId         *string\n\tSessionId          *string\n\tUpdateType         *OpaqueActivityUpdate_OpaqueUpdateType\n\tTimestamp          *timestamppb.Timestamp\n\tMessage            *string\n\tProductIds         []string\n\tPriceUpdate        *OpaquePrice\n\tInventoryCount     *int32\n\tOfferCode          *string\n\tOfferExpiry        *durationpb.Duration\n\tDiscountPercentage *float64\n\tUpdateData         map[string]string\n\tPriority           *int32\n\t// Fields of oneof xxx_hidden_ActionData:\n\tRedirectUrl    *string\n\tNotificationId *string\n\t// -- end of xxx_hidden_ActionData\n}\n\nfunc (b0 OpaqueActivityUpdate_builder) Build() *OpaqueActivityUpdate {\n\tm0 := &OpaqueActivityUpdate{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.CustomerId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 14)\n\t\tx.xxx_hidden_CustomerId = b.CustomerId\n\t}\n\tif b.SessionId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 14)\n\t\tx.xxx_hidden_SessionId = b.SessionId\n\t}\n\tif b.UpdateType != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 14)\n\t\tx.xxx_hidden_UpdateType = *b.UpdateType\n\t}\n\tx.xxx_hidden_Timestamp = b.Timestamp\n\tif b.Message != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 14)\n\t\tx.xxx_hidden_Message = b.Message\n\t}\n\tx.xxx_hidden_ProductIds = b.ProductIds\n\tx.xxx_hidden_PriceUpdate = b.PriceUpdate\n\tif b.InventoryCount != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 7, 14)\n\t\tx.xxx_hidden_InventoryCount = *b.InventoryCount\n\t}\n\tif b.OfferCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 8, 14)\n\t\tx.xxx_hidden_OfferCode = b.OfferCode\n\t}\n\tx.xxx_hidden_OfferExpiry = b.OfferExpiry\n\tif b.DiscountPercentage != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 10, 14)\n\t\tx.xxx_hidden_DiscountPercentage = *b.DiscountPercentage\n\t}\n\tx.xxx_hidden_UpdateData = b.UpdateData\n\tif b.Priority != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 12, 14)\n\t\tx.xxx_hidden_Priority = *b.Priority\n\t}\n\tif b.RedirectUrl != nil {\n\t\tx.xxx_hidden_ActionData = &opaqueActivityUpdate_RedirectUrl{*b.RedirectUrl}\n\t}\n\tif b.NotificationId != nil {\n\t\tx.xxx_hidden_ActionData = &opaqueActivityUpdate_NotificationId{*b.NotificationId}\n\t}\n\treturn m0\n}\n\ntype case_OpaqueActivityUpdate_ActionData protoreflect.FieldNumber\n\nfunc (x case_OpaqueActivityUpdate_ActionData) String() string {\n\tmd := file_examples_internal_proto_examplepb_opaque_proto_msgTypes[28].Descriptor()\n\tif x == 0 {\n\t\treturn \"not set\"\n\t}\n\treturn protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))\n}\n\ntype isOpaqueActivityUpdate_ActionData interface {\n\tisOpaqueActivityUpdate_ActionData()\n}\n\ntype opaqueActivityUpdate_RedirectUrl struct {\n\tRedirectUrl string `protobuf:\"bytes,14,opt,name=redirect_url,json=redirectUrl,oneof\"`\n}\n\ntype opaqueActivityUpdate_NotificationId struct {\n\tNotificationId string `protobuf:\"bytes,15,opt,name=notification_id,json=notificationId,oneof\"`\n}\n\nfunc (*opaqueActivityUpdate_RedirectUrl) isOpaqueActivityUpdate_ActionData() {}\n\nfunc (*opaqueActivityUpdate_NotificationId) isOpaqueActivityUpdate_ActionData() {}\n\ntype OpaqueProduct_OpaqueProductDimensions struct {\n\tstate                  protoimpl.MessageState                           `protogen:\"opaque.v1\"`\n\txxx_hidden_Length      float64                                          `protobuf:\"fixed64,1,opt,name=length\"`\n\txxx_hidden_Width       float64                                          `protobuf:\"fixed64,2,opt,name=width\"`\n\txxx_hidden_Height      float64                                          `protobuf:\"fixed64,3,opt,name=height\"`\n\txxx_hidden_Weight      float64                                          `protobuf:\"fixed64,4,opt,name=weight\"`\n\txxx_hidden_Unit        OpaqueProduct_OpaqueProductDimensions_OpaqueUnit `protobuf:\"varint,5,opt,name=unit,enum=grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct_OpaqueProductDimensions_OpaqueUnit\"`\n\tXXX_raceDetectHookData protoimpl.RaceDetectHookData\n\tXXX_presence           [1]uint32\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) Reset() {\n\t*x = OpaqueProduct_OpaqueProductDimensions{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[34]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueProduct_OpaqueProductDimensions) ProtoMessage() {}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[34]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) GetLength() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Length\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) GetWidth() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Width\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) GetHeight() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Height\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) GetWeight() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Weight\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) GetUnit() OpaqueProduct_OpaqueProductDimensions_OpaqueUnit {\n\tif x != nil {\n\t\tif protoimpl.X.Present(&(x.XXX_presence[0]), 4) {\n\t\t\treturn x.xxx_hidden_Unit\n\t\t}\n\t}\n\treturn OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_UNSPECIFIED\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) SetLength(v float64) {\n\tx.xxx_hidden_Length = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 5)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) SetWidth(v float64) {\n\tx.xxx_hidden_Width = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 5)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) SetHeight(v float64) {\n\tx.xxx_hidden_Height = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 5)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) SetWeight(v float64) {\n\tx.xxx_hidden_Weight = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 5)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) SetUnit(v OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) {\n\tx.xxx_hidden_Unit = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 5)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) HasLength() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) HasWidth() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) HasHeight() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) HasWeight() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 3)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) HasUnit() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 4)\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) ClearLength() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_Length = 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) ClearWidth() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Width = 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) ClearHeight() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_Height = 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) ClearWeight() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)\n\tx.xxx_hidden_Weight = 0\n}\n\nfunc (x *OpaqueProduct_OpaqueProductDimensions) ClearUnit() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)\n\tx.xxx_hidden_Unit = OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_UNSPECIFIED\n}\n\ntype OpaqueProduct_OpaqueProductDimensions_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tLength *float64\n\tWidth  *float64\n\tHeight *float64\n\tWeight *float64\n\tUnit   *OpaqueProduct_OpaqueProductDimensions_OpaqueUnit\n}\n\nfunc (b0 OpaqueProduct_OpaqueProductDimensions_builder) Build() *OpaqueProduct_OpaqueProductDimensions {\n\tm0 := &OpaqueProduct_OpaqueProductDimensions{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.Length != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 5)\n\t\tx.xxx_hidden_Length = *b.Length\n\t}\n\tif b.Width != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 5)\n\t\tx.xxx_hidden_Width = *b.Width\n\t}\n\tif b.Height != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 5)\n\t\tx.xxx_hidden_Height = *b.Height\n\t}\n\tif b.Weight != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 5)\n\t\tx.xxx_hidden_Weight = *b.Weight\n\t}\n\tif b.Unit != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 5)\n\t\tx.xxx_hidden_Unit = *b.Unit\n\t}\n\treturn m0\n}\n\ntype OpaqueCustomer_OpaqueLoyaltyInfo struct {\n\tstate                  protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Tier        *string                `protobuf:\"bytes,1,opt,name=tier\"`\n\txxx_hidden_Points      int32                  `protobuf:\"varint,2,opt,name=points\"`\n\txxx_hidden_TierExpiry  *timestamppb.Timestamp `protobuf:\"bytes,3,opt,name=tier_expiry,json=tierExpiry\"`\n\txxx_hidden_Rewards     []string               `protobuf:\"bytes,4,rep,name=rewards\"`\n\tXXX_raceDetectHookData protoimpl.RaceDetectHookData\n\tXXX_presence           [1]uint32\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) Reset() {\n\t*x = OpaqueCustomer_OpaqueLoyaltyInfo{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[35]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCustomer_OpaqueLoyaltyInfo) ProtoMessage() {}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[35]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) GetTier() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Tier != nil {\n\t\t\treturn *x.xxx_hidden_Tier\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) GetPoints() int32 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Points\n\t}\n\treturn 0\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) GetTierExpiry() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_TierExpiry\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) GetRewards() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Rewards\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) SetTier(v string) {\n\tx.xxx_hidden_Tier = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 4)\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) SetPoints(v int32) {\n\tx.xxx_hidden_Points = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 4)\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) SetTierExpiry(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_TierExpiry = v\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) SetRewards(v []string) {\n\tx.xxx_hidden_Rewards = v\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) HasTier() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) HasPoints() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) HasTierExpiry() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_TierExpiry != nil\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) ClearTier() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_Tier = nil\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) ClearPoints() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Points = 0\n}\n\nfunc (x *OpaqueCustomer_OpaqueLoyaltyInfo) ClearTierExpiry() {\n\tx.xxx_hidden_TierExpiry = nil\n}\n\ntype OpaqueCustomer_OpaqueLoyaltyInfo_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tTier       *string\n\tPoints     *int32\n\tTierExpiry *timestamppb.Timestamp\n\tRewards    []string\n}\n\nfunc (b0 OpaqueCustomer_OpaqueLoyaltyInfo_builder) Build() *OpaqueCustomer_OpaqueLoyaltyInfo {\n\tm0 := &OpaqueCustomer_OpaqueLoyaltyInfo{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.Tier != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 4)\n\t\tx.xxx_hidden_Tier = b.Tier\n\t}\n\tif b.Points != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 4)\n\t\tx.xxx_hidden_Points = *b.Points\n\t}\n\tx.xxx_hidden_TierExpiry = b.TierExpiry\n\tx.xxx_hidden_Rewards = b.Rewards\n\treturn m0\n}\n\ntype OpaqueCustomer_OpaquePaymentMethod struct {\n\tstate                  protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_PaymentId   *string                `protobuf:\"bytes,1,opt,name=payment_id,json=paymentId\"`\n\txxx_hidden_Type        *string                `protobuf:\"bytes,2,opt,name=type\"`\n\txxx_hidden_LastFour    *string                `protobuf:\"bytes,3,opt,name=last_four,json=lastFour\"`\n\txxx_hidden_Provider    *string                `protobuf:\"bytes,4,opt,name=provider\"`\n\txxx_hidden_ExpiresAt   *timestamppb.Timestamp `protobuf:\"bytes,5,opt,name=expires_at,json=expiresAt\"`\n\txxx_hidden_IsDefault   bool                   `protobuf:\"varint,6,opt,name=is_default,json=isDefault\"`\n\tXXX_raceDetectHookData protoimpl.RaceDetectHookData\n\tXXX_presence           [1]uint32\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) Reset() {\n\t*x = OpaqueCustomer_OpaquePaymentMethod{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[37]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueCustomer_OpaquePaymentMethod) ProtoMessage() {}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[37]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) GetPaymentId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_PaymentId != nil {\n\t\t\treturn *x.xxx_hidden_PaymentId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) GetType() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Type != nil {\n\t\t\treturn *x.xxx_hidden_Type\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) GetLastFour() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_LastFour != nil {\n\t\t\treturn *x.xxx_hidden_LastFour\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) GetProvider() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Provider != nil {\n\t\t\treturn *x.xxx_hidden_Provider\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) GetExpiresAt() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExpiresAt\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) GetIsDefault() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_IsDefault\n\t}\n\treturn false\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) SetPaymentId(v string) {\n\tx.xxx_hidden_PaymentId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 6)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) SetType(v string) {\n\tx.xxx_hidden_Type = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 6)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) SetLastFour(v string) {\n\tx.xxx_hidden_LastFour = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 6)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) SetProvider(v string) {\n\tx.xxx_hidden_Provider = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 6)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) SetExpiresAt(v *timestamppb.Timestamp) {\n\tx.xxx_hidden_ExpiresAt = v\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) SetIsDefault(v bool) {\n\tx.xxx_hidden_IsDefault = v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 5, 6)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) HasPaymentId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) HasType() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) HasLastFour() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) HasProvider() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 3)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) HasExpiresAt() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ExpiresAt != nil\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) HasIsDefault() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 5)\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) ClearPaymentId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_PaymentId = nil\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) ClearType() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Type = nil\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) ClearLastFour() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_LastFour = nil\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) ClearProvider() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)\n\tx.xxx_hidden_Provider = nil\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) ClearExpiresAt() {\n\tx.xxx_hidden_ExpiresAt = nil\n}\n\nfunc (x *OpaqueCustomer_OpaquePaymentMethod) ClearIsDefault() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 5)\n\tx.xxx_hidden_IsDefault = false\n}\n\ntype OpaqueCustomer_OpaquePaymentMethod_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tPaymentId *string\n\tType      *string\n\tLastFour  *string\n\tProvider  *string\n\tExpiresAt *timestamppb.Timestamp\n\tIsDefault *bool\n}\n\nfunc (b0 OpaqueCustomer_OpaquePaymentMethod_builder) Build() *OpaqueCustomer_OpaquePaymentMethod {\n\tm0 := &OpaqueCustomer_OpaquePaymentMethod{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.PaymentId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 6)\n\t\tx.xxx_hidden_PaymentId = b.PaymentId\n\t}\n\tif b.Type != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 6)\n\t\tx.xxx_hidden_Type = b.Type\n\t}\n\tif b.LastFour != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 6)\n\t\tx.xxx_hidden_LastFour = b.LastFour\n\t}\n\tif b.Provider != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 6)\n\t\tx.xxx_hidden_Provider = b.Provider\n\t}\n\tx.xxx_hidden_ExpiresAt = b.ExpiresAt\n\tif b.IsDefault != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 5, 6)\n\t\tx.xxx_hidden_IsDefault = *b.IsDefault\n\t}\n\treturn m0\n}\n\ntype OpaqueOrder_OpaqueShippingInfo struct {\n\tstate                            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Carrier               *string                `protobuf:\"bytes,1,opt,name=carrier\"`\n\txxx_hidden_Method                *string                `protobuf:\"bytes,2,opt,name=method\"`\n\txxx_hidden_EstimatedDeliveryTime *durationpb.Duration   `protobuf:\"bytes,3,opt,name=estimated_delivery_time,json=estimatedDeliveryTime\"`\n\txxx_hidden_TrackingUrls          []string               `protobuf:\"bytes,4,rep,name=tracking_urls,json=trackingUrls\"`\n\tXXX_raceDetectHookData           protoimpl.RaceDetectHookData\n\tXXX_presence                     [1]uint32\n\tunknownFields                    protoimpl.UnknownFields\n\tsizeCache                        protoimpl.SizeCache\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) Reset() {\n\t*x = OpaqueOrder_OpaqueShippingInfo{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[39]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueOrder_OpaqueShippingInfo) ProtoMessage() {}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[39]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) GetCarrier() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Carrier != nil {\n\t\t\treturn *x.xxx_hidden_Carrier\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) GetMethod() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_Method != nil {\n\t\t\treturn *x.xxx_hidden_Method\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) GetEstimatedDeliveryTime() *durationpb.Duration {\n\tif x != nil {\n\t\treturn x.xxx_hidden_EstimatedDeliveryTime\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) GetTrackingUrls() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_TrackingUrls\n\t}\n\treturn nil\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) SetCarrier(v string) {\n\tx.xxx_hidden_Carrier = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 4)\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) SetMethod(v string) {\n\tx.xxx_hidden_Method = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 4)\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) SetEstimatedDeliveryTime(v *durationpb.Duration) {\n\tx.xxx_hidden_EstimatedDeliveryTime = v\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) SetTrackingUrls(v []string) {\n\tx.xxx_hidden_TrackingUrls = v\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) HasCarrier() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) HasMethod() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) HasEstimatedDeliveryTime() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_EstimatedDeliveryTime != nil\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) ClearCarrier() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_Carrier = nil\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) ClearMethod() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_Method = nil\n}\n\nfunc (x *OpaqueOrder_OpaqueShippingInfo) ClearEstimatedDeliveryTime() {\n\tx.xxx_hidden_EstimatedDeliveryTime = nil\n}\n\ntype OpaqueOrder_OpaqueShippingInfo_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tCarrier               *string\n\tMethod                *string\n\tEstimatedDeliveryTime *durationpb.Duration\n\tTrackingUrls          []string\n}\n\nfunc (b0 OpaqueOrder_OpaqueShippingInfo_builder) Build() *OpaqueOrder_OpaqueShippingInfo {\n\tm0 := &OpaqueOrder_OpaqueShippingInfo{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.Carrier != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 4)\n\t\tx.xxx_hidden_Carrier = b.Carrier\n\t}\n\tif b.Method != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 4)\n\t\tx.xxx_hidden_Method = b.Method\n\t}\n\tx.xxx_hidden_EstimatedDeliveryTime = b.EstimatedDeliveryTime\n\tx.xxx_hidden_TrackingUrls = b.TrackingUrls\n\treturn m0\n}\n\ntype OpaqueOrderSummary_OpaqueOrderError struct {\n\tstate                   protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_OrderId      *string                `protobuf:\"bytes,1,opt,name=order_id,json=orderId\"`\n\txxx_hidden_ErrorCode    *string                `protobuf:\"bytes,2,opt,name=error_code,json=errorCode\"`\n\txxx_hidden_ErrorMessage *string                `protobuf:\"bytes,3,opt,name=error_message,json=errorMessage\"`\n\tXXX_raceDetectHookData  protoimpl.RaceDetectHookData\n\tXXX_presence            [1]uint32\n\tunknownFields           protoimpl.UnknownFields\n\tsizeCache               protoimpl.SizeCache\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) Reset() {\n\t*x = OpaqueOrderSummary_OpaqueOrderError{}\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[42]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpaqueOrderSummary_OpaqueOrderError) ProtoMessage() {}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_opaque_proto_msgTypes[42]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) GetOrderId() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_OrderId != nil {\n\t\t\treturn *x.xxx_hidden_OrderId\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) GetErrorCode() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ErrorCode != nil {\n\t\t\treturn *x.xxx_hidden_ErrorCode\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) GetErrorMessage() string {\n\tif x != nil {\n\t\tif x.xxx_hidden_ErrorMessage != nil {\n\t\t\treturn *x.xxx_hidden_ErrorMessage\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) SetOrderId(v string) {\n\tx.xxx_hidden_OrderId = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 3)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) SetErrorCode(v string) {\n\tx.xxx_hidden_ErrorCode = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 3)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) SetErrorMessage(v string) {\n\tx.xxx_hidden_ErrorMessage = &v\n\tprotoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 3)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) HasOrderId() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 0)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) HasErrorCode() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 1)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) HasErrorMessage() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn protoimpl.X.Present(&(x.XXX_presence[0]), 2)\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) ClearOrderId() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)\n\tx.xxx_hidden_OrderId = nil\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) ClearErrorCode() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)\n\tx.xxx_hidden_ErrorCode = nil\n}\n\nfunc (x *OpaqueOrderSummary_OpaqueOrderError) ClearErrorMessage() {\n\tprotoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)\n\tx.xxx_hidden_ErrorMessage = nil\n}\n\ntype OpaqueOrderSummary_OpaqueOrderError_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tOrderId      *string\n\tErrorCode    *string\n\tErrorMessage *string\n}\n\nfunc (b0 OpaqueOrderSummary_OpaqueOrderError_builder) Build() *OpaqueOrderSummary_OpaqueOrderError {\n\tm0 := &OpaqueOrderSummary_OpaqueOrderError{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tif b.OrderId != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 3)\n\t\tx.xxx_hidden_OrderId = b.OrderId\n\t}\n\tif b.ErrorCode != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 3)\n\t\tx.xxx_hidden_ErrorCode = b.ErrorCode\n\t}\n\tif b.ErrorMessage != nil {\n\t\tprotoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 3)\n\t\tx.xxx_hidden_ErrorMessage = b.ErrorMessage\n\t}\n\treturn m0\n}\n\nvar File_examples_internal_proto_examplepb_opaque_proto protoreflect.FileDescriptor\n\nconst file_examples_internal_proto_examplepb_opaque_proto_rawDesc = \"\" +\n\t\"\\n\" +\n\t\".examples/internal/proto/examplepb/opaque.proto\\x12.grpc.gateway.examples.internal.proto.examplepb\\x1a)examples/internal/proto/sub/message.proto\\x1a\\x1cgoogle/api/annotations.proto\\x1a\\x17google/api/client.proto\\x1a\\x1egoogle/protobuf/duration.proto\\x1a google/protobuf/field_mask.proto\\x1a\\x1fgoogle/protobuf/timestamp.proto\\x1a\\x1egoogle/protobuf/wrappers.proto\\\"\\xb2\\x01\\n\" +\n\t\"\\x1aOpaqueUpdateProductRequest\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x01 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\x12;\\n\" +\n\t\"\\vupdate_mask\\x18\\x02 \\x01(\\v2\\x1a.google.protobuf.FieldMaskR\\n\" +\n\t\"updateMask\\\"v\\n\" +\n\t\"\\x1bOpaqueUpdateProductResponse\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x01 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\\"\\xe7\\x01\\n\" +\n\t\"\\x17OpaqueGetProductRequest\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"product_id\\x18\\x01 \\x01(\\tR\\tproductId\\x12)\\n\" +\n\t\"\\x10include_variants\\x18\\x02 \\x01(\\bR\\x0fincludeVariants\\x128\\n\" +\n\t\"\\x18include_related_products\\x18\\x03 \\x01(\\bR\\x16includeRelatedProducts\\x12#\\n\" +\n\t\"\\rlanguage_code\\x18\\x04 \\x01(\\tR\\flanguageCode\\x12#\\n\" +\n\t\"\\rcurrency_code\\x18\\x05 \\x01(\\tR\\fcurrencyCode\\\"s\\n\" +\n\t\"\\x18OpaqueGetProductResponse\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x01 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\\"\\xa0\\b\\n\" +\n\t\"\\x1bOpaqueSearchProductsRequest\\x12\\x14\\n\" +\n\t\"\\x05query\\x18\\x01 \\x01(\\tR\\x05query\\x12!\\n\" +\n\t\"\\fcategory_ids\\x18\\x02 \\x03(\\tR\\vcategoryIds\\x12\\x16\\n\" +\n\t\"\\x06brands\\x18\\x03 \\x03(\\tR\\x06brands\\x12X\\n\" +\n\t\"\\tmin_price\\x18\\x04 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\bminPrice\\x12X\\n\" +\n\t\"\\tmax_price\\x18\\x05 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\bmaxPrice\\x12\\x12\\n\" +\n\t\"\\x04tags\\x18\\x06 \\x03(\\tR\\x04tags\\x12t\\n\" +\n\t\"\\asort_by\\x18\\a \\x01(\\x0e2[.grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.OpaqueSortOrderR\\x06sortBy\\x12\\x12\\n\" +\n\t\"\\x04page\\x18\\b \\x01(\\x05R\\x04page\\x12\\x1b\\n\" +\n\t\"\\tpage_size\\x18\\t \\x01(\\x05R\\bpageSize\\x12#\\n\" +\n\t\"\\rlanguage_code\\x18\\n\" +\n\t\" \\x01(\\tR\\flanguageCode\\x12#\\n\" +\n\t\"\\rcurrency_code\\x18\\v \\x01(\\tR\\fcurrencyCode\\x129\\n\" +\n\t\"\\n\" +\n\t\"field_mask\\x18\\f \\x01(\\v2\\x1a.google.protobuf.FieldMaskR\\tfieldMask\\x12r\\n\" +\n\t\"\\afilters\\x18\\r \\x03(\\v2X.grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.FiltersEntryR\\afilters\\x1a:\\n\" +\n\t\"\\fFiltersEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\\"\\x8b\\x02\\n\" +\n\t\"\\x0fOpaqueSortOrder\\x12!\\n\" +\n\t\"\\x1dOPAQUE_SORT_ORDER_UNSPECIFIED\\x10\\x00\\x12\\x1f\\n\" +\n\t\"\\x1bOPAQUE_SORT_ORDER_RELEVANCE\\x10\\x01\\x12'\\n\" +\n\t\"#OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH\\x10\\x02\\x12'\\n\" +\n\t\"#OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW\\x10\\x03\\x12\\\"\\n\" +\n\t\"\\x1eOPAQUE_SORT_ORDER_NEWEST_FIRST\\x10\\x04\\x12\\x1c\\n\" +\n\t\"\\x18OPAQUE_SORT_ORDER_RATING\\x10\\x05\\x12 \\n\" +\n\t\"\\x1cOPAQUE_SORT_ORDER_POPULARITY\\x10\\x06\\\"w\\n\" +\n\t\"\\x1cOpaqueSearchProductsResponse\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x01 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\\"\\x94\\x01\\n\" +\n\t\"\\x1aOpaqueCreateProductRequest\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"product_id\\x18\\x01 \\x01(\\tR\\tproductId\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x02 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\\"v\\n\" +\n\t\"\\x1bOpaqueCreateProductResponse\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x01 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\\"\\x99\\x01\\n\" +\n\t\"\\x1fOpaqueCreateProductFieldRequest\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"product_id\\x18\\x01 \\x01(\\tR\\tproductId\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x02 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\\"{\\n\" +\n\t\" OpaqueCreateProductFieldResponse\\x12W\\n\" +\n\t\"\\aproduct\\x18\\x01 \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductR\\aproduct\\\"o\\n\" +\n\t\"\\x1aOpaqueProcessOrdersRequest\\x12Q\\n\" +\n\t\"\\x05order\\x18\\x01 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderR\\x05order\\\"{\\n\" +\n\t\"\\x1bOpaqueProcessOrdersResponse\\x12\\\\\\n\" +\n\t\"\\asummary\\x18\\x01 \\x01(\\v2B.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummaryR\\asummary\\\"\\x80\\x01\\n\" +\n\t\"#OpaqueStreamCustomerActivityRequest\\x12Y\\n\" +\n\t\"\\x05event\\x18\\x01 \\x01(\\v2C.grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEventR\\x05event\\\"\\x82\\x01\\n\" +\n\t\"$OpaqueStreamCustomerActivityResponse\\x12Z\\n\" +\n\t\"\\x05event\\x18\\x02 \\x01(\\v2D.grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdateR\\x05event\\\"n\\n\" +\n\t\"\\x19OpaqueSearchOrdersRequest\\x12Q\\n\" +\n\t\"\\x05order\\x18\\x01 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderR\\x05order\\\"q\\n\" +\n\t\"\\x1aOpaqueSearchOrdersResponse\\x12S\\n\" +\n\t\"\\x06orders\\x18\\x01 \\x03(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderR\\x06orders\\\"d\\n\" +\n\t\"\\x15OpaqueEchoNoteRequest\\x12K\\n\" +\n\t\"\\x04note\\x18\\x01 \\x01(\\v27.grpc.gateway.examples.internal.proto.sub.StringMessageR\\x04note\\\"e\\n\" +\n\t\"\\x16OpaqueEchoNoteResponse\\x12K\\n\" +\n\t\"\\x04note\\x18\\x01 \\x01(\\v27.grpc.gateway.examples.internal.proto.sub.StringMessageR\\x04note\\\"\\xd4\\x05\\n\" +\n\t\"\\rOpaqueAddress\\x12!\\n\" +\n\t\"\\fstreet_line1\\x18\\x01 \\x01(\\tR\\vstreetLine1\\x12!\\n\" +\n\t\"\\fstreet_line2\\x18\\x02 \\x01(\\tR\\vstreetLine2\\x12\\x12\\n\" +\n\t\"\\x04city\\x18\\x03 \\x01(\\tR\\x04city\\x12\\x14\\n\" +\n\t\"\\x05state\\x18\\x04 \\x01(\\tR\\x05state\\x12\\x18\\n\" +\n\t\"\\acountry\\x18\\x05 \\x01(\\tR\\acountry\\x12\\x1f\\n\" +\n\t\"\\vpostal_code\\x18\\x06 \\x01(\\tR\\n\" +\n\t\"postalCode\\x12r\\n\" +\n\t\"\\faddress_type\\x18\\a \\x01(\\x0e2O.grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.OpaqueAddressTypeR\\vaddressType\\x129\\n\" +\n\t\"\\n\" +\n\t\"is_default\\x18\\b \\x01(\\v2\\x1a.google.protobuf.BoolValueR\\tisDefault\\x12g\\n\" +\n\t\"\\bmetadata\\x18\\t \\x03(\\v2K.grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.MetadataEntryR\\bmetadata\\x1a;\\n\" +\n\t\"\\rMetadataEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\\"\\xc2\\x01\\n\" +\n\t\"\\x11OpaqueAddressType\\x12#\\n\" +\n\t\"\\x1fOPAQUE_ADDRESS_TYPE_UNSPECIFIED\\x10\\x00\\x12#\\n\" +\n\t\"\\x1fOPAQUE_ADDRESS_TYPE_RESIDENTIAL\\x10\\x01\\x12 \\n\" +\n\t\"\\x1cOPAQUE_ADDRESS_TYPE_BUSINESS\\x10\\x02\\x12 \\n\" +\n\t\"\\x1cOPAQUE_ADDRESS_TYPE_SHIPPING\\x10\\x03\\x12\\x1f\\n\" +\n\t\"\\x1bOPAQUE_ADDRESS_TYPE_BILLING\\x10\\x04\\\"\\xfe\\x01\\n\" +\n\t\"\\vOpaquePrice\\x12\\x16\\n\" +\n\t\"\\x06amount\\x18\\x01 \\x01(\\x01R\\x06amount\\x12#\\n\" +\n\t\"\\rcurrency_code\\x18\\x02 \\x01(\\tR\\fcurrencyCode\\x12#\\n\" +\n\t\"\\ris_discounted\\x18\\x03 \\x01(\\bR\\fisDiscounted\\x12E\\n\" +\n\t\"\\x0foriginal_amount\\x18\\x04 \\x01(\\v2\\x1c.google.protobuf.DoubleValueR\\x0eoriginalAmount\\x12F\\n\" +\n\t\"\\x11price_valid_until\\x18\\x05 \\x01(\\v2\\x1a.google.protobuf.TimestampR\\x0fpriceValidUntil\\\"\\xe8\\x02\\n\" +\n\t\"\\x15OpaqueProductCategory\\x12\\x1f\\n\" +\n\t\"\\vcategory_id\\x18\\x01 \\x01(\\tR\\n\" +\n\t\"categoryId\\x12\\x12\\n\" +\n\t\"\\x04name\\x18\\x02 \\x01(\\tR\\x04name\\x12 \\n\" +\n\t\"\\vdescription\\x18\\x03 \\x01(\\tR\\vdescription\\x12n\\n\" +\n\t\"\\x0fparent_category\\x18\\x04 \\x01(\\v2E.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategoryR\\x0eparentCategory\\x12\\x12\\n\" +\n\t\"\\x04tags\\x18\\x05 \\x03(\\tR\\x04tags\\x129\\n\" +\n\t\"\\n\" +\n\t\"created_at\\x18\\x06 \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tcreatedAt\\x129\\n\" +\n\t\"\\n\" +\n\t\"updated_at\\x18\\a \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tupdatedAt\\\"\\xef\\x04\\n\" +\n\t\"\\x14OpaqueProductVariant\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"variant_id\\x18\\x01 \\x01(\\tR\\tvariantId\\x12\\x10\\n\" +\n\t\"\\x03sku\\x18\\x02 \\x01(\\tR\\x03sku\\x12\\x12\\n\" +\n\t\"\\x04name\\x18\\x03 \\x01(\\tR\\x04name\\x12Q\\n\" +\n\t\"\\x05price\\x18\\x04 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\x05price\\x12'\\n\" +\n\t\"\\x0finventory_count\\x18\\x05 \\x01(\\x05R\\x0einventoryCount\\x12t\\n\" +\n\t\"\\n\" +\n\t\"attributes\\x18\\x06 \\x03(\\v2T.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant.AttributesEntryR\\n\" +\n\t\"attributes\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"image_data\\x18\\a \\x01(\\fR\\timageData\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"image_urls\\x18\\b \\x03(\\tR\\timageUrls\\x12=\\n\" +\n\t\"\\fis_available\\x18\\t \\x01(\\v2\\x1a.google.protobuf.BoolValueR\\visAvailable\\x12'\\n\" +\n\t\"\\x0epercentage_off\\x18\\n\" +\n\t\" \\x01(\\x01H\\x00R\\rpercentageOff\\x12*\\n\" +\n\t\"\\x10fixed_amount_off\\x18\\v \\x01(\\x01H\\x00R\\x0efixedAmountOff\\x1a=\\n\" +\n\t\"\\x0fAttributesEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01B\\x0f\\n\" +\n\t\"\\rdiscount_info\\\"\\xf4\\x0f\\n\" +\n\t\"\\rOpaqueProduct\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"product_id\\x18\\x01 \\x01(\\tR\\tproductId\\x12\\x12\\n\" +\n\t\"\\x04name\\x18\\x02 \\x01(\\tR\\x04name\\x12 \\n\" +\n\t\"\\vdescription\\x18\\x03 \\x01(\\tR\\vdescription\\x12\\x14\\n\" +\n\t\"\\x05brand\\x18\\x04 \\x01(\\tR\\x05brand\\x12Z\\n\" +\n\t\"\\n\" +\n\t\"base_price\\x18\\x05 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\tbasePrice\\x12a\\n\" +\n\t\"\\bcategory\\x18\\x06 \\x01(\\v2E.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategoryR\\bcategory\\x12`\\n\" +\n\t\"\\bvariants\\x18\\a \\x03(\\v2D.grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariantR\\bvariants\\x12\\x12\\n\" +\n\t\"\\x04tags\\x18\\b \\x03(\\tR\\x04tags\\x12%\\n\" +\n\t\"\\x0eaverage_rating\\x18\\t \\x01(\\x01R\\raverageRating\\x12!\\n\" +\n\t\"\\freview_count\\x18\\n\" +\n\t\" \\x01(\\x05R\\vreviewCount\\x12;\\n\" +\n\t\"\\vis_featured\\x18\\v \\x01(\\v2\\x1a.google.protobuf.BoolValueR\\n\" +\n\t\"isFeatured\\x129\\n\" +\n\t\"\\n\" +\n\t\"created_at\\x18\\f \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tcreatedAt\\x129\\n\" +\n\t\"\\n\" +\n\t\"updated_at\\x18\\r \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tupdatedAt\\x12M\\n\" +\n\t\"\\x15average_shipping_time\\x18\\x0e \\x01(\\v2\\x19.google.protobuf.DurationR\\x13averageShippingTime\\x12i\\n\" +\n\t\"\\x06status\\x18\\x0f \\x01(\\x0e2Q.grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductStatusR\\x06status\\x12g\\n\" +\n\t\"\\bmetadata\\x18\\x10 \\x03(\\v2K.grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.MetadataEntryR\\bmetadata\\x12z\\n\" +\n\t\"\\x0fregional_prices\\x18\\x11 \\x03(\\v2Q.grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.RegionalPricesEntryR\\x0eregionalPrices\\x12u\\n\" +\n\t\"\\n\" +\n\t\"dimensions\\x18\\x12 \\x01(\\v2U.grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductDimensionsR\\n\" +\n\t\"dimensions\\x12'\\n\" +\n\t\"\\x0etax_percentage\\x18\\x13 \\x01(\\x01H\\x00R\\rtaxPercentage\\x12\\x1f\\n\" +\n\t\"\\n\" +\n\t\"tax_exempt\\x18\\x14 \\x01(\\bH\\x00R\\ttaxExempt\\x1a;\\n\" +\n\t\"\\rMetadataEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\x1a~\\n\" +\n\t\"\\x13RegionalPricesEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12Q\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\x05value:\\x028\\x01\\x1a\\xca\\x02\\n\" +\n\t\"\\x17OpaqueProductDimensions\\x12\\x16\\n\" +\n\t\"\\x06length\\x18\\x01 \\x01(\\x01R\\x06length\\x12\\x14\\n\" +\n\t\"\\x05width\\x18\\x02 \\x01(\\x01R\\x05width\\x12\\x16\\n\" +\n\t\"\\x06height\\x18\\x03 \\x01(\\x01R\\x06height\\x12\\x16\\n\" +\n\t\"\\x06weight\\x18\\x04 \\x01(\\x01R\\x06weight\\x12t\\n\" +\n\t\"\\x04unit\\x18\\x05 \\x01(\\x0e2`.grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductDimensions.OpaqueUnitR\\x04unit\\\"[\\n\" +\n\t\"\\n\" +\n\t\"OpaqueUnit\\x12\\x1b\\n\" +\n\t\"\\x17OPAQUE_UNIT_UNSPECIFIED\\x10\\x00\\x12\\x16\\n\" +\n\t\"\\x12OPAQUE_UNIT_METRIC\\x10\\x01\\x12\\x18\\n\" +\n\t\"\\x14OPAQUE_UNIT_IMPERIAL\\x10\\x02\\\"\\xcf\\x01\\n\" +\n\t\"\\x13OpaqueProductStatus\\x12%\\n\" +\n\t\"!OPAQUE_PRODUCT_STATUS_UNSPECIFIED\\x10\\x00\\x12\\x1f\\n\" +\n\t\"\\x1bOPAQUE_PRODUCT_STATUS_DRAFT\\x10\\x01\\x12 \\n\" +\n\t\"\\x1cOPAQUE_PRODUCT_STATUS_ACTIVE\\x10\\x02\\x12&\\n\" +\n\t\"\\\"OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK\\x10\\x03\\x12&\\n\" +\n\t\"\\\"OPAQUE_PRODUCT_STATUS_DISCONTINUED\\x10\\x04B\\n\" +\n\t\"\\n\" +\n\t\"\\btax_info\\\"\\xd5\\v\\n\" +\n\t\"\\x0eOpaqueCustomer\\x12\\x1f\\n\" +\n\t\"\\vcustomer_id\\x18\\x01 \\x01(\\tR\\n\" +\n\t\"customerId\\x12\\x14\\n\" +\n\t\"\\x05email\\x18\\x02 \\x01(\\tR\\x05email\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"first_name\\x18\\x03 \\x01(\\tR\\tfirstName\\x12\\x1b\\n\" +\n\t\"\\tlast_name\\x18\\x04 \\x01(\\tR\\blastName\\x12!\\n\" +\n\t\"\\fphone_number\\x18\\x05 \\x01(\\tR\\vphoneNumber\\x12[\\n\" +\n\t\"\\taddresses\\x18\\x06 \\x03(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueAddressR\\taddresses\\x129\\n\" +\n\t\"\\n\" +\n\t\"created_at\\x18\\a \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tcreatedAt\\x129\\n\" +\n\t\"\\n\" +\n\t\"last_login\\x18\\b \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tlastLogin\\x12k\\n\" +\n\t\"\\x06status\\x18\\t \\x01(\\x0e2S.grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaqueCustomerStatusR\\x06status\\x12s\\n\" +\n\t\"\\floyalty_info\\x18\\n\" +\n\t\" \\x01(\\v2P.grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaqueLoyaltyInfoR\\vloyaltyInfo\\x12q\\n\" +\n\t\"\\vpreferences\\x18\\v \\x03(\\v2O.grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.PreferencesEntryR\\vpreferences\\x12{\\n\" +\n\t\"\\x0fpayment_methods\\x18\\f \\x03(\\v2R.grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaquePaymentMethodR\\x0epaymentMethods\\x1a\\x96\\x01\\n\" +\n\t\"\\x11OpaqueLoyaltyInfo\\x12\\x12\\n\" +\n\t\"\\x04tier\\x18\\x01 \\x01(\\tR\\x04tier\\x12\\x16\\n\" +\n\t\"\\x06points\\x18\\x02 \\x01(\\x05R\\x06points\\x12;\\n\" +\n\t\"\\vtier_expiry\\x18\\x03 \\x01(\\v2\\x1a.google.protobuf.TimestampR\\n\" +\n\t\"tierExpiry\\x12\\x18\\n\" +\n\t\"\\arewards\\x18\\x04 \\x03(\\tR\\arewards\\x1a>\\n\" +\n\t\"\\x10PreferencesEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\x1a\\xdb\\x01\\n\" +\n\t\"\\x13OpaquePaymentMethod\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"payment_id\\x18\\x01 \\x01(\\tR\\tpaymentId\\x12\\x12\\n\" +\n\t\"\\x04type\\x18\\x02 \\x01(\\tR\\x04type\\x12\\x1b\\n\" +\n\t\"\\tlast_four\\x18\\x03 \\x01(\\tR\\blastFour\\x12\\x1a\\n\" +\n\t\"\\bprovider\\x18\\x04 \\x01(\\tR\\bprovider\\x129\\n\" +\n\t\"\\n\" +\n\t\"expires_at\\x18\\x05 \\x01(\\v2\\x1a.google.protobuf.TimestampR\\texpiresAt\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"is_default\\x18\\x06 \\x01(\\bR\\tisDefault\\\"\\xd0\\x01\\n\" +\n\t\"\\x14OpaqueCustomerStatus\\x12&\\n\" +\n\t\"\\\"OPAQUE_CUSTOMER_STATUS_UNSPECIFIED\\x10\\x00\\x12!\\n\" +\n\t\"\\x1dOPAQUE_CUSTOMER_STATUS_ACTIVE\\x10\\x01\\x12#\\n\" +\n\t\"\\x1fOPAQUE_CUSTOMER_STATUS_INACTIVE\\x10\\x02\\x12$\\n\" +\n\t\" OPAQUE_CUSTOMER_STATUS_SUSPENDED\\x10\\x03\\x12\\\"\\n\" +\n\t\"\\x1eOPAQUE_CUSTOMER_STATUS_DELETED\\x10\\x04\\\"\\xfc\\x04\\n\" +\n\t\"\\x0fOpaqueOrderItem\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"product_id\\x18\\x01 \\x01(\\tR\\tproductId\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"variant_id\\x18\\x02 \\x01(\\tR\\tvariantId\\x12!\\n\" +\n\t\"\\fproduct_name\\x18\\x03 \\x01(\\tR\\vproductName\\x12\\x1a\\n\" +\n\t\"\\bquantity\\x18\\x04 \\x01(\\x05R\\bquantity\\x12Z\\n\" +\n\t\"\\n\" +\n\t\"unit_price\\x18\\x05 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\tunitPrice\\x12\\\\\\n\" +\n\t\"\\vtotal_price\\x18\\x06 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\n\" +\n\t\"totalPrice\\x12\\x88\\x01\\n\" +\n\t\"\\x13selected_attributes\\x18\\a \\x03(\\v2W.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem.SelectedAttributesEntryR\\x12selectedAttributes\\x12=\\n\" +\n\t\"\\fgift_wrapped\\x18\\b \\x01(\\v2\\x1a.google.protobuf.BoolValueR\\vgiftWrapped\\x12!\\n\" +\n\t\"\\fgift_message\\x18\\t \\x01(\\tR\\vgiftMessage\\x1aE\\n\" +\n\t\"\\x17SelectedAttributesEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\\"\\xb1\\x0f\\n\" +\n\t\"\\vOpaqueOrder\\x12\\x19\\n\" +\n\t\"\\border_id\\x18\\x01 \\x01(\\tR\\aorderId\\x12\\x1f\\n\" +\n\t\"\\vcustomer_id\\x18\\x02 \\x01(\\tR\\n\" +\n\t\"customerId\\x12U\\n\" +\n\t\"\\x05items\\x18\\x03 \\x03(\\v2?.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItemR\\x05items\\x12W\\n\" +\n\t\"\\bsubtotal\\x18\\x04 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\bsubtotal\\x12M\\n\" +\n\t\"\\x03tax\\x18\\x05 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\x03tax\\x12W\\n\" +\n\t\"\\bshipping\\x18\\x06 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\bshipping\\x12Q\\n\" +\n\t\"\\x05total\\x18\\a \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\x05total\\x12h\\n\" +\n\t\"\\x10shipping_address\\x18\\b \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueAddressR\\x0fshippingAddress\\x12f\\n\" +\n\t\"\\x0fbilling_address\\x18\\t \\x01(\\v2=.grpc.gateway.examples.internal.proto.examplepb.OpaqueAddressR\\x0ebillingAddress\\x12e\\n\" +\n\t\"\\x06status\\x18\\n\" +\n\t\" \\x01(\\x0e2M.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.OpaqueOrderStatusR\\x06status\\x12*\\n\" +\n\t\"\\x11payment_method_id\\x18\\v \\x01(\\tR\\x0fpaymentMethodId\\x12'\\n\" +\n\t\"\\x0ftracking_number\\x18\\f \\x01(\\tR\\x0etrackingNumber\\x129\\n\" +\n\t\"\\n\" +\n\t\"created_at\\x18\\r \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tcreatedAt\\x129\\n\" +\n\t\"\\n\" +\n\t\"updated_at\\x18\\x0e \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tupdatedAt\\x129\\n\" +\n\t\"\\n\" +\n\t\"shipped_at\\x18\\x0f \\x01(\\v2\\x1a.google.protobuf.TimestampR\\tshippedAt\\x12=\\n\" +\n\t\"\\fdelivered_at\\x18\\x10 \\x01(\\v2\\x1a.google.protobuf.TimestampR\\vdeliveredAt\\x12s\\n\" +\n\t\"\\rshipping_info\\x18\\x11 \\x01(\\v2N.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.OpaqueShippingInfoR\\fshippingInfo\\x12e\\n\" +\n\t\"\\bmetadata\\x18\\x12 \\x03(\\v2I.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.MetadataEntryR\\bmetadata\\x12!\\n\" +\n\t\"\\vcoupon_code\\x18\\x13 \\x01(\\tH\\x00R\\n\" +\n\t\"couponCode\\x12#\\n\" +\n\t\"\\fpromotion_id\\x18\\x14 \\x01(\\tH\\x00R\\vpromotionId\\x1a\\xbe\\x01\\n\" +\n\t\"\\x12OpaqueShippingInfo\\x12\\x18\\n\" +\n\t\"\\acarrier\\x18\\x01 \\x01(\\tR\\acarrier\\x12\\x16\\n\" +\n\t\"\\x06method\\x18\\x02 \\x01(\\tR\\x06method\\x12Q\\n\" +\n\t\"\\x17estimated_delivery_time\\x18\\x03 \\x01(\\v2\\x19.google.protobuf.DurationR\\x15estimatedDeliveryTime\\x12#\\n\" +\n\t\"\\rtracking_urls\\x18\\x04 \\x03(\\tR\\ftrackingUrls\\x1a;\\n\" +\n\t\"\\rMetadataEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\\"\\x86\\x02\\n\" +\n\t\"\\x11OpaqueOrderStatus\\x12#\\n\" +\n\t\"\\x1fOPAQUE_ORDER_STATUS_UNSPECIFIED\\x10\\x00\\x12\\x1f\\n\" +\n\t\"\\x1bOPAQUE_ORDER_STATUS_PENDING\\x10\\x01\\x12\\\"\\n\" +\n\t\"\\x1eOPAQUE_ORDER_STATUS_PROCESSING\\x10\\x02\\x12\\x1f\\n\" +\n\t\"\\x1bOPAQUE_ORDER_STATUS_SHIPPED\\x10\\x03\\x12!\\n\" +\n\t\"\\x1dOPAQUE_ORDER_STATUS_DELIVERED\\x10\\x04\\x12!\\n\" +\n\t\"\\x1dOPAQUE_ORDER_STATUS_CANCELLED\\x10\\x05\\x12 \\n\" +\n\t\"\\x1cOPAQUE_ORDER_STATUS_RETURNED\\x10\\x06B\\x12\\n\" +\n\t\"\\x10discount_applied\\\"\\xf8\\x05\\n\" +\n\t\"\\x12OpaqueOrderSummary\\x124\\n\" +\n\t\"\\x16total_orders_processed\\x18\\x01 \\x01(\\x05R\\x14totalOrdersProcessed\\x12+\\n\" +\n\t\"\\x11successful_orders\\x18\\x02 \\x01(\\x05R\\x10successfulOrders\\x12#\\n\" +\n\t\"\\rfailed_orders\\x18\\x03 \\x01(\\x05R\\ffailedOrders\\x12\\\\\\n\" +\n\t\"\\vtotal_value\\x18\\x04 \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\n\" +\n\t\"totalValue\\x12\\x1b\\n\" +\n\t\"\\torder_ids\\x18\\x05 \\x03(\\tR\\borderIds\\x12y\\n\" +\n\t\"\\rerror_details\\x18\\x06 \\x03(\\v2T.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.ErrorDetailsEntryR\\ferrorDetails\\x12C\\n\" +\n\t\"\\x0fprocessing_time\\x18\\a \\x01(\\v2\\x1a.google.protobuf.TimestampR\\x0eprocessingTime\\x12k\\n\" +\n\t\"\\x06errors\\x18\\b \\x03(\\v2S.grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.OpaqueOrderErrorR\\x06errors\\x1a?\\n\" +\n\t\"\\x11ErrorDetailsEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\x1aq\\n\" +\n\t\"\\x10OpaqueOrderError\\x12\\x19\\n\" +\n\t\"\\border_id\\x18\\x01 \\x01(\\tR\\aorderId\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"error_code\\x18\\x02 \\x01(\\tR\\terrorCode\\x12#\\n\" +\n\t\"\\rerror_message\\x18\\x03 \\x01(\\tR\\ferrorMessage\\\"\\x81\\b\\n\" +\n\t\"\\x13OpaqueCustomerEvent\\x12\\x1f\\n\" +\n\t\"\\vcustomer_id\\x18\\x01 \\x01(\\tR\\n\" +\n\t\"customerId\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"session_id\\x18\\x02 \\x01(\\tR\\tsessionId\\x12r\\n\" +\n\t\"\\n\" +\n\t\"event_type\\x18\\x03 \\x01(\\x0e2S.grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.OpaqueEventTypeR\\teventType\\x128\\n\" +\n\t\"\\ttimestamp\\x18\\x04 \\x01(\\v2\\x1a.google.protobuf.TimestampR\\ttimestamp\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"product_id\\x18\\x05 \\x01(\\tR\\tproductId\\x12\\x1f\\n\" +\n\t\"\\vcategory_id\\x18\\x06 \\x01(\\tR\\n\" +\n\t\"categoryId\\x12!\\n\" +\n\t\"\\fsearch_query\\x18\\a \\x01(\\tR\\vsearchQuery\\x12\\x19\\n\" +\n\t\"\\bpage_url\\x18\\b \\x01(\\tR\\apageUrl\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\t \\x01(\\x05R\\x05value\\x12q\\n\" +\n\t\"\\n\" +\n\t\"event_data\\x18\\n\" +\n\t\" \\x03(\\v2R.grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.EventDataEntryR\\teventData\\x12\\x1f\\n\" +\n\t\"\\vdevice_type\\x18\\v \\x01(\\tR\\n\" +\n\t\"deviceType\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"ip_address\\x18\\f \\x01(\\tR\\tipAddress\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"user_agent\\x18\\r \\x01(\\tR\\tuserAgent\\x1a<\\n\" +\n\t\"\\x0eEventDataEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\\"\\xd7\\x02\\n\" +\n\t\"\\x0fOpaqueEventType\\x12!\\n\" +\n\t\"\\x1dOPAQUE_EVENT_TYPE_UNSPECIFIED\\x10\\x00\\x12\\x1f\\n\" +\n\t\"\\x1bOPAQUE_EVENT_TYPE_PAGE_VIEW\\x10\\x01\\x12\\\"\\n\" +\n\t\"\\x1eOPAQUE_EVENT_TYPE_PRODUCT_VIEW\\x10\\x02\\x12!\\n\" +\n\t\"\\x1dOPAQUE_EVENT_TYPE_ADD_TO_CART\\x10\\x03\\x12&\\n\" +\n\t\"\\\"OPAQUE_EVENT_TYPE_REMOVE_FROM_CART\\x10\\x04\\x12$\\n\" +\n\t\" OPAQUE_EVENT_TYPE_CHECKOUT_START\\x10\\x05\\x12'\\n\" +\n\t\"#OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE\\x10\\x06\\x12\\x1c\\n\" +\n\t\"\\x18OPAQUE_EVENT_TYPE_SEARCH\\x10\\a\\x12$\\n\" +\n\t\" OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE\\x10\\b\\\"\\xa2\\t\\n\" +\n\t\"\\x14OpaqueActivityUpdate\\x12\\x1f\\n\" +\n\t\"\\vcustomer_id\\x18\\x01 \\x01(\\tR\\n\" +\n\t\"customerId\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"session_id\\x18\\x02 \\x01(\\tR\\tsessionId\\x12v\\n\" +\n\t\"\\vupdate_type\\x18\\x03 \\x01(\\x0e2U.grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.OpaqueUpdateTypeR\\n\" +\n\t\"updateType\\x128\\n\" +\n\t\"\\ttimestamp\\x18\\x04 \\x01(\\v2\\x1a.google.protobuf.TimestampR\\ttimestamp\\x12\\x18\\n\" +\n\t\"\\amessage\\x18\\x05 \\x01(\\tR\\amessage\\x12\\x1f\\n\" +\n\t\"\\vproduct_ids\\x18\\x06 \\x03(\\tR\\n\" +\n\t\"productIds\\x12^\\n\" +\n\t\"\\fprice_update\\x18\\a \\x01(\\v2;.grpc.gateway.examples.internal.proto.examplepb.OpaquePriceR\\vpriceUpdate\\x12'\\n\" +\n\t\"\\x0finventory_count\\x18\\b \\x01(\\x05R\\x0einventoryCount\\x12\\x1d\\n\" +\n\t\"\\n\" +\n\t\"offer_code\\x18\\t \\x01(\\tR\\tofferCode\\x12<\\n\" +\n\t\"\\foffer_expiry\\x18\\n\" +\n\t\" \\x01(\\v2\\x19.google.protobuf.DurationR\\vofferExpiry\\x12/\\n\" +\n\t\"\\x13discount_percentage\\x18\\v \\x01(\\x01R\\x12discountPercentage\\x12u\\n\" +\n\t\"\\vupdate_data\\x18\\f \\x03(\\v2T.grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.UpdateDataEntryR\\n\" +\n\t\"updateData\\x12\\x1a\\n\" +\n\t\"\\bpriority\\x18\\r \\x01(\\x05R\\bpriority\\x12#\\n\" +\n\t\"\\fredirect_url\\x18\\x0e \\x01(\\tH\\x00R\\vredirectUrl\\x12)\\n\" +\n\t\"\\x0fnotification_id\\x18\\x0f \\x01(\\tH\\x00R\\x0enotificationId\\x1a=\\n\" +\n\t\"\\x0fUpdateDataEntry\\x12\\x10\\n\" +\n\t\"\\x03key\\x18\\x01 \\x01(\\tR\\x03key\\x12\\x14\\n\" +\n\t\"\\x05value\\x18\\x02 \\x01(\\tR\\x05value:\\x028\\x01\\\"\\x94\\x02\\n\" +\n\t\"\\x10OpaqueUpdateType\\x12\\\"\\n\" +\n\t\"\\x1eOPAQUE_UPDATE_TYPE_UNSPECIFIED\\x10\\x00\\x12%\\n\" +\n\t\"!OPAQUE_UPDATE_TYPE_RECOMMENDATION\\x10\\x01\\x12#\\n\" +\n\t\"\\x1fOPAQUE_UPDATE_TYPE_NOTIFICATION\\x10\\x02\\x12\\x1c\\n\" +\n\t\"\\x18OPAQUE_UPDATE_TYPE_OFFER\\x10\\x03\\x12'\\n\" +\n\t\"#OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE\\x10\\x04\\x12#\\n\" +\n\t\"\\x1fOPAQUE_UPDATE_TYPE_PRICE_CHANGE\\x10\\x05\\x12$\\n\" +\n\t\" OPAQUE_UPDATE_TYPE_CART_REMINDER\\x10\\x06B\\r\\n\" +\n\t\"\\vaction_data2\\xf1\\x0f\\n\" +\n\t\"\\x16OpaqueEcommerceService\\x12\\xc8\\x01\\n\" +\n\t\"\\x10OpaqueGetProduct\\x12G.grpc.gateway.examples.internal.proto.examplepb.OpaqueGetProductRequest\\x1aH.grpc.gateway.examples.internal.proto.examplepb.OpaqueGetProductResponse\\\"!\\x82\\xd3\\xe4\\x93\\x02\\x1b\\x12\\x19/v1/products/{product_id}\\x12\\xd0\\x01\\n\" +\n\t\"\\x14OpaqueSearchProducts\\x12K.grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest\\x1aL.grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsResponse\\\"\\x1b\\x82\\xd3\\xe4\\x93\\x02\\x15\\x12\\x13/v1/products/search0\\x01\\x12\\xc7\\x01\\n\" +\n\t\"\\x13OpaqueCreateProduct\\x12J.grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductRequest\\x1aK.grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductResponse\\\"\\x17\\x82\\xd3\\xe4\\x93\\x02\\x11:\\x01*\\\"\\f/v1/products\\x12\\xe1\\x01\\n\" +\n\t\"\\x18OpaqueCreateProductField\\x12O.grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldRequest\\x1aP.grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldResponse\\\"\\\"\\x82\\xd3\\xe4\\x93\\x02\\x1c:\\aproduct\\\"\\x11/v1/productsField\\x12\\xcf\\x01\\n\" +\n\t\"\\x13OpaqueProcessOrders\\x12J.grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersRequest\\x1aK.grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersResponse\\\"\\x1d\\x82\\xd3\\xe4\\x93\\x02\\x17:\\x01*\\\"\\x12/v1/orders/process(\\x01\\x12\\xef\\x01\\n\" +\n\t\"\\x1cOpaqueStreamCustomerActivity\\x12S.grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityRequest\\x1aT.grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityResponse\\\" \\x82\\xd3\\xe4\\x93\\x02\\x1a:\\x01*\\\"\\x15/v1/customer/activity(\\x010\\x01\\x12\\xf8\\x01\\n\" +\n\t\"\\x13OpaqueUpdateProduct\\x12J.grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductRequest\\x1aK.grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductResponse\\\"H\\xdaA\\x13product,update_mask\\x82\\xd3\\xe4\\x93\\x02,:\\aproduct2!/v1/products/{product.product_id}\\x12\\x8b\\x02\\n\" +\n\t\"\\x12OpaqueSearchOrders\\x12I.grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersRequest\\x1aJ.grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersResponse\\\"^\\x82\\xd3\\xe4\\x93\\x02X\\x12V/v1/orders/search/{order.status}/shipAddressType/{order.shipping_address.address_type}\\x12\\xbd\\x01\\n\" +\n\t\"\\x0eOpaqueEchoNote\\x12E.grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteRequest\\x1aF.grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteResponse\\\"\\x1c\\x82\\xd3\\xe4\\x93\\x02\\x16:\\x04note\\\"\\x0e/v1/notes:echoBMZKgithub.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepbb\\beditionsp\\xe8\\a\"\n\nvar file_examples_internal_proto_examplepb_opaque_proto_enumTypes = make([]protoimpl.EnumInfo, 8)\nvar file_examples_internal_proto_examplepb_opaque_proto_msgTypes = make([]protoimpl.MessageInfo, 45)\nvar file_examples_internal_proto_examplepb_opaque_proto_goTypes = []any{\n\t(OpaqueSearchProductsRequest_OpaqueSortOrder)(0),      // 0: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.OpaqueSortOrder\n\t(OpaqueAddress_OpaqueAddressType)(0),                  // 1: grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.OpaqueAddressType\n\t(OpaqueProduct_OpaqueProductStatus)(0),                // 2: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductStatus\n\t(OpaqueProduct_OpaqueProductDimensions_OpaqueUnit)(0), // 3: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductDimensions.OpaqueUnit\n\t(OpaqueCustomer_OpaqueCustomerStatus)(0),              // 4: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaqueCustomerStatus\n\t(OpaqueOrder_OpaqueOrderStatus)(0),                    // 5: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.OpaqueOrderStatus\n\t(OpaqueCustomerEvent_OpaqueEventType)(0),              // 6: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.OpaqueEventType\n\t(OpaqueActivityUpdate_OpaqueUpdateType)(0),            // 7: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.OpaqueUpdateType\n\t(*OpaqueUpdateProductRequest)(nil),                    // 8: grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductRequest\n\t(*OpaqueUpdateProductResponse)(nil),                   // 9: grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductResponse\n\t(*OpaqueGetProductRequest)(nil),                       // 10: grpc.gateway.examples.internal.proto.examplepb.OpaqueGetProductRequest\n\t(*OpaqueGetProductResponse)(nil),                      // 11: grpc.gateway.examples.internal.proto.examplepb.OpaqueGetProductResponse\n\t(*OpaqueSearchProductsRequest)(nil),                   // 12: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest\n\t(*OpaqueSearchProductsResponse)(nil),                  // 13: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsResponse\n\t(*OpaqueCreateProductRequest)(nil),                    // 14: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductRequest\n\t(*OpaqueCreateProductResponse)(nil),                   // 15: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductResponse\n\t(*OpaqueCreateProductFieldRequest)(nil),               // 16: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldRequest\n\t(*OpaqueCreateProductFieldResponse)(nil),              // 17: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldResponse\n\t(*OpaqueProcessOrdersRequest)(nil),                    // 18: grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersRequest\n\t(*OpaqueProcessOrdersResponse)(nil),                   // 19: grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersResponse\n\t(*OpaqueStreamCustomerActivityRequest)(nil),           // 20: grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityRequest\n\t(*OpaqueStreamCustomerActivityResponse)(nil),          // 21: grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityResponse\n\t(*OpaqueSearchOrdersRequest)(nil),                     // 22: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersRequest\n\t(*OpaqueSearchOrdersResponse)(nil),                    // 23: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersResponse\n\t(*OpaqueEchoNoteRequest)(nil),                         // 24: grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteRequest\n\t(*OpaqueEchoNoteResponse)(nil),                        // 25: grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteResponse\n\t(*OpaqueAddress)(nil),                                 // 26: grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress\n\t(*OpaquePrice)(nil),                                   // 27: grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t(*OpaqueProductCategory)(nil),                         // 28: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategory\n\t(*OpaqueProductVariant)(nil),                          // 29: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant\n\t(*OpaqueProduct)(nil),                                 // 30: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t(*OpaqueCustomer)(nil),                                // 31: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer\n\t(*OpaqueOrderItem)(nil),                               // 32: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem\n\t(*OpaqueOrder)(nil),                                   // 33: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder\n\t(*OpaqueOrderSummary)(nil),                            // 34: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary\n\t(*OpaqueCustomerEvent)(nil),                           // 35: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent\n\t(*OpaqueActivityUpdate)(nil),                          // 36: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate\n\tnil,                                                   // 37: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.FiltersEntry\n\tnil,                                                   // 38: grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.MetadataEntry\n\tnil,                                                   // 39: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant.AttributesEntry\n\tnil,                                                   // 40: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.MetadataEntry\n\tnil,                                                   // 41: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.RegionalPricesEntry\n\t(*OpaqueProduct_OpaqueProductDimensions)(nil),         // 42: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductDimensions\n\t(*OpaqueCustomer_OpaqueLoyaltyInfo)(nil),              // 43: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaqueLoyaltyInfo\n\tnil,                                                   // 44: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.PreferencesEntry\n\t(*OpaqueCustomer_OpaquePaymentMethod)(nil),            // 45: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaquePaymentMethod\n\tnil,                                    // 46: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem.SelectedAttributesEntry\n\t(*OpaqueOrder_OpaqueShippingInfo)(nil), // 47: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.OpaqueShippingInfo\n\tnil,                                    // 48: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.MetadataEntry\n\tnil,                                    // 49: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.ErrorDetailsEntry\n\t(*OpaqueOrderSummary_OpaqueOrderError)(nil), // 50: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.OpaqueOrderError\n\tnil,                            // 51: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.EventDataEntry\n\tnil,                            // 52: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.UpdateDataEntry\n\t(*fieldmaskpb.FieldMask)(nil),  // 53: google.protobuf.FieldMask\n\t(*sub.StringMessage)(nil),      // 54: grpc.gateway.examples.internal.proto.sub.StringMessage\n\t(*wrapperspb.BoolValue)(nil),   // 55: google.protobuf.BoolValue\n\t(*wrapperspb.DoubleValue)(nil), // 56: google.protobuf.DoubleValue\n\t(*timestamppb.Timestamp)(nil),  // 57: google.protobuf.Timestamp\n\t(*durationpb.Duration)(nil),    // 58: google.protobuf.Duration\n}\nvar file_examples_internal_proto_examplepb_opaque_proto_depIdxs = []int32{\n\t30, // 0: grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductRequest.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t53, // 1: grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductRequest.update_mask:type_name -> google.protobuf.FieldMask\n\t30, // 2: grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductResponse.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t30, // 3: grpc.gateway.examples.internal.proto.examplepb.OpaqueGetProductResponse.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t27, // 4: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.min_price:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t27, // 5: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.max_price:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t0,  // 6: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.sort_by:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.OpaqueSortOrder\n\t53, // 7: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.field_mask:type_name -> google.protobuf.FieldMask\n\t37, // 8: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.filters:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest.FiltersEntry\n\t30, // 9: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsResponse.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t30, // 10: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductRequest.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t30, // 11: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductResponse.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t30, // 12: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldRequest.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t30, // 13: grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldResponse.product:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct\n\t33, // 14: grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersRequest.order:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder\n\t34, // 15: grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersResponse.summary:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary\n\t35, // 16: grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityRequest.event:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent\n\t36, // 17: grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityResponse.event:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate\n\t33, // 18: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersRequest.order:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder\n\t33, // 19: grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersResponse.orders:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder\n\t54, // 20: grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteRequest.note:type_name -> grpc.gateway.examples.internal.proto.sub.StringMessage\n\t54, // 21: grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteResponse.note:type_name -> grpc.gateway.examples.internal.proto.sub.StringMessage\n\t1,  // 22: grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.address_type:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.OpaqueAddressType\n\t55, // 23: grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.is_default:type_name -> google.protobuf.BoolValue\n\t38, // 24: grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.metadata:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress.MetadataEntry\n\t56, // 25: grpc.gateway.examples.internal.proto.examplepb.OpaquePrice.original_amount:type_name -> google.protobuf.DoubleValue\n\t57, // 26: grpc.gateway.examples.internal.proto.examplepb.OpaquePrice.price_valid_until:type_name -> google.protobuf.Timestamp\n\t28, // 27: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategory.parent_category:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategory\n\t57, // 28: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategory.created_at:type_name -> google.protobuf.Timestamp\n\t57, // 29: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategory.updated_at:type_name -> google.protobuf.Timestamp\n\t27, // 30: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant.price:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t39, // 31: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant.attributes:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant.AttributesEntry\n\t55, // 32: grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant.is_available:type_name -> google.protobuf.BoolValue\n\t27, // 33: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.base_price:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t28, // 34: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.category:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProductCategory\n\t29, // 35: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.variants:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProductVariant\n\t55, // 36: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.is_featured:type_name -> google.protobuf.BoolValue\n\t57, // 37: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.created_at:type_name -> google.protobuf.Timestamp\n\t57, // 38: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.updated_at:type_name -> google.protobuf.Timestamp\n\t58, // 39: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.average_shipping_time:type_name -> google.protobuf.Duration\n\t2,  // 40: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductStatus\n\t40, // 41: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.metadata:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.MetadataEntry\n\t41, // 42: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.regional_prices:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.RegionalPricesEntry\n\t42, // 43: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.dimensions:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductDimensions\n\t26, // 44: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.addresses:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress\n\t57, // 45: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.created_at:type_name -> google.protobuf.Timestamp\n\t57, // 46: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.last_login:type_name -> google.protobuf.Timestamp\n\t4,  // 47: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaqueCustomerStatus\n\t43, // 48: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.loyalty_info:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaqueLoyaltyInfo\n\t44, // 49: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.preferences:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.PreferencesEntry\n\t45, // 50: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.payment_methods:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaquePaymentMethod\n\t27, // 51: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem.unit_price:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t27, // 52: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem.total_price:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t46, // 53: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem.selected_attributes:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem.SelectedAttributesEntry\n\t55, // 54: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem.gift_wrapped:type_name -> google.protobuf.BoolValue\n\t32, // 55: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.items:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderItem\n\t27, // 56: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.subtotal:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t27, // 57: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.tax:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t27, // 58: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.shipping:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t27, // 59: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.total:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t26, // 60: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.shipping_address:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress\n\t26, // 61: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.billing_address:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueAddress\n\t5,  // 62: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.OpaqueOrderStatus\n\t57, // 63: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.created_at:type_name -> google.protobuf.Timestamp\n\t57, // 64: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.updated_at:type_name -> google.protobuf.Timestamp\n\t57, // 65: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.shipped_at:type_name -> google.protobuf.Timestamp\n\t57, // 66: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.delivered_at:type_name -> google.protobuf.Timestamp\n\t47, // 67: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.shipping_info:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.OpaqueShippingInfo\n\t48, // 68: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.metadata:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.MetadataEntry\n\t27, // 69: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.total_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t49, // 70: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.error_details:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.ErrorDetailsEntry\n\t57, // 71: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.processing_time:type_name -> google.protobuf.Timestamp\n\t50, // 72: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.errors:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueOrderSummary.OpaqueOrderError\n\t6,  // 73: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.event_type:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.OpaqueEventType\n\t57, // 74: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.timestamp:type_name -> google.protobuf.Timestamp\n\t51, // 75: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.event_data:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomerEvent.EventDataEntry\n\t7,  // 76: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.update_type:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.OpaqueUpdateType\n\t57, // 77: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.timestamp:type_name -> google.protobuf.Timestamp\n\t27, // 78: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.price_update:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t58, // 79: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.offer_expiry:type_name -> google.protobuf.Duration\n\t52, // 80: grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.update_data:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueActivityUpdate.UpdateDataEntry\n\t27, // 81: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.RegionalPricesEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaquePrice\n\t3,  // 82: grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductDimensions.unit:type_name -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProduct.OpaqueProductDimensions.OpaqueUnit\n\t57, // 83: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaqueLoyaltyInfo.tier_expiry:type_name -> google.protobuf.Timestamp\n\t57, // 84: grpc.gateway.examples.internal.proto.examplepb.OpaqueCustomer.OpaquePaymentMethod.expires_at:type_name -> google.protobuf.Timestamp\n\t58, // 85: grpc.gateway.examples.internal.proto.examplepb.OpaqueOrder.OpaqueShippingInfo.estimated_delivery_time:type_name -> google.protobuf.Duration\n\t10, // 86: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueGetProduct:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueGetProductRequest\n\t12, // 87: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueSearchProducts:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsRequest\n\t14, // 88: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueCreateProduct:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductRequest\n\t16, // 89: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueCreateProductField:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldRequest\n\t18, // 90: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueProcessOrders:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersRequest\n\t20, // 91: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueStreamCustomerActivity:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityRequest\n\t8,  // 92: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueUpdateProduct:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductRequest\n\t22, // 93: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueSearchOrders:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersRequest\n\t24, // 94: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueEchoNote:input_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteRequest\n\t11, // 95: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueGetProduct:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueGetProductResponse\n\t13, // 96: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueSearchProducts:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchProductsResponse\n\t15, // 97: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueCreateProduct:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductResponse\n\t17, // 98: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueCreateProductField:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueCreateProductFieldResponse\n\t19, // 99: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueProcessOrders:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueProcessOrdersResponse\n\t21, // 100: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueStreamCustomerActivity:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueStreamCustomerActivityResponse\n\t9,  // 101: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueUpdateProduct:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueUpdateProductResponse\n\t23, // 102: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueSearchOrders:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueSearchOrdersResponse\n\t25, // 103: grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService.OpaqueEchoNote:output_type -> grpc.gateway.examples.internal.proto.examplepb.OpaqueEchoNoteResponse\n\t95, // [95:104] is the sub-list for method output_type\n\t86, // [86:95] is the sub-list for method input_type\n\t86, // [86:86] is the sub-list for extension type_name\n\t86, // [86:86] is the sub-list for extension extendee\n\t0,  // [0:86] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_opaque_proto_init() }\nfunc file_examples_internal_proto_examplepb_opaque_proto_init() {\n\tif File_examples_internal_proto_examplepb_opaque_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_examplepb_opaque_proto_msgTypes[21].OneofWrappers = []any{\n\t\t(*opaqueProductVariant_PercentageOff)(nil),\n\t\t(*opaqueProductVariant_FixedAmountOff)(nil),\n\t}\n\tfile_examples_internal_proto_examplepb_opaque_proto_msgTypes[22].OneofWrappers = []any{\n\t\t(*opaqueProduct_TaxPercentage)(nil),\n\t\t(*opaqueProduct_TaxExempt)(nil),\n\t}\n\tfile_examples_internal_proto_examplepb_opaque_proto_msgTypes[25].OneofWrappers = []any{\n\t\t(*opaqueOrder_CouponCode)(nil),\n\t\t(*opaqueOrder_PromotionId)(nil),\n\t}\n\tfile_examples_internal_proto_examplepb_opaque_proto_msgTypes[28].OneofWrappers = []any{\n\t\t(*opaqueActivityUpdate_RedirectUrl)(nil),\n\t\t(*opaqueActivityUpdate_NotificationId)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: unsafe.Slice(unsafe.StringData(file_examples_internal_proto_examplepb_opaque_proto_rawDesc), len(file_examples_internal_proto_examplepb_opaque_proto_rawDesc)),\n\t\t\tNumEnums:      8,\n\t\t\tNumMessages:   45,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_opaque_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_opaque_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_examplepb_opaque_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_opaque_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_opaque_proto = out.File\n\tfile_examples_internal_proto_examplepb_opaque_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_opaque_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/opaque.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/opaque.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_OpaqueEcommerceService_OpaqueGetProduct_0 = &utilities.DoubleArray{Encoding: map[string]int{\"product_id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_OpaqueEcommerceService_OpaqueGetProduct_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueGetProductRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"product_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"product_id\")\n\t}\n\tconvertedProductId, err := runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"product_id\", err)\n\t}\n\tprotoReq.SetProductId(convertedProductId)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueGetProduct_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.OpaqueGetProduct(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_OpaqueEcommerceService_OpaqueGetProduct_0(ctx context.Context, marshaler runtime.Marshaler, server OpaqueEcommerceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueGetProductRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"product_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"product_id\")\n\t}\n\tconvertedProductId, err := runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"product_id\", err)\n\t}\n\tprotoReq.SetProductId(convertedProductId)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueGetProduct_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.OpaqueGetProduct(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_OpaqueEcommerceService_OpaqueSearchProducts_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_OpaqueEcommerceService_OpaqueSearchProducts_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (OpaqueEcommerceService_OpaqueSearchProductsClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueSearchProductsRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueSearchProducts_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.OpaqueSearchProducts(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_OpaqueEcommerceService_OpaqueCreateProduct_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueCreateProductRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tvar bodyData OpaqueCreateProductRequest\n\tif err := marshaler.NewDecoder(req.Body).Decode(&bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tproto.Merge(&protoReq, &bodyData)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.OpaqueCreateProduct(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_OpaqueEcommerceService_OpaqueCreateProduct_0(ctx context.Context, marshaler runtime.Marshaler, server OpaqueEcommerceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueCreateProductRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tvar bodyData OpaqueCreateProductRequest\n\tif err := marshaler.NewDecoder(req.Body).Decode(&bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tproto.Merge(&protoReq, &bodyData)\n\tmsg, err := server.OpaqueCreateProduct(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_OpaqueEcommerceService_OpaqueCreateProductField_0 = &utilities.DoubleArray{Encoding: map[string]int{\"product\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_OpaqueEcommerceService_OpaqueCreateProductField_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueCreateProductFieldRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tbodyData := &OpaqueProduct{}\n\tif err := marshaler.NewDecoder(req.Body).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.SetProduct(bodyData)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueCreateProductField_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.OpaqueCreateProductField(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_OpaqueEcommerceService_OpaqueCreateProductField_0(ctx context.Context, marshaler runtime.Marshaler, server OpaqueEcommerceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueCreateProductFieldRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tbodyData := &OpaqueProduct{}\n\tif err := marshaler.NewDecoder(req.Body).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.SetProduct(bodyData)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueCreateProductField_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.OpaqueCreateProductField(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_OpaqueEcommerceService_OpaqueProcessOrders_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.OpaqueProcessOrders(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\tfor {\n\t\tvar protoReq OpaqueProcessOrdersRequest\n\t\terr = dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t}\n\t\tif err = stream.Send(&protoReq); err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn nil, metadata, err\n\t\t}\n\t}\n\tif err := stream.CloseSend(); err != nil {\n\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\tmsg, err := stream.CloseAndRecv()\n\tmetadata.TrailerMD = stream.Trailer()\n\treturn msg, metadata, err\n}\n\nfunc request_OpaqueEcommerceService_OpaqueStreamCustomerActivity_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (OpaqueEcommerceService_OpaqueStreamCustomerActivityClient, runtime.ServerMetadata, error) {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.OpaqueStreamCustomerActivity(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\thandleSend := func() error {\n\t\tvar protoReq OpaqueStreamCustomerActivityRequest\n\t\terr := dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn err\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn status.Errorf(codes.InvalidArgument, \"Failed to decode request: %v\", err)\n\t\t}\n\t\tif err := stream.Send(&protoReq); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\tgo func() {\n\t\tfor {\n\t\t\tif err := handleSend(); err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif err := stream.CloseSend(); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\t}\n\t}()\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_OpaqueEcommerceService_OpaqueUpdateProduct_0 = &utilities.DoubleArray{Encoding: map[string]int{\"product\": 0, \"product_id\": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}}\n\nfunc request_OpaqueEcommerceService_OpaqueUpdateProduct_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueUpdateProductRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tbodyData := &OpaqueProduct{}\n\tif err := marshaler.NewDecoder(newReader()).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.SetProduct(bodyData)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif !protoReq.HasUpdateMask() || len(protoReq.GetUpdateMask().GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.GetProduct()); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.SetUpdateMask(fieldMask)\n\t\t}\n\t}\n\tval, ok := pathParams[\"product.product_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"product.product_id\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"product.product_id\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"product.product_id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueUpdateProduct_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.OpaqueUpdateProduct(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_OpaqueEcommerceService_OpaqueUpdateProduct_0(ctx context.Context, marshaler runtime.Marshaler, server OpaqueEcommerceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueUpdateProductRequest\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\tbodyData := &OpaqueProduct{}\n\tif err := marshaler.NewDecoder(newReader()).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.SetProduct(bodyData)\n\tif !protoReq.HasUpdateMask() || len(protoReq.GetUpdateMask().GetPaths()) == 0 {\n\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.GetProduct()); err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t} else {\n\t\t\tprotoReq.SetUpdateMask(fieldMask)\n\t\t}\n\t}\n\tval, ok := pathParams[\"product.product_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"product.product_id\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"product.product_id\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"product.product_id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueUpdateProduct_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.OpaqueUpdateProduct(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_OpaqueEcommerceService_OpaqueSearchOrders_0 = &utilities.DoubleArray{Encoding: map[string]int{\"order\": 0, \"status\": 1, \"shipping_address\": 2, \"address_type\": 3}, Base: []int{1, 1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 4, 3, 5}}\n\nfunc request_OpaqueEcommerceService_OpaqueSearchOrders_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueSearchOrdersRequest\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"order.status\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"order.status\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"order.status\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"order.status\", err)\n\t}\n\te, err = runtime.Enum(val, OpaqueOrder_OpaqueOrderStatus_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", \"order.status\", err)\n\t}\n\tprotoReq.GetOrder().SetStatus(OpaqueOrder_OpaqueOrderStatus(e))\n\tval, ok = pathParams[\"order.shipping_address.address_type\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"order.shipping_address.address_type\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"order.shipping_address.address_type\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"order.shipping_address.address_type\", err)\n\t}\n\te, err = runtime.Enum(val, OpaqueAddress_OpaqueAddressType_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", \"order.shipping_address.address_type\", err)\n\t}\n\tprotoReq.GetOrder().GetShippingAddress().SetAddressType(OpaqueAddress_OpaqueAddressType(e))\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueSearchOrders_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.OpaqueSearchOrders(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_OpaqueEcommerceService_OpaqueSearchOrders_0(ctx context.Context, marshaler runtime.Marshaler, server OpaqueEcommerceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueSearchOrdersRequest\n\t\tmetadata runtime.ServerMetadata\n\t\te        int32\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"order.status\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"order.status\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"order.status\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"order.status\", err)\n\t}\n\te, err = runtime.Enum(val, OpaqueOrder_OpaqueOrderStatus_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", \"order.status\", err)\n\t}\n\tprotoReq.GetOrder().SetStatus(OpaqueOrder_OpaqueOrderStatus(e))\n\tval, ok = pathParams[\"order.shipping_address.address_type\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"order.shipping_address.address_type\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"order.shipping_address.address_type\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"order.shipping_address.address_type\", err)\n\t}\n\te, err = runtime.Enum(val, OpaqueAddress_OpaqueAddressType_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", \"order.shipping_address.address_type\", err)\n\t}\n\tprotoReq.GetOrder().GetShippingAddress().SetAddressType(OpaqueAddress_OpaqueAddressType(e))\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpaqueEcommerceService_OpaqueSearchOrders_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.OpaqueSearchOrders(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_OpaqueEcommerceService_OpaqueEchoNote_0(ctx context.Context, marshaler runtime.Marshaler, client OpaqueEcommerceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueEchoNoteRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tbodyData := &sub.StringMessage{}\n\tif err := marshaler.NewDecoder(req.Body).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.SetNote(bodyData)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.OpaqueEchoNote(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_OpaqueEcommerceService_OpaqueEchoNote_0(ctx context.Context, marshaler runtime.Marshaler, server OpaqueEcommerceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OpaqueEchoNoteRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tbodyData := &sub.StringMessage{}\n\tif err := marshaler.NewDecoder(req.Body).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.SetNote(bodyData)\n\tmsg, err := server.OpaqueEchoNote(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterOpaqueEcommerceServiceHandlerServer registers the http handlers for service OpaqueEcommerceService to \"mux\".\n// UnaryRPC     :call OpaqueEcommerceServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpaqueEcommerceServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterOpaqueEcommerceServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpaqueEcommerceServiceServer) error {\n\tmux.Handle(http.MethodGet, pattern_OpaqueEcommerceService_OpaqueGetProduct_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueGetProduct\", runtime.WithHTTPPathPattern(\"/v1/products/{product_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_OpaqueEcommerceService_OpaqueGetProduct_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueGetProduct_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(http.MethodGet, pattern_OpaqueEcommerceService_OpaqueSearchProducts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueCreateProduct_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueCreateProduct\", runtime.WithHTTPPathPattern(\"/v1/products\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_OpaqueEcommerceService_OpaqueCreateProduct_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueCreateProduct_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueCreateProductField_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueCreateProductField\", runtime.WithHTTPPathPattern(\"/v1/productsField\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_OpaqueEcommerceService_OpaqueCreateProductField_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueCreateProductField_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueProcessOrders_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueStreamCustomerActivity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\tmux.Handle(http.MethodPatch, pattern_OpaqueEcommerceService_OpaqueUpdateProduct_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueUpdateProduct\", runtime.WithHTTPPathPattern(\"/v1/products/{product.product_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_OpaqueEcommerceService_OpaqueUpdateProduct_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueUpdateProduct_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_OpaqueEcommerceService_OpaqueSearchOrders_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueSearchOrders\", runtime.WithHTTPPathPattern(\"/v1/orders/search/{order.status}/shipAddressType/{order.shipping_address.address_type}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_OpaqueEcommerceService_OpaqueSearchOrders_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueSearchOrders_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueEchoNote_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueEchoNote\", runtime.WithHTTPPathPattern(\"/v1/notes:echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_OpaqueEcommerceService_OpaqueEchoNote_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueEchoNote_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterOpaqueEcommerceServiceHandlerFromEndpoint is same as RegisterOpaqueEcommerceServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterOpaqueEcommerceServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterOpaqueEcommerceServiceHandler(ctx, mux, conn)\n}\n\n// RegisterOpaqueEcommerceServiceHandler registers the http handlers for service OpaqueEcommerceService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterOpaqueEcommerceServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterOpaqueEcommerceServiceHandlerClient(ctx, mux, NewOpaqueEcommerceServiceClient(conn))\n}\n\n// RegisterOpaqueEcommerceServiceHandlerClient registers the http handlers for service OpaqueEcommerceService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"OpaqueEcommerceServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"OpaqueEcommerceServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"OpaqueEcommerceServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterOpaqueEcommerceServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client OpaqueEcommerceServiceClient) error {\n\tmux.Handle(http.MethodGet, pattern_OpaqueEcommerceService_OpaqueGetProduct_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueGetProduct\", runtime.WithHTTPPathPattern(\"/v1/products/{product_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueGetProduct_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueGetProduct_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_OpaqueEcommerceService_OpaqueSearchProducts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueSearchProducts\", runtime.WithHTTPPathPattern(\"/v1/products/search\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueSearchProducts_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueSearchProducts_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueCreateProduct_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueCreateProduct\", runtime.WithHTTPPathPattern(\"/v1/products\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueCreateProduct_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueCreateProduct_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueCreateProductField_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueCreateProductField\", runtime.WithHTTPPathPattern(\"/v1/productsField\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueCreateProductField_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueCreateProductField_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueProcessOrders_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueProcessOrders\", runtime.WithHTTPPathPattern(\"/v1/orders/process\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueProcessOrders_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueProcessOrders_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueStreamCustomerActivity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueStreamCustomerActivity\", runtime.WithHTTPPathPattern(\"/v1/customer/activity\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueStreamCustomerActivity_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueStreamCustomerActivity_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPatch, pattern_OpaqueEcommerceService_OpaqueUpdateProduct_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueUpdateProduct\", runtime.WithHTTPPathPattern(\"/v1/products/{product.product_id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueUpdateProduct_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueUpdateProduct_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_OpaqueEcommerceService_OpaqueSearchOrders_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueSearchOrders\", runtime.WithHTTPPathPattern(\"/v1/orders/search/{order.status}/shipAddressType/{order.shipping_address.address_type}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueSearchOrders_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueSearchOrders_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_OpaqueEcommerceService_OpaqueEchoNote_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueEchoNote\", runtime.WithHTTPPathPattern(\"/v1/notes:echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_OpaqueEcommerceService_OpaqueEchoNote_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_OpaqueEcommerceService_OpaqueEchoNote_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_OpaqueEcommerceService_OpaqueGetProduct_0             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"v1\", \"products\", \"product_id\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueSearchProducts_0         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"products\", \"search\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueCreateProduct_0          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"products\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueCreateProductField_0     = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"productsField\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueProcessOrders_0          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"orders\", \"process\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueStreamCustomerActivity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"customer\", \"activity\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueUpdateProduct_0          = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"v1\", \"products\", \"product.product_id\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueSearchOrders_0           = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{\"v1\", \"orders\", \"search\", \"order.status\", \"shipAddressType\", \"order.shipping_address.address_type\"}, \"\"))\n\tpattern_OpaqueEcommerceService_OpaqueEchoNote_0               = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"notes\"}, \"echo\"))\n)\n\nvar (\n\tforward_OpaqueEcommerceService_OpaqueGetProduct_0             = runtime.ForwardResponseMessage\n\tforward_OpaqueEcommerceService_OpaqueSearchProducts_0         = runtime.ForwardResponseStream\n\tforward_OpaqueEcommerceService_OpaqueCreateProduct_0          = runtime.ForwardResponseMessage\n\tforward_OpaqueEcommerceService_OpaqueCreateProductField_0     = runtime.ForwardResponseMessage\n\tforward_OpaqueEcommerceService_OpaqueProcessOrders_0          = runtime.ForwardResponseMessage\n\tforward_OpaqueEcommerceService_OpaqueStreamCustomerActivity_0 = runtime.ForwardResponseStream\n\tforward_OpaqueEcommerceService_OpaqueUpdateProduct_0          = runtime.ForwardResponseMessage\n\tforward_OpaqueEcommerceService_OpaqueSearchOrders_0           = runtime.ForwardResponseMessage\n\tforward_OpaqueEcommerceService_OpaqueEchoNote_0               = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/opaque.proto",
    "content": "edition = \"2023\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"examples/internal/proto/sub/message.proto\";\nimport \"google/api/annotations.proto\";\nimport \"google/api/client.proto\";\nimport \"google/protobuf/duration.proto\";\nimport \"google/protobuf/field_mask.proto\";\nimport \"google/protobuf/timestamp.proto\";\nimport \"google/protobuf/wrappers.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// OpaqueEcommerceService provides a comprehensive e-commerce API with various request/response patterns\nservice OpaqueEcommerceService {\n  // OpaqueGetProduct - Unary request, unary response\n  // Retrieves detailed information about a specific product\n  rpc OpaqueGetProduct(OpaqueGetProductRequest) returns (OpaqueGetProductResponse) {\n    option (google.api.http) = {get: \"/v1/products/{product_id}\"};\n  }\n\n  // OpaqueSearchProducts - Unary request, stream response\n  // Searches for products based on criteria and streams results back\n  rpc OpaqueSearchProducts(OpaqueSearchProductsRequest) returns (stream OpaqueSearchProductsResponse) {\n    option (google.api.http) = {get: \"/v1/products/search\"};\n  }\n\n  // OpaqueCreateProduct - Unary request with body field, unary response\n  // Creates a new product with the product details in the body\n  rpc OpaqueCreateProduct(OpaqueCreateProductRequest) returns (OpaqueCreateProductResponse) {\n    option (google.api.http) = {\n      post: \"/v1/products\"\n      body: \"*\"\n    };\n  }\n\n  // OpaqueCreateProductField - same as above, but with body field mapping.\n  rpc OpaqueCreateProductField(OpaqueCreateProductFieldRequest) returns (OpaqueCreateProductFieldResponse) {\n    option (google.api.http) = {\n      post: \"/v1/productsField\"\n      body: \"product\"\n    };\n  }\n\n  // OpaqueProcessOrders - Stream request, unary response\n  // Processes multiple orders in a batch and returns a summary\n  rpc OpaqueProcessOrders(stream OpaqueProcessOrdersRequest) returns (OpaqueProcessOrdersResponse) {\n    option (google.api.http) = {\n      post: \"/v1/orders/process\"\n      body: \"*\"\n    };\n  }\n\n  // OpaqueStreamCustomerActivity - Stream request, stream response\n  // Bidirectional streaming for real-time customer activity monitoring\n  rpc OpaqueStreamCustomerActivity(stream OpaqueStreamCustomerActivityRequest) returns (stream OpaqueStreamCustomerActivityResponse) {\n    option (google.api.http) = {\n      post: \"/v1/customer/activity\"\n      body: \"*\"\n    };\n  }\n\n  // OpaqueUpdateProduct - PATCH request with FieldMask and body field mapping\n  // to reproduce the compilation issue with bodyData as a value type.\n  rpc OpaqueUpdateProduct(OpaqueUpdateProductRequest) returns (OpaqueUpdateProductResponse) {\n    option (google.api.http) = {\n      patch: \"/v1/products/{product.product_id}\"\n      body: \"product\"\n    };\n    option (google.api.method_signature) = \"product,update_mask\";\n  }\n\n  // OpaqueSearchOrders - Unary request, unary response\n  // Uses enum params (both top level and nested) to populate fields to test opaque get chain\n  rpc OpaqueSearchOrders(OpaqueSearchOrdersRequest) returns (OpaqueSearchOrdersResponse) {\n    option (google.api.http) = {get: \"/v1/orders/search/{order.status}/shipAddressType/{order.shipping_address.address_type}\"};\n  }\n\n  // OpaqueEchoNote - Unary request with nested body field from another package.\n  // Exercises the opaque body import path by referencing grpc.gateway.examples.internal.proto.sub.StringMessage.\n  rpc OpaqueEchoNote(OpaqueEchoNoteRequest) returns (OpaqueEchoNoteResponse) {\n    option (google.api.http) = {\n      post: \"/v1/notes:echo\"\n      body: \"note\"\n    };\n  }\n}\n\n// OpaqueUpdateProductRequest represents a request to update a product\nmessage OpaqueUpdateProductRequest {\n  OpaqueProduct product = 1;\n  google.protobuf.FieldMask update_mask = 2;\n}\n\n// OpaqueUpdateProductResponse represents the response for OpaqueUpdateProduct\nmessage OpaqueUpdateProductResponse {\n  OpaqueProduct product = 1;\n}\n\n// OpaqueGetProductRequest represents a request for product information\nmessage OpaqueGetProductRequest {\n  string product_id = 1;\n  bool include_variants = 2;\n  bool include_related_products = 3;\n  string language_code = 4;\n  string currency_code = 5;\n}\n\n// OpaqueGetProductResponse represents a response with product information\nmessage OpaqueGetProductResponse {\n  OpaqueProduct product = 1;\n}\n\n// OpaqueSearchProductsRequest represents a product search request\nmessage OpaqueSearchProductsRequest {\n  string query = 1;\n  repeated string category_ids = 2;\n  repeated string brands = 3;\n  OpaquePrice min_price = 4;\n  OpaquePrice max_price = 5;\n  repeated string tags = 6;\n\n  enum OpaqueSortOrder {\n    OPAQUE_SORT_ORDER_UNSPECIFIED = 0;\n    OPAQUE_SORT_ORDER_RELEVANCE = 1;\n    OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH = 2;\n    OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW = 3;\n    OPAQUE_SORT_ORDER_NEWEST_FIRST = 4;\n    OPAQUE_SORT_ORDER_RATING = 5;\n    OPAQUE_SORT_ORDER_POPULARITY = 6;\n  }\n  OpaqueSortOrder sort_by = 7;\n\n  int32 page = 8;\n  int32 page_size = 9;\n  string language_code = 10;\n  string currency_code = 11;\n  google.protobuf.FieldMask field_mask = 12;\n  map<string, string> filters = 13;\n}\n\n// OpaqueSearchProductsResponse represents a single product in search results\nmessage OpaqueSearchProductsResponse {\n  OpaqueProduct product = 1;\n}\n\n// OpaqueCreateProductRequest represents a request to create a product\nmessage OpaqueCreateProductRequest {\n  string product_id = 1;\n  OpaqueProduct product = 2;\n}\n\n// OpaqueCreateProductResponse represents the created product\nmessage OpaqueCreateProductResponse {\n  OpaqueProduct product = 1;\n}\n\n// OpaqueCreateProductFieldRequest represents a request to create a product\nmessage OpaqueCreateProductFieldRequest {\n  string product_id = 1;\n  OpaqueProduct product = 2;\n}\n\n// OpaqueCreateProductFieldResponse represents the created product\nmessage OpaqueCreateProductFieldResponse {\n  OpaqueProduct product = 1;\n}\n\n// OpaqueProcessOrdersRequest represents a request to process order\nmessage OpaqueProcessOrdersRequest {\n  OpaqueOrder order = 1;\n}\n\n// OpaqueProcessOrdersResponse represents orders processing result\nmessage OpaqueProcessOrdersResponse {\n  OpaqueOrderSummary summary = 1;\n}\n\n// OpaqueStreamCustomerActivityRequest represents a report of user activity\nmessage OpaqueStreamCustomerActivityRequest {\n  OpaqueCustomerEvent event = 1;\n}\n\n// OpaqueStreamCustomerActivityRequest represents a report of server activity\nmessage OpaqueStreamCustomerActivityResponse {\n  OpaqueActivityUpdate event = 2;\n}\n\n// OpaqueSearchOrdersRequest represents queryable information to find orders\nmessage OpaqueSearchOrdersRequest {\n  OpaqueOrder order = 1;\n}\n\n// OpaqueSearchOrdersResponse represents a list of orders found\nmessage OpaqueSearchOrdersResponse {\n  repeated OpaqueOrder orders = 1;\n}\n\n// OpaqueEchoNoteRequest demonstrates an opaque body that maps to a foreign message.\nmessage OpaqueEchoNoteRequest {\n  grpc.gateway.examples.internal.proto.sub.StringMessage note = 1;\n}\n\n// OpaqueEchoNoteResponse mirrors the request payload for simplicity.\nmessage OpaqueEchoNoteResponse {\n  grpc.gateway.examples.internal.proto.sub.StringMessage note = 1;\n}\n\n// OpaqueAddress represents a physical address\nmessage OpaqueAddress {\n  string street_line1 = 1;\n  string street_line2 = 2;\n  string city = 3;\n  string state = 4;\n  string country = 5;\n  string postal_code = 6;\n  enum OpaqueAddressType {\n    OPAQUE_ADDRESS_TYPE_UNSPECIFIED = 0;\n    OPAQUE_ADDRESS_TYPE_RESIDENTIAL = 1;\n    OPAQUE_ADDRESS_TYPE_BUSINESS = 2;\n    OPAQUE_ADDRESS_TYPE_SHIPPING = 3;\n    OPAQUE_ADDRESS_TYPE_BILLING = 4;\n  }\n  OpaqueAddressType address_type = 7;\n  google.protobuf.BoolValue is_default = 8;\n  map<string, string> metadata = 9;\n}\n\n// OpaquePrice represents a monetary value with currency\nmessage OpaquePrice {\n  double amount = 1;\n  string currency_code = 2;\n  bool is_discounted = 3;\n  google.protobuf.DoubleValue original_amount = 4;\n  google.protobuf.Timestamp price_valid_until = 5;\n}\n\n// OpaqueProductCategory represents a product category\nmessage OpaqueProductCategory {\n  string category_id = 1;\n  string name = 2;\n  string description = 3;\n  OpaqueProductCategory parent_category = 4;\n  repeated string tags = 5;\n  google.protobuf.Timestamp created_at = 6;\n  google.protobuf.Timestamp updated_at = 7;\n}\n\n// OpaqueProductVariant represents a specific variant of a product\nmessage OpaqueProductVariant {\n  string variant_id = 1;\n  string sku = 2;\n  string name = 3;\n  OpaquePrice price = 4;\n  int32 inventory_count = 5;\n  map<string, string> attributes = 6;\n  bytes image_data = 7;\n  repeated string image_urls = 8;\n  google.protobuf.BoolValue is_available = 9;\n  oneof discount_info {\n    double percentage_off = 10;\n    double fixed_amount_off = 11;\n  }\n}\n\n// OpaqueProduct represents a product in the e-commerce system\nmessage OpaqueProduct {\n  string product_id = 1;\n  string name = 2;\n  string description = 3;\n  string brand = 4;\n  OpaquePrice base_price = 5;\n  OpaqueProductCategory category = 6;\n  repeated OpaqueProductVariant variants = 7;\n  repeated string tags = 8;\n  double average_rating = 9;\n  int32 review_count = 10;\n  google.protobuf.BoolValue is_featured = 11;\n  google.protobuf.Timestamp created_at = 12;\n  google.protobuf.Timestamp updated_at = 13;\n  google.protobuf.Duration average_shipping_time = 14;\n\n  enum OpaqueProductStatus {\n    OPAQUE_PRODUCT_STATUS_UNSPECIFIED = 0;\n    OPAQUE_PRODUCT_STATUS_DRAFT = 1;\n    OPAQUE_PRODUCT_STATUS_ACTIVE = 2;\n    OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK = 3;\n    OPAQUE_PRODUCT_STATUS_DISCONTINUED = 4;\n  }\n  OpaqueProductStatus status = 15;\n\n  map<string, string> metadata = 16;\n  map<string, OpaquePrice> regional_prices = 17;\n\n  message OpaqueProductDimensions {\n    double length = 1;\n    double width = 2;\n    double height = 3;\n    double weight = 4;\n    enum OpaqueUnit {\n      OPAQUE_UNIT_UNSPECIFIED = 0;\n      OPAQUE_UNIT_METRIC = 1;\n      OPAQUE_UNIT_IMPERIAL = 2;\n    }\n    OpaqueUnit unit = 5;\n  }\n\n  OpaqueProductDimensions dimensions = 18;\n\n  oneof tax_info {\n    double tax_percentage = 19;\n    bool tax_exempt = 20;\n  }\n}\n\n// OpaqueCustomer represents a customer in the e-commerce system\nmessage OpaqueCustomer {\n  string customer_id = 1;\n  string email = 2;\n  string first_name = 3;\n  string last_name = 4;\n  string phone_number = 5;\n  repeated OpaqueAddress addresses = 6;\n  google.protobuf.Timestamp created_at = 7;\n  google.protobuf.Timestamp last_login = 8;\n\n  enum OpaqueCustomerStatus {\n    OPAQUE_CUSTOMER_STATUS_UNSPECIFIED = 0;\n    OPAQUE_CUSTOMER_STATUS_ACTIVE = 1;\n    OPAQUE_CUSTOMER_STATUS_INACTIVE = 2;\n    OPAQUE_CUSTOMER_STATUS_SUSPENDED = 3;\n    OPAQUE_CUSTOMER_STATUS_DELETED = 4;\n  }\n  OpaqueCustomerStatus status = 9;\n\n  message OpaqueLoyaltyInfo {\n    string tier = 1;\n    int32 points = 2;\n    google.protobuf.Timestamp tier_expiry = 3;\n    repeated string rewards = 4;\n  }\n\n  OpaqueLoyaltyInfo loyalty_info = 10;\n  map<string, string> preferences = 11;\n\n  message OpaquePaymentMethod {\n    string payment_id = 1;\n    string type = 2;\n    string last_four = 3;\n    string provider = 4;\n    google.protobuf.Timestamp expires_at = 5;\n    bool is_default = 6;\n  }\n\n  repeated OpaquePaymentMethod payment_methods = 12;\n}\n\n// OpaqueOrderItem represents an item in an order\nmessage OpaqueOrderItem {\n  string product_id = 1;\n  string variant_id = 2;\n  string product_name = 3;\n  int32 quantity = 4;\n  OpaquePrice unit_price = 5;\n  OpaquePrice total_price = 6;\n  map<string, string> selected_attributes = 7;\n  google.protobuf.BoolValue gift_wrapped = 8;\n  string gift_message = 9;\n}\n\n// OpaqueOrder represents a customer order\nmessage OpaqueOrder {\n  string order_id = 1;\n  string customer_id = 2;\n  repeated OpaqueOrderItem items = 3;\n  OpaquePrice subtotal = 4;\n  OpaquePrice tax = 5;\n  OpaquePrice shipping = 6;\n  OpaquePrice total = 7;\n  OpaqueAddress shipping_address = 8;\n  OpaqueAddress billing_address = 9;\n\n  enum OpaqueOrderStatus {\n    OPAQUE_ORDER_STATUS_UNSPECIFIED = 0;\n    OPAQUE_ORDER_STATUS_PENDING = 1;\n    OPAQUE_ORDER_STATUS_PROCESSING = 2;\n    OPAQUE_ORDER_STATUS_SHIPPED = 3;\n    OPAQUE_ORDER_STATUS_DELIVERED = 4;\n    OPAQUE_ORDER_STATUS_CANCELLED = 5;\n    OPAQUE_ORDER_STATUS_RETURNED = 6;\n  }\n  OpaqueOrderStatus status = 10;\n\n  string payment_method_id = 11;\n  string tracking_number = 12;\n  google.protobuf.Timestamp created_at = 13;\n  google.protobuf.Timestamp updated_at = 14;\n  google.protobuf.Timestamp shipped_at = 15;\n  google.protobuf.Timestamp delivered_at = 16;\n\n  message OpaqueShippingInfo {\n    string carrier = 1;\n    string method = 2;\n    google.protobuf.Duration estimated_delivery_time = 3;\n    repeated string tracking_urls = 4;\n  }\n\n  OpaqueShippingInfo shipping_info = 17;\n  map<string, string> metadata = 18;\n\n  oneof discount_applied {\n    string coupon_code = 19;\n    string promotion_id = 20;\n  }\n}\n\n// OpaqueOrderSummary represents a summary of processed orders\nmessage OpaqueOrderSummary {\n  int32 total_orders_processed = 1;\n  int32 successful_orders = 2;\n  int32 failed_orders = 3;\n  OpaquePrice total_value = 4;\n  repeated string order_ids = 5;\n  map<string, string> error_details = 6;\n  google.protobuf.Timestamp processing_time = 7;\n\n  message OpaqueOrderError {\n    string order_id = 1;\n    string error_code = 2;\n    string error_message = 3;\n  }\n\n  repeated OpaqueOrderError errors = 8;\n}\n\n// OpaqueCustomerEvent represents a customer activity event\nmessage OpaqueCustomerEvent {\n  string customer_id = 1;\n  string session_id = 2;\n\n  enum OpaqueEventType {\n    OPAQUE_EVENT_TYPE_UNSPECIFIED = 0;\n    OPAQUE_EVENT_TYPE_PAGE_VIEW = 1;\n    OPAQUE_EVENT_TYPE_PRODUCT_VIEW = 2;\n    OPAQUE_EVENT_TYPE_ADD_TO_CART = 3;\n    OPAQUE_EVENT_TYPE_REMOVE_FROM_CART = 4;\n    OPAQUE_EVENT_TYPE_CHECKOUT_START = 5;\n    OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE = 6;\n    OPAQUE_EVENT_TYPE_SEARCH = 7;\n    OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE = 8;\n  }\n  OpaqueEventType event_type = 3;\n\n  google.protobuf.Timestamp timestamp = 4;\n  string product_id = 5;\n  string category_id = 6;\n  string search_query = 7;\n  string page_url = 8;\n  int32 value = 9;\n  map<string, string> event_data = 10;\n  string device_type = 11;\n  string ip_address = 12;\n  string user_agent = 13;\n}\n\n// OpaqueActivityUpdate represents a server response to customer activity\nmessage OpaqueActivityUpdate {\n  string customer_id = 1;\n  string session_id = 2;\n\n  enum OpaqueUpdateType {\n    OPAQUE_UPDATE_TYPE_UNSPECIFIED = 0;\n    OPAQUE_UPDATE_TYPE_RECOMMENDATION = 1;\n    OPAQUE_UPDATE_TYPE_NOTIFICATION = 2;\n    OPAQUE_UPDATE_TYPE_OFFER = 3;\n    OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE = 4;\n    OPAQUE_UPDATE_TYPE_PRICE_CHANGE = 5;\n    OPAQUE_UPDATE_TYPE_CART_REMINDER = 6;\n  }\n  OpaqueUpdateType update_type = 3;\n\n  google.protobuf.Timestamp timestamp = 4;\n  string message = 5;\n  repeated string product_ids = 6;\n  OpaquePrice price_update = 7;\n  int32 inventory_count = 8;\n  string offer_code = 9;\n  google.protobuf.Duration offer_expiry = 10;\n  double discount_percentage = 11;\n  map<string, string> update_data = 12;\n  int32 priority = 13;\n\n  oneof action_data {\n    string redirect_url = 14;\n    string notification_id = 15;\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/opaque.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/opaque.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"OpaqueEcommerceService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/customer/activity\": {\n      \"post\": {\n        \"summary\": \"OpaqueStreamCustomerActivity - Stream request, stream response\\nBidirectional streaming for real-time customer activity monitoring\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueStreamCustomerActivity\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbOpaqueStreamCustomerActivityResponse\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbOpaqueStreamCustomerActivityResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \" (streaming inputs)\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueStreamCustomerActivityRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/notes:echo\": {\n      \"post\": {\n        \"summary\": \"OpaqueEchoNote - Unary request with nested body field from another package.\\nExercises the opaque body import path by referencing grpc.gateway.examples.internal.proto.sub.StringMessage.\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueEchoNote\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueEchoNoteResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"note\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/subStringMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/orders/process\": {\n      \"post\": {\n        \"summary\": \"OpaqueProcessOrders - Stream request, unary response\\nProcesses multiple orders in a batch and returns a summary\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueProcessOrders\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueProcessOrdersResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \" (streaming inputs)\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueProcessOrdersRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/orders/search/{order.status}/shipAddressType/{order.shippingAddress.addressType}\": {\n      \"get\": {\n        \"summary\": \"OpaqueSearchOrders - Unary request, unary response\\nUses enum params (both top level and nested) to populate fields to test opaque get chain\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueSearchOrders\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueSearchOrdersResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"order.status\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"OPAQUE_ORDER_STATUS_UNSPECIFIED\",\n              \"OPAQUE_ORDER_STATUS_PENDING\",\n              \"OPAQUE_ORDER_STATUS_PROCESSING\",\n              \"OPAQUE_ORDER_STATUS_SHIPPED\",\n              \"OPAQUE_ORDER_STATUS_DELIVERED\",\n              \"OPAQUE_ORDER_STATUS_CANCELLED\",\n              \"OPAQUE_ORDER_STATUS_RETURNED\"\n            ]\n          },\n          {\n            \"name\": \"order.shippingAddress.addressType\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"OPAQUE_ADDRESS_TYPE_UNSPECIFIED\",\n              \"OPAQUE_ADDRESS_TYPE_RESIDENTIAL\",\n              \"OPAQUE_ADDRESS_TYPE_BUSINESS\",\n              \"OPAQUE_ADDRESS_TYPE_SHIPPING\",\n              \"OPAQUE_ADDRESS_TYPE_BILLING\"\n            ]\n          },\n          {\n            \"name\": \"order.orderId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.customerId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.subtotal.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.subtotal.currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.subtotal.isDiscounted\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"order.subtotal.originalAmount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.subtotal.priceValidUntil\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.tax.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.tax.currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.tax.isDiscounted\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"order.tax.originalAmount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.tax.priceValidUntil\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.shipping.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.shipping.currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shipping.isDiscounted\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"order.shipping.originalAmount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.shipping.priceValidUntil\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.total.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.total.currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.total.isDiscounted\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"order.total.originalAmount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"order.total.priceValidUntil\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.shippingAddress.streetLine1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingAddress.streetLine2\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingAddress.city\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingAddress.state\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingAddress.country\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingAddress.postalCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingAddress.isDefault\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"order.shippingAddress.metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.billingAddress.streetLine1\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.billingAddress.streetLine2\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.billingAddress.city\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.billingAddress.state\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.billingAddress.country\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.billingAddress.postalCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.billingAddress.isDefault\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"order.billingAddress.metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.paymentMethodId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.trackingNumber\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.createdAt\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.updatedAt\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.shippedAt\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.deliveredAt\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"order.shippingInfo.carrier\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingInfo.method\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingInfo.estimatedDeliveryTime\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.shippingInfo.trackingUrls\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"order.metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.couponCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"order.promotionId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/products\": {\n      \"post\": {\n        \"summary\": \"OpaqueCreateProduct - Unary request with body field, unary response\\nCreates a new product with the product details in the body\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueCreateProduct\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueCreateProductResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueCreateProductRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/products/search\": {\n      \"get\": {\n        \"summary\": \"OpaqueSearchProducts - Unary request, stream response\\nSearches for products based on criteria and streams results back\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueSearchProducts\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbOpaqueSearchProductsResponse\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbOpaqueSearchProductsResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"query\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"categoryIds\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"brands\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"minPrice.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"minPrice.currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"minPrice.isDiscounted\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"minPrice.originalAmount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"minPrice.priceValidUntil\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"maxPrice.amount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"maxPrice.currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"maxPrice.isDiscounted\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"maxPrice.originalAmount\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"number\",\n            \"format\": \"double\"\n          },\n          {\n            \"name\": \"maxPrice.priceValidUntil\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          {\n            \"name\": \"tags\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"collectionFormat\": \"multi\"\n          },\n          {\n            \"name\": \"sortBy\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"OPAQUE_SORT_ORDER_UNSPECIFIED\",\n              \"OPAQUE_SORT_ORDER_RELEVANCE\",\n              \"OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH\",\n              \"OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW\",\n              \"OPAQUE_SORT_ORDER_NEWEST_FIRST\",\n              \"OPAQUE_SORT_ORDER_RATING\",\n              \"OPAQUE_SORT_ORDER_POPULARITY\"\n            ],\n            \"default\": \"OPAQUE_SORT_ORDER_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"page\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"pageSize\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"languageCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"fieldMask\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"filters\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/products/{product.productId}\": {\n      \"patch\": {\n        \"summary\": \"OpaqueUpdateProduct - PATCH request with FieldMask and body field mapping\\nto reproduce the compilation issue with bodyData as a value type.\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueUpdateProduct\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueUpdateProductResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"product.productId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"product\",\n            \"description\": \"OpaqueProduct represents a product in the e-commerce system\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"name\": {\n                  \"type\": \"string\"\n                },\n                \"description\": {\n                  \"type\": \"string\"\n                },\n                \"brand\": {\n                  \"type\": \"string\"\n                },\n                \"basePrice\": {\n                  \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n                },\n                \"category\": {\n                  \"$ref\": \"#/definitions/examplepbOpaqueProductCategory\"\n                },\n                \"variants\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"object\",\n                    \"$ref\": \"#/definitions/examplepbOpaqueProductVariant\"\n                  }\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"averageRating\": {\n                  \"type\": \"number\",\n                  \"format\": \"double\"\n                },\n                \"reviewCount\": {\n                  \"type\": \"integer\",\n                  \"format\": \"int32\"\n                },\n                \"isFeatured\": {\n                  \"type\": \"boolean\"\n                },\n                \"createdAt\": {\n                  \"type\": \"string\",\n                  \"format\": \"date-time\"\n                },\n                \"updatedAt\": {\n                  \"type\": \"string\",\n                  \"format\": \"date-time\"\n                },\n                \"averageShippingTime\": {\n                  \"type\": \"string\"\n                },\n                \"status\": {\n                  \"$ref\": \"#/definitions/OpaqueProductOpaqueProductStatus\"\n                },\n                \"metadata\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"regionalPrices\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n                  }\n                },\n                \"dimensions\": {\n                  \"$ref\": \"#/definitions/OpaqueProductOpaqueProductDimensions\"\n                },\n                \"taxPercentage\": {\n                  \"type\": \"number\",\n                  \"format\": \"double\"\n                },\n                \"taxExempt\": {\n                  \"type\": \"boolean\"\n                }\n              },\n              \"title\": \"OpaqueProduct represents a product in the e-commerce system\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/products/{productId}\": {\n      \"get\": {\n        \"summary\": \"OpaqueGetProduct - Unary request, unary response\\nRetrieves detailed information about a specific product\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueGetProduct\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueGetProductResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"productId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"includeVariants\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"includeRelatedProducts\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          },\n          {\n            \"name\": \"languageCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"currencyCode\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    },\n    \"/v1/productsField\": {\n      \"post\": {\n        \"summary\": \"OpaqueCreateProductField - same as above, but with body field mapping.\",\n        \"operationId\": \"OpaqueEcommerceService_OpaqueCreateProductField\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueCreateProductFieldResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"product\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOpaqueProduct\"\n            }\n          },\n          {\n            \"name\": \"productId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"OpaqueEcommerceService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"OpaqueActivityUpdateOpaqueUpdateType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"OPAQUE_UPDATE_TYPE_UNSPECIFIED\",\n        \"OPAQUE_UPDATE_TYPE_RECOMMENDATION\",\n        \"OPAQUE_UPDATE_TYPE_NOTIFICATION\",\n        \"OPAQUE_UPDATE_TYPE_OFFER\",\n        \"OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE\",\n        \"OPAQUE_UPDATE_TYPE_PRICE_CHANGE\",\n        \"OPAQUE_UPDATE_TYPE_CART_REMINDER\"\n      ],\n      \"default\": \"OPAQUE_UPDATE_TYPE_UNSPECIFIED\"\n    },\n    \"OpaqueAddressOpaqueAddressType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"OPAQUE_ADDRESS_TYPE_UNSPECIFIED\",\n        \"OPAQUE_ADDRESS_TYPE_RESIDENTIAL\",\n        \"OPAQUE_ADDRESS_TYPE_BUSINESS\",\n        \"OPAQUE_ADDRESS_TYPE_SHIPPING\",\n        \"OPAQUE_ADDRESS_TYPE_BILLING\"\n      ],\n      \"default\": \"OPAQUE_ADDRESS_TYPE_UNSPECIFIED\"\n    },\n    \"OpaqueCustomerEventOpaqueEventType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"OPAQUE_EVENT_TYPE_UNSPECIFIED\",\n        \"OPAQUE_EVENT_TYPE_PAGE_VIEW\",\n        \"OPAQUE_EVENT_TYPE_PRODUCT_VIEW\",\n        \"OPAQUE_EVENT_TYPE_ADD_TO_CART\",\n        \"OPAQUE_EVENT_TYPE_REMOVE_FROM_CART\",\n        \"OPAQUE_EVENT_TYPE_CHECKOUT_START\",\n        \"OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE\",\n        \"OPAQUE_EVENT_TYPE_SEARCH\",\n        \"OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE\"\n      ],\n      \"default\": \"OPAQUE_EVENT_TYPE_UNSPECIFIED\"\n    },\n    \"OpaqueOrderOpaqueOrderStatus\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"OPAQUE_ORDER_STATUS_UNSPECIFIED\",\n        \"OPAQUE_ORDER_STATUS_PENDING\",\n        \"OPAQUE_ORDER_STATUS_PROCESSING\",\n        \"OPAQUE_ORDER_STATUS_SHIPPED\",\n        \"OPAQUE_ORDER_STATUS_DELIVERED\",\n        \"OPAQUE_ORDER_STATUS_CANCELLED\",\n        \"OPAQUE_ORDER_STATUS_RETURNED\"\n      ],\n      \"default\": \"OPAQUE_ORDER_STATUS_UNSPECIFIED\"\n    },\n    \"OpaqueOrderOpaqueShippingInfo\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"carrier\": {\n          \"type\": \"string\"\n        },\n        \"method\": {\n          \"type\": \"string\"\n        },\n        \"estimatedDeliveryTime\": {\n          \"type\": \"string\"\n        },\n        \"trackingUrls\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    },\n    \"OpaqueOrderSummaryOpaqueOrderError\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"orderId\": {\n          \"type\": \"string\"\n        },\n        \"errorCode\": {\n          \"type\": \"string\"\n        },\n        \"errorMessage\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"OpaqueProductDimensionsOpaqueUnit\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"OPAQUE_UNIT_UNSPECIFIED\",\n        \"OPAQUE_UNIT_METRIC\",\n        \"OPAQUE_UNIT_IMPERIAL\"\n      ],\n      \"default\": \"OPAQUE_UNIT_UNSPECIFIED\"\n    },\n    \"OpaqueProductOpaqueProductDimensions\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"length\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"width\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"height\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"weight\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"unit\": {\n          \"$ref\": \"#/definitions/OpaqueProductDimensionsOpaqueUnit\"\n        }\n      }\n    },\n    \"OpaqueProductOpaqueProductStatus\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"OPAQUE_PRODUCT_STATUS_UNSPECIFIED\",\n        \"OPAQUE_PRODUCT_STATUS_DRAFT\",\n        \"OPAQUE_PRODUCT_STATUS_ACTIVE\",\n        \"OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK\",\n        \"OPAQUE_PRODUCT_STATUS_DISCONTINUED\"\n      ],\n      \"default\": \"OPAQUE_PRODUCT_STATUS_UNSPECIFIED\"\n    },\n    \"OpaqueSearchProductsRequestOpaqueSortOrder\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"OPAQUE_SORT_ORDER_UNSPECIFIED\",\n        \"OPAQUE_SORT_ORDER_RELEVANCE\",\n        \"OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH\",\n        \"OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW\",\n        \"OPAQUE_SORT_ORDER_NEWEST_FIRST\",\n        \"OPAQUE_SORT_ORDER_RATING\",\n        \"OPAQUE_SORT_ORDER_POPULARITY\"\n      ],\n      \"default\": \"OPAQUE_SORT_ORDER_UNSPECIFIED\"\n    },\n    \"examplepbOpaqueActivityUpdate\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"customerId\": {\n          \"type\": \"string\"\n        },\n        \"sessionId\": {\n          \"type\": \"string\"\n        },\n        \"updateType\": {\n          \"$ref\": \"#/definitions/OpaqueActivityUpdateOpaqueUpdateType\"\n        },\n        \"timestamp\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"productIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"priceUpdate\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"inventoryCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"offerCode\": {\n          \"type\": \"string\"\n        },\n        \"offerExpiry\": {\n          \"type\": \"string\"\n        },\n        \"discountPercentage\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"updateData\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"priority\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"redirectUrl\": {\n          \"type\": \"string\"\n        },\n        \"notificationId\": {\n          \"type\": \"string\"\n        }\n      },\n      \"title\": \"OpaqueActivityUpdate represents a server response to customer activity\"\n    },\n    \"examplepbOpaqueAddress\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"streetLine1\": {\n          \"type\": \"string\"\n        },\n        \"streetLine2\": {\n          \"type\": \"string\"\n        },\n        \"city\": {\n          \"type\": \"string\"\n        },\n        \"state\": {\n          \"type\": \"string\"\n        },\n        \"country\": {\n          \"type\": \"string\"\n        },\n        \"postalCode\": {\n          \"type\": \"string\"\n        },\n        \"addressType\": {\n          \"$ref\": \"#/definitions/OpaqueAddressOpaqueAddressType\"\n        },\n        \"isDefault\": {\n          \"type\": \"boolean\"\n        },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        }\n      },\n      \"title\": \"OpaqueAddress represents a physical address\"\n    },\n    \"examplepbOpaqueCreateProductFieldResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"product\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProduct\"\n        }\n      },\n      \"title\": \"OpaqueCreateProductFieldResponse represents the created product\"\n    },\n    \"examplepbOpaqueCreateProductRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"productId\": {\n          \"type\": \"string\"\n        },\n        \"product\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProduct\"\n        }\n      },\n      \"title\": \"OpaqueCreateProductRequest represents a request to create a product\"\n    },\n    \"examplepbOpaqueCreateProductResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"product\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProduct\"\n        }\n      },\n      \"title\": \"OpaqueCreateProductResponse represents the created product\"\n    },\n    \"examplepbOpaqueCustomerEvent\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"customerId\": {\n          \"type\": \"string\"\n        },\n        \"sessionId\": {\n          \"type\": \"string\"\n        },\n        \"eventType\": {\n          \"$ref\": \"#/definitions/OpaqueCustomerEventOpaqueEventType\"\n        },\n        \"timestamp\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"productId\": {\n          \"type\": \"string\"\n        },\n        \"categoryId\": {\n          \"type\": \"string\"\n        },\n        \"searchQuery\": {\n          \"type\": \"string\"\n        },\n        \"pageUrl\": {\n          \"type\": \"string\"\n        },\n        \"value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"eventData\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"deviceType\": {\n          \"type\": \"string\"\n        },\n        \"ipAddress\": {\n          \"type\": \"string\"\n        },\n        \"userAgent\": {\n          \"type\": \"string\"\n        }\n      },\n      \"title\": \"OpaqueCustomerEvent represents a customer activity event\"\n    },\n    \"examplepbOpaqueEchoNoteResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"note\": {\n          \"$ref\": \"#/definitions/subStringMessage\"\n        }\n      },\n      \"description\": \"OpaqueEchoNoteResponse mirrors the request payload for simplicity.\"\n    },\n    \"examplepbOpaqueGetProductResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"product\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProduct\"\n        }\n      },\n      \"title\": \"OpaqueGetProductResponse represents a response with product information\"\n    },\n    \"examplepbOpaqueOrder\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"orderId\": {\n          \"type\": \"string\"\n        },\n        \"customerId\": {\n          \"type\": \"string\"\n        },\n        \"items\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/examplepbOpaqueOrderItem\"\n          }\n        },\n        \"subtotal\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"tax\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"shipping\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"total\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"shippingAddress\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueAddress\"\n        },\n        \"billingAddress\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueAddress\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/OpaqueOrderOpaqueOrderStatus\"\n        },\n        \"paymentMethodId\": {\n          \"type\": \"string\"\n        },\n        \"trackingNumber\": {\n          \"type\": \"string\"\n        },\n        \"createdAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"updatedAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"shippedAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"deliveredAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"shippingInfo\": {\n          \"$ref\": \"#/definitions/OpaqueOrderOpaqueShippingInfo\"\n        },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"couponCode\": {\n          \"type\": \"string\"\n        },\n        \"promotionId\": {\n          \"type\": \"string\"\n        }\n      },\n      \"title\": \"OpaqueOrder represents a customer order\"\n    },\n    \"examplepbOpaqueOrderItem\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"productId\": {\n          \"type\": \"string\"\n        },\n        \"variantId\": {\n          \"type\": \"string\"\n        },\n        \"productName\": {\n          \"type\": \"string\"\n        },\n        \"quantity\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"unitPrice\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"totalPrice\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"selectedAttributes\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"giftWrapped\": {\n          \"type\": \"boolean\"\n        },\n        \"giftMessage\": {\n          \"type\": \"string\"\n        }\n      },\n      \"title\": \"OpaqueOrderItem represents an item in an order\"\n    },\n    \"examplepbOpaqueOrderSummary\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"totalOrdersProcessed\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"successfulOrders\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"failedOrders\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"totalValue\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"orderIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"errorDetails\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"processingTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"errors\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/OpaqueOrderSummaryOpaqueOrderError\"\n          }\n        }\n      },\n      \"title\": \"OpaqueOrderSummary represents a summary of processed orders\"\n    },\n    \"examplepbOpaquePrice\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"amount\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"currencyCode\": {\n          \"type\": \"string\"\n        },\n        \"isDiscounted\": {\n          \"type\": \"boolean\"\n        },\n        \"originalAmount\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"priceValidUntil\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        }\n      },\n      \"title\": \"OpaquePrice represents a monetary value with currency\"\n    },\n    \"examplepbOpaqueProcessOrdersRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"order\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueOrder\"\n        }\n      },\n      \"title\": \"OpaqueProcessOrdersRequest represents a request to process order\"\n    },\n    \"examplepbOpaqueProcessOrdersResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"summary\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueOrderSummary\"\n        }\n      },\n      \"title\": \"OpaqueProcessOrdersResponse represents orders processing result\"\n    },\n    \"examplepbOpaqueProduct\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"productId\": {\n          \"type\": \"string\"\n        },\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"description\": {\n          \"type\": \"string\"\n        },\n        \"brand\": {\n          \"type\": \"string\"\n        },\n        \"basePrice\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"category\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProductCategory\"\n        },\n        \"variants\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/examplepbOpaqueProductVariant\"\n          }\n        },\n        \"tags\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"averageRating\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"reviewCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"isFeatured\": {\n          \"type\": \"boolean\"\n        },\n        \"createdAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"updatedAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"averageShippingTime\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/OpaqueProductOpaqueProductStatus\"\n        },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"regionalPrices\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n          }\n        },\n        \"dimensions\": {\n          \"$ref\": \"#/definitions/OpaqueProductOpaqueProductDimensions\"\n        },\n        \"taxPercentage\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"taxExempt\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"title\": \"OpaqueProduct represents a product in the e-commerce system\"\n    },\n    \"examplepbOpaqueProductCategory\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"categoryId\": {\n          \"type\": \"string\"\n        },\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"description\": {\n          \"type\": \"string\"\n        },\n        \"parentCategory\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProductCategory\"\n        },\n        \"tags\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"createdAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"updatedAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        }\n      },\n      \"title\": \"OpaqueProductCategory represents a product category\"\n    },\n    \"examplepbOpaqueProductVariant\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"variantId\": {\n          \"type\": \"string\"\n        },\n        \"sku\": {\n          \"type\": \"string\"\n        },\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"price\": {\n          \"$ref\": \"#/definitions/examplepbOpaquePrice\"\n        },\n        \"inventoryCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"attributes\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"imageData\": {\n          \"type\": \"string\",\n          \"format\": \"byte\"\n        },\n        \"imageUrls\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"isAvailable\": {\n          \"type\": \"boolean\"\n        },\n        \"percentageOff\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"fixedAmountOff\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        }\n      },\n      \"title\": \"OpaqueProductVariant represents a specific variant of a product\"\n    },\n    \"examplepbOpaqueSearchOrdersResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"orders\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/examplepbOpaqueOrder\"\n          }\n        }\n      },\n      \"title\": \"OpaqueSearchOrdersResponse represents a list of orders found\"\n    },\n    \"examplepbOpaqueSearchProductsResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"product\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProduct\"\n        }\n      },\n      \"title\": \"OpaqueSearchProductsResponse represents a single product in search results\"\n    },\n    \"examplepbOpaqueStreamCustomerActivityRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"event\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueCustomerEvent\"\n        }\n      },\n      \"title\": \"OpaqueStreamCustomerActivityRequest represents a report of user activity\"\n    },\n    \"examplepbOpaqueStreamCustomerActivityResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"event\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueActivityUpdate\"\n        }\n      },\n      \"title\": \"OpaqueStreamCustomerActivityRequest represents a report of server activity\"\n    },\n    \"examplepbOpaqueUpdateProductResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"product\": {\n          \"$ref\": \"#/definitions/examplepbOpaqueProduct\"\n        }\n      },\n      \"title\": \"OpaqueUpdateProductResponse represents the response for OpaqueUpdateProduct\"\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"subStringMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/opaque_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/opaque.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tOpaqueEcommerceService_OpaqueGetProduct_FullMethodName             = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueGetProduct\"\n\tOpaqueEcommerceService_OpaqueSearchProducts_FullMethodName         = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueSearchProducts\"\n\tOpaqueEcommerceService_OpaqueCreateProduct_FullMethodName          = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueCreateProduct\"\n\tOpaqueEcommerceService_OpaqueCreateProductField_FullMethodName     = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueCreateProductField\"\n\tOpaqueEcommerceService_OpaqueProcessOrders_FullMethodName          = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueProcessOrders\"\n\tOpaqueEcommerceService_OpaqueStreamCustomerActivity_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueStreamCustomerActivity\"\n\tOpaqueEcommerceService_OpaqueUpdateProduct_FullMethodName          = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueUpdateProduct\"\n\tOpaqueEcommerceService_OpaqueSearchOrders_FullMethodName           = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueSearchOrders\"\n\tOpaqueEcommerceService_OpaqueEchoNote_FullMethodName               = \"/grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService/OpaqueEchoNote\"\n)\n\n// OpaqueEcommerceServiceClient is the client API for OpaqueEcommerceService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// OpaqueEcommerceService provides a comprehensive e-commerce API with various request/response patterns\ntype OpaqueEcommerceServiceClient interface {\n\t// OpaqueGetProduct - Unary request, unary response\n\t// Retrieves detailed information about a specific product\n\tOpaqueGetProduct(ctx context.Context, in *OpaqueGetProductRequest, opts ...grpc.CallOption) (*OpaqueGetProductResponse, error)\n\t// OpaqueSearchProducts - Unary request, stream response\n\t// Searches for products based on criteria and streams results back\n\tOpaqueSearchProducts(ctx context.Context, in *OpaqueSearchProductsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[OpaqueSearchProductsResponse], error)\n\t// OpaqueCreateProduct - Unary request with body field, unary response\n\t// Creates a new product with the product details in the body\n\tOpaqueCreateProduct(ctx context.Context, in *OpaqueCreateProductRequest, opts ...grpc.CallOption) (*OpaqueCreateProductResponse, error)\n\t// OpaqueCreateProductField - same as above, but with body field mapping.\n\tOpaqueCreateProductField(ctx context.Context, in *OpaqueCreateProductFieldRequest, opts ...grpc.CallOption) (*OpaqueCreateProductFieldResponse, error)\n\t// OpaqueProcessOrders - Stream request, unary response\n\t// Processes multiple orders in a batch and returns a summary\n\tOpaqueProcessOrders(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse], error)\n\t// OpaqueStreamCustomerActivity - Stream request, stream response\n\t// Bidirectional streaming for real-time customer activity monitoring\n\tOpaqueStreamCustomerActivity(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse], error)\n\t// OpaqueUpdateProduct - PATCH request with FieldMask and body field mapping\n\t// to reproduce the compilation issue with bodyData as a value type.\n\tOpaqueUpdateProduct(ctx context.Context, in *OpaqueUpdateProductRequest, opts ...grpc.CallOption) (*OpaqueUpdateProductResponse, error)\n\t// OpaqueSearchOrders - Unary request, unary response\n\t// Uses enum params (both top level and nested) to populate fields to test opaque get chain\n\tOpaqueSearchOrders(ctx context.Context, in *OpaqueSearchOrdersRequest, opts ...grpc.CallOption) (*OpaqueSearchOrdersResponse, error)\n\t// OpaqueEchoNote - Unary request with nested body field from another package.\n\t// Exercises the opaque body import path by referencing grpc.gateway.examples.internal.proto.sub.StringMessage.\n\tOpaqueEchoNote(ctx context.Context, in *OpaqueEchoNoteRequest, opts ...grpc.CallOption) (*OpaqueEchoNoteResponse, error)\n}\n\ntype opaqueEcommerceServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewOpaqueEcommerceServiceClient(cc grpc.ClientConnInterface) OpaqueEcommerceServiceClient {\n\treturn &opaqueEcommerceServiceClient{cc}\n}\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueGetProduct(ctx context.Context, in *OpaqueGetProductRequest, opts ...grpc.CallOption) (*OpaqueGetProductResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OpaqueGetProductResponse)\n\terr := c.cc.Invoke(ctx, OpaqueEcommerceService_OpaqueGetProduct_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueSearchProducts(ctx context.Context, in *OpaqueSearchProductsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[OpaqueSearchProductsResponse], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &OpaqueEcommerceService_ServiceDesc.Streams[0], OpaqueEcommerceService_OpaqueSearchProducts_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[OpaqueSearchProductsRequest, OpaqueSearchProductsResponse]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype OpaqueEcommerceService_OpaqueSearchProductsClient = grpc.ServerStreamingClient[OpaqueSearchProductsResponse]\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueCreateProduct(ctx context.Context, in *OpaqueCreateProductRequest, opts ...grpc.CallOption) (*OpaqueCreateProductResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OpaqueCreateProductResponse)\n\terr := c.cc.Invoke(ctx, OpaqueEcommerceService_OpaqueCreateProduct_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueCreateProductField(ctx context.Context, in *OpaqueCreateProductFieldRequest, opts ...grpc.CallOption) (*OpaqueCreateProductFieldResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OpaqueCreateProductFieldResponse)\n\terr := c.cc.Invoke(ctx, OpaqueEcommerceService_OpaqueCreateProductField_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueProcessOrders(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &OpaqueEcommerceService_ServiceDesc.Streams[1], OpaqueEcommerceService_OpaqueProcessOrders_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse]{ClientStream: stream}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype OpaqueEcommerceService_OpaqueProcessOrdersClient = grpc.ClientStreamingClient[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse]\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueStreamCustomerActivity(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &OpaqueEcommerceService_ServiceDesc.Streams[2], OpaqueEcommerceService_OpaqueStreamCustomerActivity_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse]{ClientStream: stream}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype OpaqueEcommerceService_OpaqueStreamCustomerActivityClient = grpc.BidiStreamingClient[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse]\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueUpdateProduct(ctx context.Context, in *OpaqueUpdateProductRequest, opts ...grpc.CallOption) (*OpaqueUpdateProductResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OpaqueUpdateProductResponse)\n\terr := c.cc.Invoke(ctx, OpaqueEcommerceService_OpaqueUpdateProduct_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueSearchOrders(ctx context.Context, in *OpaqueSearchOrdersRequest, opts ...grpc.CallOption) (*OpaqueSearchOrdersResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OpaqueSearchOrdersResponse)\n\terr := c.cc.Invoke(ctx, OpaqueEcommerceService_OpaqueSearchOrders_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *opaqueEcommerceServiceClient) OpaqueEchoNote(ctx context.Context, in *OpaqueEchoNoteRequest, opts ...grpc.CallOption) (*OpaqueEchoNoteResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OpaqueEchoNoteResponse)\n\terr := c.cc.Invoke(ctx, OpaqueEcommerceService_OpaqueEchoNote_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// OpaqueEcommerceServiceServer is the server API for OpaqueEcommerceService service.\n// All implementations should embed UnimplementedOpaqueEcommerceServiceServer\n// for forward compatibility.\n//\n// OpaqueEcommerceService provides a comprehensive e-commerce API with various request/response patterns\ntype OpaqueEcommerceServiceServer interface {\n\t// OpaqueGetProduct - Unary request, unary response\n\t// Retrieves detailed information about a specific product\n\tOpaqueGetProduct(context.Context, *OpaqueGetProductRequest) (*OpaqueGetProductResponse, error)\n\t// OpaqueSearchProducts - Unary request, stream response\n\t// Searches for products based on criteria and streams results back\n\tOpaqueSearchProducts(*OpaqueSearchProductsRequest, grpc.ServerStreamingServer[OpaqueSearchProductsResponse]) error\n\t// OpaqueCreateProduct - Unary request with body field, unary response\n\t// Creates a new product with the product details in the body\n\tOpaqueCreateProduct(context.Context, *OpaqueCreateProductRequest) (*OpaqueCreateProductResponse, error)\n\t// OpaqueCreateProductField - same as above, but with body field mapping.\n\tOpaqueCreateProductField(context.Context, *OpaqueCreateProductFieldRequest) (*OpaqueCreateProductFieldResponse, error)\n\t// OpaqueProcessOrders - Stream request, unary response\n\t// Processes multiple orders in a batch and returns a summary\n\tOpaqueProcessOrders(grpc.ClientStreamingServer[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse]) error\n\t// OpaqueStreamCustomerActivity - Stream request, stream response\n\t// Bidirectional streaming for real-time customer activity monitoring\n\tOpaqueStreamCustomerActivity(grpc.BidiStreamingServer[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse]) error\n\t// OpaqueUpdateProduct - PATCH request with FieldMask and body field mapping\n\t// to reproduce the compilation issue with bodyData as a value type.\n\tOpaqueUpdateProduct(context.Context, *OpaqueUpdateProductRequest) (*OpaqueUpdateProductResponse, error)\n\t// OpaqueSearchOrders - Unary request, unary response\n\t// Uses enum params (both top level and nested) to populate fields to test opaque get chain\n\tOpaqueSearchOrders(context.Context, *OpaqueSearchOrdersRequest) (*OpaqueSearchOrdersResponse, error)\n\t// OpaqueEchoNote - Unary request with nested body field from another package.\n\t// Exercises the opaque body import path by referencing grpc.gateway.examples.internal.proto.sub.StringMessage.\n\tOpaqueEchoNote(context.Context, *OpaqueEchoNoteRequest) (*OpaqueEchoNoteResponse, error)\n}\n\n// UnimplementedOpaqueEcommerceServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedOpaqueEcommerceServiceServer struct{}\n\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueGetProduct(context.Context, *OpaqueGetProductRequest) (*OpaqueGetProductResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OpaqueGetProduct not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueSearchProducts(*OpaqueSearchProductsRequest, grpc.ServerStreamingServer[OpaqueSearchProductsResponse]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method OpaqueSearchProducts not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueCreateProduct(context.Context, *OpaqueCreateProductRequest) (*OpaqueCreateProductResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OpaqueCreateProduct not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueCreateProductField(context.Context, *OpaqueCreateProductFieldRequest) (*OpaqueCreateProductFieldResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OpaqueCreateProductField not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueProcessOrders(grpc.ClientStreamingServer[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method OpaqueProcessOrders not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueStreamCustomerActivity(grpc.BidiStreamingServer[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method OpaqueStreamCustomerActivity not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueUpdateProduct(context.Context, *OpaqueUpdateProductRequest) (*OpaqueUpdateProductResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OpaqueUpdateProduct not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueSearchOrders(context.Context, *OpaqueSearchOrdersRequest) (*OpaqueSearchOrdersResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OpaqueSearchOrders not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) OpaqueEchoNote(context.Context, *OpaqueEchoNoteRequest) (*OpaqueEchoNoteResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method OpaqueEchoNote not implemented\")\n}\nfunc (UnimplementedOpaqueEcommerceServiceServer) testEmbeddedByValue() {}\n\n// UnsafeOpaqueEcommerceServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to OpaqueEcommerceServiceServer will\n// result in compilation errors.\ntype UnsafeOpaqueEcommerceServiceServer interface {\n\tmustEmbedUnimplementedOpaqueEcommerceServiceServer()\n}\n\nfunc RegisterOpaqueEcommerceServiceServer(s grpc.ServiceRegistrar, srv OpaqueEcommerceServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedOpaqueEcommerceServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&OpaqueEcommerceService_ServiceDesc, srv)\n}\n\nfunc _OpaqueEcommerceService_OpaqueGetProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OpaqueGetProductRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueGetProduct(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: OpaqueEcommerceService_OpaqueGetProduct_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueGetProduct(ctx, req.(*OpaqueGetProductRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _OpaqueEcommerceService_OpaqueSearchProducts_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(OpaqueSearchProductsRequest)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(OpaqueEcommerceServiceServer).OpaqueSearchProducts(m, &grpc.GenericServerStream[OpaqueSearchProductsRequest, OpaqueSearchProductsResponse]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype OpaqueEcommerceService_OpaqueSearchProductsServer = grpc.ServerStreamingServer[OpaqueSearchProductsResponse]\n\nfunc _OpaqueEcommerceService_OpaqueCreateProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OpaqueCreateProductRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueCreateProduct(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: OpaqueEcommerceService_OpaqueCreateProduct_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueCreateProduct(ctx, req.(*OpaqueCreateProductRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _OpaqueEcommerceService_OpaqueCreateProductField_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OpaqueCreateProductFieldRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueCreateProductField(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: OpaqueEcommerceService_OpaqueCreateProductField_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueCreateProductField(ctx, req.(*OpaqueCreateProductFieldRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _OpaqueEcommerceService_OpaqueProcessOrders_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(OpaqueEcommerceServiceServer).OpaqueProcessOrders(&grpc.GenericServerStream[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype OpaqueEcommerceService_OpaqueProcessOrdersServer = grpc.ClientStreamingServer[OpaqueProcessOrdersRequest, OpaqueProcessOrdersResponse]\n\nfunc _OpaqueEcommerceService_OpaqueStreamCustomerActivity_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(OpaqueEcommerceServiceServer).OpaqueStreamCustomerActivity(&grpc.GenericServerStream[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype OpaqueEcommerceService_OpaqueStreamCustomerActivityServer = grpc.BidiStreamingServer[OpaqueStreamCustomerActivityRequest, OpaqueStreamCustomerActivityResponse]\n\nfunc _OpaqueEcommerceService_OpaqueUpdateProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OpaqueUpdateProductRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueUpdateProduct(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: OpaqueEcommerceService_OpaqueUpdateProduct_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueUpdateProduct(ctx, req.(*OpaqueUpdateProductRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _OpaqueEcommerceService_OpaqueSearchOrders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OpaqueSearchOrdersRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueSearchOrders(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: OpaqueEcommerceService_OpaqueSearchOrders_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueSearchOrders(ctx, req.(*OpaqueSearchOrdersRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _OpaqueEcommerceService_OpaqueEchoNote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OpaqueEchoNoteRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueEchoNote(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: OpaqueEcommerceService_OpaqueEchoNote_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(OpaqueEcommerceServiceServer).OpaqueEchoNote(ctx, req.(*OpaqueEchoNoteRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// OpaqueEcommerceService_ServiceDesc is the grpc.ServiceDesc for OpaqueEcommerceService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar OpaqueEcommerceService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.OpaqueEcommerceService\",\n\tHandlerType: (*OpaqueEcommerceServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"OpaqueGetProduct\",\n\t\t\tHandler:    _OpaqueEcommerceService_OpaqueGetProduct_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"OpaqueCreateProduct\",\n\t\t\tHandler:    _OpaqueEcommerceService_OpaqueCreateProduct_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"OpaqueCreateProductField\",\n\t\t\tHandler:    _OpaqueEcommerceService_OpaqueCreateProductField_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"OpaqueUpdateProduct\",\n\t\t\tHandler:    _OpaqueEcommerceService_OpaqueUpdateProduct_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"OpaqueSearchOrders\",\n\t\t\tHandler:    _OpaqueEcommerceService_OpaqueSearchOrders_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"OpaqueEchoNote\",\n\t\t\tHandler:    _OpaqueEcommerceService_OpaqueEchoNote_Handler,\n\t\t},\n\t},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"OpaqueSearchProducts\",\n\t\t\tHandler:       _OpaqueEcommerceService_OpaqueSearchProducts_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"OpaqueProcessOrders\",\n\t\t\tHandler:       _OpaqueEcommerceService_OpaqueProcessOrders_Handler,\n\t\t\tClientStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"OpaqueStreamCustomerActivity\",\n\t\t\tHandler:       _OpaqueEcommerceService_OpaqueStreamCustomerActivity_Handler,\n\t\t\tServerStreams: true,\n\t\t\tClientStreams: true,\n\t\t},\n\t},\n\tMetadata: \"examples/internal/proto/examplepb/opaque.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - allow_merge=true\n      - merge_file_name=examples/internal/proto/examplepb/openapi_merge\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"Merging Services\",\n    \"description\": \"This is an example of merging two proto files.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"ServiceA\"\n    },\n    {\n      \"name\": \"ServiceC\"\n    },\n    {\n      \"name\": \"ServiceB\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/a/1\": {\n      \"post\": {\n        \"summary\": \"ServiceA.MethodOne receives InMessageA and returns OutMessageA\",\n        \"description\": \"Here is the detail explanation about ServiceA.MethodOne.\",\n        \"operationId\": \"ServiceA_MethodOne\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageA\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"InMessageA represents a message to ServiceA and ServiceC.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceA\"\n        ]\n      }\n    },\n    \"/v1/example/a/2\": {\n      \"post\": {\n        \"summary\": \"ServiceA.MethodTwo receives OutMessageA and returns InMessageA\",\n        \"description\": \"Here is the detail explanation about ServiceA.MethodTwo.\",\n        \"operationId\": \"ServiceA_MethodTwo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"OutMessageA represents a message returned from ServiceA.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceA\"\n        ]\n      }\n    },\n    \"/v1/example/b/1\": {\n      \"post\": {\n        \"summary\": \"ServiceB.MethodOne receives InMessageB and returns OutMessageB\",\n        \"description\": \"Here is the detail explanation about ServiceB.MethodOne.\",\n        \"operationId\": \"ServiceB_MethodOne\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageB\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"InMessageB represents a message to ServiceB.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageB\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceB\"\n        ]\n      }\n    },\n    \"/v1/example/b/2\": {\n      \"post\": {\n        \"summary\": \"ServiceB.MethodTwo receives OutMessageB and returns InMessageB\",\n        \"description\": \"Here is the detail explanation about ServiceB.MethodTwo.\",\n        \"operationId\": \"ServiceB_MethodTwo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageB\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"OutMessageB represents a message returned from ServiceB.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageB\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceB\"\n        ]\n      }\n    },\n    \"/v1/example/c/1\": {\n      \"post\": {\n        \"summary\": \"ServiceC.MethodOne receives InMessageA and returns OutMessageC\",\n        \"description\": \"Here is the detail explanation about ServiceC.MethodOne.\",\n        \"operationId\": \"ServiceC_MethodOne\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageC\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"InMessageA represents a message to ServiceA and ServiceC.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceC\"\n        ]\n      }\n    },\n    \"/v1/example/c/2\": {\n      \"post\": {\n        \"summary\": \"ServiceC.MethodTwo receives OutMessageA and returns InMessageA\",\n        \"description\": \"Here is the detail explanation about ServiceC.MethodTwo.\",\n        \"operationId\": \"ServiceC_MethodTwo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"OutMessageA represents a message returned from ServiceA.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceC\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbInMessageA\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"title\": \"Here is the explanation about InMessageA.values\"\n        }\n      },\n      \"description\": \"InMessageA represents a message to ServiceA and ServiceC.\"\n    },\n    \"examplepbInMessageB\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"title\": \"Here is the explanation about InMessageB.values\"\n        }\n      },\n      \"description\": \"InMessageB represents a message to ServiceB.\"\n    },\n    \"examplepbOutMessageA\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"title\": \"Here is the explanation about OutMessageA.value\"\n        }\n      },\n      \"description\": \"OutMessageA represents a message returned from ServiceA.\"\n    },\n    \"examplepbOutMessageB\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"title\": \"Here is the explanation about OutMessageB.value\"\n        }\n      },\n      \"description\": \"OutMessageB represents a message returned from ServiceB.\"\n    },\n    \"examplepbOutMessageC\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"title\": \"Here is the explanation about OutMessageC.value\"\n        }\n      },\n      \"description\": \"OutMessageC represents a message returned from ServiceC.\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_a.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/openapi_merge_a.proto\n\n// Merging Services\n//\n// This is an example of merging two proto files.\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// InMessageA represents a message to ServiceA and ServiceC.\ntype InMessageA struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Here is the explanation about InMessageA.values\n\tValues []string `protobuf:\"bytes,1,rep,name=values,proto3\" json:\"values,omitempty\"`\n}\n\nfunc (x *InMessageA) Reset() {\n\t*x = InMessageA{}\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *InMessageA) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*InMessageA) ProtoMessage() {}\n\nfunc (x *InMessageA) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use InMessageA.ProtoReflect.Descriptor instead.\nfunc (*InMessageA) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *InMessageA) GetValues() []string {\n\tif x != nil {\n\t\treturn x.Values\n\t}\n\treturn nil\n}\n\n// OutMessageA represents a message returned from ServiceA.\ntype OutMessageA struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Here is the explanation about OutMessageA.value\n\tValue string `protobuf:\"bytes,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (x *OutMessageA) Reset() {\n\t*x = OutMessageA{}\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OutMessageA) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OutMessageA) ProtoMessage() {}\n\nfunc (x *OutMessageA) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OutMessageA.ProtoReflect.Descriptor instead.\nfunc (*OutMessageA) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *OutMessageA) GetValue() string {\n\tif x != nil {\n\t\treturn x.Value\n\t}\n\treturn \"\"\n}\n\n// OutMessageC represents a message returned from ServiceC.\ntype OutMessageC struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Here is the explanation about OutMessageC.value\n\tValue string `protobuf:\"bytes,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (x *OutMessageC) Reset() {\n\t*x = OutMessageC{}\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OutMessageC) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OutMessageC) ProtoMessage() {}\n\nfunc (x *OutMessageC) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OutMessageC.ProtoReflect.Descriptor instead.\nfunc (*OutMessageC) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *OutMessageC) GetValue() string {\n\tif x != nil {\n\t\treturn x.Value\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_proto_examplepb_openapi_merge_a_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = []byte{\n\t0x0a, 0x37, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x6d, 0x65, 0x72, 0x67,\n\t0x65, 0x5f, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,\n\t0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x22, 0x24, 0x0a, 0x0a, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x12,\n\t0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,\n\t0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x23, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x4d, 0x65,\n\t0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23, 0x0a, 0x0b,\n\t0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x12, 0x14, 0x0a, 0x05, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x32, 0xb8, 0x02, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x12, 0x94,\n\t0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x41, 0x1a, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75,\n\t0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02,\n\t0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x2f, 0x61, 0x2f, 0x31, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,\n\t0x54, 0x77, 0x6f, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f,\n\t0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41,\n\t0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31,\n\t0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x2f, 0x32, 0x32, 0xb8, 0x02, 0x0a,\n\t0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65,\n\t0x74, 0x68, 0x6f, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x1a, 0x35, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x43, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22,\n\t0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x2f, 0x31,\n\t0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x35,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x41, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x22, 0x1a, 0x82, 0xd3, 0xe4,\n\t0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x2f, 0x63, 0x2f, 0x32, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75,\n\t0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79,\n\t0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData = file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes = make([]protoimpl.MessageInfo, 3)\nvar file_examples_internal_proto_examplepb_openapi_merge_a_proto_goTypes = []any{\n\t(*InMessageA)(nil),  // 0: grpc.gateway.examples.internal.examplepb.InMessageA\n\t(*OutMessageA)(nil), // 1: grpc.gateway.examples.internal.examplepb.OutMessageA\n\t(*OutMessageC)(nil), // 2: grpc.gateway.examples.internal.examplepb.OutMessageC\n}\nvar file_examples_internal_proto_examplepb_openapi_merge_a_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.examplepb.ServiceA.MethodOne:input_type -> grpc.gateway.examples.internal.examplepb.InMessageA\n\t1, // 1: grpc.gateway.examples.internal.examplepb.ServiceA.MethodTwo:input_type -> grpc.gateway.examples.internal.examplepb.OutMessageA\n\t0, // 2: grpc.gateway.examples.internal.examplepb.ServiceC.MethodOne:input_type -> grpc.gateway.examples.internal.examplepb.InMessageA\n\t1, // 3: grpc.gateway.examples.internal.examplepb.ServiceC.MethodTwo:input_type -> grpc.gateway.examples.internal.examplepb.OutMessageA\n\t1, // 4: grpc.gateway.examples.internal.examplepb.ServiceA.MethodOne:output_type -> grpc.gateway.examples.internal.examplepb.OutMessageA\n\t0, // 5: grpc.gateway.examples.internal.examplepb.ServiceA.MethodTwo:output_type -> grpc.gateway.examples.internal.examplepb.InMessageA\n\t2, // 6: grpc.gateway.examples.internal.examplepb.ServiceC.MethodOne:output_type -> grpc.gateway.examples.internal.examplepb.OutMessageC\n\t0, // 7: grpc.gateway.examples.internal.examplepb.ServiceC.MethodTwo:output_type -> grpc.gateway.examples.internal.examplepb.InMessageA\n\t4, // [4:8] is the sub-list for method output_type\n\t0, // [0:4] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_openapi_merge_a_proto_init() }\nfunc file_examples_internal_proto_examplepb_openapi_merge_a_proto_init() {\n\tif File_examples_internal_proto_examplepb_openapi_merge_a_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   3,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   2,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_openapi_merge_a_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_openapi_merge_a_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_openapi_merge_a_proto = out.File\n\tfile_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_openapi_merge_a_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_openapi_merge_a_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/openapi_merge_a.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_ServiceA_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceAClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq InMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.MethodOne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ServiceA_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceAServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq InMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.MethodOne(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ServiceA_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceAClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OutMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.MethodTwo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ServiceA_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceAServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OutMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.MethodTwo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ServiceC_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceCClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq InMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.MethodOne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ServiceC_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceCServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq InMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.MethodOne(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ServiceC_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceCClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OutMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.MethodTwo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ServiceC_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceCServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OutMessageA\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.MethodTwo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterServiceAHandlerServer registers the http handlers for service ServiceA to \"mux\".\n// UnaryRPC     :call ServiceAServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterServiceAHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceAServer) error {\n\tmux.Handle(http.MethodPost, pattern_ServiceA_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne\", runtime.WithHTTPPathPattern(\"/v1/example/a/1\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ServiceA_MethodOne_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceA_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ServiceA_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo\", runtime.WithHTTPPathPattern(\"/v1/example/a/2\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ServiceA_MethodTwo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceA_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterServiceCHandlerServer registers the http handlers for service ServiceC to \"mux\".\n// UnaryRPC     :call ServiceCServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterServiceCHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceCServer) error {\n\tmux.Handle(http.MethodPost, pattern_ServiceC_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne\", runtime.WithHTTPPathPattern(\"/v1/example/c/1\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ServiceC_MethodOne_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceC_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ServiceC_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo\", runtime.WithHTTPPathPattern(\"/v1/example/c/2\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ServiceC_MethodTwo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceC_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterServiceAHandlerFromEndpoint is same as RegisterServiceAHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterServiceAHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterServiceAHandler(ctx, mux, conn)\n}\n\n// RegisterServiceAHandler registers the http handlers for service ServiceA to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterServiceAHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterServiceAHandlerClient(ctx, mux, NewServiceAClient(conn))\n}\n\n// RegisterServiceAHandlerClient registers the http handlers for service ServiceA\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"ServiceAClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"ServiceAClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"ServiceAClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceAClient) error {\n\tmux.Handle(http.MethodPost, pattern_ServiceA_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne\", runtime.WithHTTPPathPattern(\"/v1/example/a/1\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ServiceA_MethodOne_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceA_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ServiceA_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo\", runtime.WithHTTPPathPattern(\"/v1/example/a/2\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ServiceA_MethodTwo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceA_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_ServiceA_MethodOne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"a\", \"1\"}, \"\"))\n\tpattern_ServiceA_MethodTwo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"a\", \"2\"}, \"\"))\n)\n\nvar (\n\tforward_ServiceA_MethodOne_0 = runtime.ForwardResponseMessage\n\tforward_ServiceA_MethodTwo_0 = runtime.ForwardResponseMessage\n)\n\n// RegisterServiceCHandlerFromEndpoint is same as RegisterServiceCHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterServiceCHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterServiceCHandler(ctx, mux, conn)\n}\n\n// RegisterServiceCHandler registers the http handlers for service ServiceC to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterServiceCHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterServiceCHandlerClient(ctx, mux, NewServiceCClient(conn))\n}\n\n// RegisterServiceCHandlerClient registers the http handlers for service ServiceC\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"ServiceCClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"ServiceCClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"ServiceCClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceCClient) error {\n\tmux.Handle(http.MethodPost, pattern_ServiceC_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne\", runtime.WithHTTPPathPattern(\"/v1/example/c/1\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ServiceC_MethodOne_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceC_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ServiceC_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo\", runtime.WithHTTPPathPattern(\"/v1/example/c/2\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ServiceC_MethodTwo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceC_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_ServiceC_MethodOne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"c\", \"1\"}, \"\"))\n\tpattern_ServiceC_MethodTwo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"c\", \"2\"}, \"\"))\n)\n\nvar (\n\tforward_ServiceC_MethodOne_0 = runtime.ForwardResponseMessage\n\tforward_ServiceC_MethodTwo_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_a.proto",
    "content": "syntax = \"proto3\";\n\n// Merging Services\n//\n// This is an example of merging two proto files.\npackage grpc.gateway.examples.internal.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// InMessageA represents a message to ServiceA and ServiceC.\nmessage InMessageA {\n  // Here is the explanation about InMessageA.values\n  repeated string values = 1;\n}\n\n// OutMessageA represents a message returned from ServiceA.\nmessage OutMessageA {\n  // Here is the explanation about OutMessageA.value\n  string value = 1;\n}\n\n// OutMessageC represents a message returned from ServiceC.\nmessage OutMessageC {\n  // Here is the explanation about OutMessageC.value\n  string value = 1;\n}\n\n// ServiceA provides MethodOne and MethodTwo\nservice ServiceA {\n  // ServiceA.MethodOne receives InMessageA and returns OutMessageA\n  //\n  // Here is the detail explanation about ServiceA.MethodOne.\n  rpc MethodOne(InMessageA) returns (OutMessageA) {\n    option (google.api.http) = {\n      post: \"/v1/example/a/1\"\n      body: \"*\"\n    };\n  }\n  // ServiceA.MethodTwo receives OutMessageA and returns InMessageA\n  //\n  // Here is the detail explanation about ServiceA.MethodTwo.\n  rpc MethodTwo(OutMessageA) returns (InMessageA) {\n    option (google.api.http) = {\n      post: \"/v1/example/a/2\"\n      body: \"*\"\n    };\n  }\n}\n\n// ServiceC service responds to incoming merge requests.\nservice ServiceC {\n  // ServiceC.MethodOne receives InMessageA and returns OutMessageC\n  //\n  // Here is the detail explanation about ServiceC.MethodOne.\n  rpc MethodOne(InMessageA) returns (OutMessageC) {\n    option (google.api.http) = {\n      post: \"/v1/example/c/1\"\n      body: \"*\"\n    };\n  }\n  // ServiceC.MethodTwo receives OutMessageA and returns InMessageA\n  //\n  // Here is the detail explanation about ServiceC.MethodTwo.\n  rpc MethodTwo(OutMessageA) returns (InMessageA) {\n    option (google.api.http) = {\n      post: \"/v1/example/c/2\"\n      body: \"*\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_a.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"Merging Services\",\n    \"description\": \"This is an example of merging two proto files.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"ServiceA\"\n    },\n    {\n      \"name\": \"ServiceC\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/a/1\": {\n      \"post\": {\n        \"summary\": \"ServiceA.MethodOne receives InMessageA and returns OutMessageA\",\n        \"description\": \"Here is the detail explanation about ServiceA.MethodOne.\",\n        \"operationId\": \"ServiceA_MethodOne\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageA\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"InMessageA represents a message to ServiceA and ServiceC.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceA\"\n        ]\n      }\n    },\n    \"/v1/example/a/2\": {\n      \"post\": {\n        \"summary\": \"ServiceA.MethodTwo receives OutMessageA and returns InMessageA\",\n        \"description\": \"Here is the detail explanation about ServiceA.MethodTwo.\",\n        \"operationId\": \"ServiceA_MethodTwo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"OutMessageA represents a message returned from ServiceA.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceA\"\n        ]\n      }\n    },\n    \"/v1/example/c/1\": {\n      \"post\": {\n        \"summary\": \"ServiceC.MethodOne receives InMessageA and returns OutMessageC\",\n        \"description\": \"Here is the detail explanation about ServiceC.MethodOne.\",\n        \"operationId\": \"ServiceC_MethodOne\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageC\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"InMessageA represents a message to ServiceA and ServiceC.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceC\"\n        ]\n      }\n    },\n    \"/v1/example/c/2\": {\n      \"post\": {\n        \"summary\": \"ServiceC.MethodTwo receives OutMessageA and returns InMessageA\",\n        \"description\": \"Here is the detail explanation about ServiceC.MethodTwo.\",\n        \"operationId\": \"ServiceC_MethodTwo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageA\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"OutMessageA represents a message returned from ServiceA.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageA\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceC\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbInMessageA\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"title\": \"Here is the explanation about InMessageA.values\"\n        }\n      },\n      \"description\": \"InMessageA represents a message to ServiceA and ServiceC.\"\n    },\n    \"examplepbOutMessageA\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"title\": \"Here is the explanation about OutMessageA.value\"\n        }\n      },\n      \"description\": \"OutMessageA represents a message returned from ServiceA.\"\n    },\n    \"examplepbOutMessageC\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"title\": \"Here is the explanation about OutMessageC.value\"\n        }\n      },\n      \"description\": \"OutMessageC represents a message returned from ServiceC.\"\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/openapi_merge_a.proto\n\n// Merging Services\n//\n// This is an example of merging two proto files.\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tServiceA_MethodOne_FullMethodName = \"/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne\"\n\tServiceA_MethodTwo_FullMethodName = \"/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo\"\n)\n\n// ServiceAClient is the client API for ServiceA service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// ServiceA provides MethodOne and MethodTwo\ntype ServiceAClient interface {\n\t// ServiceA.MethodOne receives InMessageA and returns OutMessageA\n\t//\n\t// Here is the detail explanation about ServiceA.MethodOne.\n\tMethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageA, error)\n\t// ServiceA.MethodTwo receives OutMessageA and returns InMessageA\n\t//\n\t// Here is the detail explanation about ServiceA.MethodTwo.\n\tMethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error)\n}\n\ntype serviceAClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewServiceAClient(cc grpc.ClientConnInterface) ServiceAClient {\n\treturn &serviceAClient{cc}\n}\n\nfunc (c *serviceAClient) MethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageA, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OutMessageA)\n\terr := c.cc.Invoke(ctx, ServiceA_MethodOne_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *serviceAClient) MethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(InMessageA)\n\terr := c.cc.Invoke(ctx, ServiceA_MethodTwo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ServiceAServer is the server API for ServiceA service.\n// All implementations should embed UnimplementedServiceAServer\n// for forward compatibility.\n//\n// ServiceA provides MethodOne and MethodTwo\ntype ServiceAServer interface {\n\t// ServiceA.MethodOne receives InMessageA and returns OutMessageA\n\t//\n\t// Here is the detail explanation about ServiceA.MethodOne.\n\tMethodOne(context.Context, *InMessageA) (*OutMessageA, error)\n\t// ServiceA.MethodTwo receives OutMessageA and returns InMessageA\n\t//\n\t// Here is the detail explanation about ServiceA.MethodTwo.\n\tMethodTwo(context.Context, *OutMessageA) (*InMessageA, error)\n}\n\n// UnimplementedServiceAServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedServiceAServer struct{}\n\nfunc (UnimplementedServiceAServer) MethodOne(context.Context, *InMessageA) (*OutMessageA, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method MethodOne not implemented\")\n}\nfunc (UnimplementedServiceAServer) MethodTwo(context.Context, *OutMessageA) (*InMessageA, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method MethodTwo not implemented\")\n}\nfunc (UnimplementedServiceAServer) testEmbeddedByValue() {}\n\n// UnsafeServiceAServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to ServiceAServer will\n// result in compilation errors.\ntype UnsafeServiceAServer interface {\n\tmustEmbedUnimplementedServiceAServer()\n}\n\nfunc RegisterServiceAServer(s grpc.ServiceRegistrar, srv ServiceAServer) {\n\t// If the following call pancis, it indicates UnimplementedServiceAServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&ServiceA_ServiceDesc, srv)\n}\n\nfunc _ServiceA_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(InMessageA)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ServiceAServer).MethodOne(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ServiceA_MethodOne_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ServiceAServer).MethodOne(ctx, req.(*InMessageA))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ServiceA_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OutMessageA)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ServiceAServer).MethodTwo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ServiceA_MethodTwo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ServiceAServer).MethodTwo(ctx, req.(*OutMessageA))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// ServiceA_ServiceDesc is the grpc.ServiceDesc for ServiceA service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar ServiceA_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.examplepb.ServiceA\",\n\tHandlerType: (*ServiceAServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"MethodOne\",\n\t\t\tHandler:    _ServiceA_MethodOne_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"MethodTwo\",\n\t\t\tHandler:    _ServiceA_MethodTwo_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/openapi_merge_a.proto\",\n}\n\nconst (\n\tServiceC_MethodOne_FullMethodName = \"/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne\"\n\tServiceC_MethodTwo_FullMethodName = \"/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo\"\n)\n\n// ServiceCClient is the client API for ServiceC service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// ServiceC service responds to incoming merge requests.\ntype ServiceCClient interface {\n\t// ServiceC.MethodOne receives InMessageA and returns OutMessageC\n\t//\n\t// Here is the detail explanation about ServiceC.MethodOne.\n\tMethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageC, error)\n\t// ServiceC.MethodTwo receives OutMessageA and returns InMessageA\n\t//\n\t// Here is the detail explanation about ServiceC.MethodTwo.\n\tMethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error)\n}\n\ntype serviceCClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewServiceCClient(cc grpc.ClientConnInterface) ServiceCClient {\n\treturn &serviceCClient{cc}\n}\n\nfunc (c *serviceCClient) MethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageC, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OutMessageC)\n\terr := c.cc.Invoke(ctx, ServiceC_MethodOne_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *serviceCClient) MethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(InMessageA)\n\terr := c.cc.Invoke(ctx, ServiceC_MethodTwo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ServiceCServer is the server API for ServiceC service.\n// All implementations should embed UnimplementedServiceCServer\n// for forward compatibility.\n//\n// ServiceC service responds to incoming merge requests.\ntype ServiceCServer interface {\n\t// ServiceC.MethodOne receives InMessageA and returns OutMessageC\n\t//\n\t// Here is the detail explanation about ServiceC.MethodOne.\n\tMethodOne(context.Context, *InMessageA) (*OutMessageC, error)\n\t// ServiceC.MethodTwo receives OutMessageA and returns InMessageA\n\t//\n\t// Here is the detail explanation about ServiceC.MethodTwo.\n\tMethodTwo(context.Context, *OutMessageA) (*InMessageA, error)\n}\n\n// UnimplementedServiceCServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedServiceCServer struct{}\n\nfunc (UnimplementedServiceCServer) MethodOne(context.Context, *InMessageA) (*OutMessageC, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method MethodOne not implemented\")\n}\nfunc (UnimplementedServiceCServer) MethodTwo(context.Context, *OutMessageA) (*InMessageA, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method MethodTwo not implemented\")\n}\nfunc (UnimplementedServiceCServer) testEmbeddedByValue() {}\n\n// UnsafeServiceCServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to ServiceCServer will\n// result in compilation errors.\ntype UnsafeServiceCServer interface {\n\tmustEmbedUnimplementedServiceCServer()\n}\n\nfunc RegisterServiceCServer(s grpc.ServiceRegistrar, srv ServiceCServer) {\n\t// If the following call pancis, it indicates UnimplementedServiceCServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&ServiceC_ServiceDesc, srv)\n}\n\nfunc _ServiceC_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(InMessageA)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ServiceCServer).MethodOne(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ServiceC_MethodOne_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ServiceCServer).MethodOne(ctx, req.(*InMessageA))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ServiceC_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OutMessageA)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ServiceCServer).MethodTwo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ServiceC_MethodTwo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ServiceCServer).MethodTwo(ctx, req.(*OutMessageA))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// ServiceC_ServiceDesc is the grpc.ServiceDesc for ServiceC service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar ServiceC_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.examplepb.ServiceC\",\n\tHandlerType: (*ServiceCServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"MethodOne\",\n\t\t\tHandler:    _ServiceC_MethodOne_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"MethodTwo\",\n\t\t\tHandler:    _ServiceC_MethodTwo_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/openapi_merge_a.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_b.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/openapi_merge_b.proto\n\n// Merging Services\n//\n// This is an example of merging two proto files.\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// InMessageB represents a message to ServiceB.\ntype InMessageB struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Here is the explanation about InMessageB.values\n\tValue string `protobuf:\"bytes,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (x *InMessageB) Reset() {\n\t*x = InMessageB{}\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *InMessageB) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*InMessageB) ProtoMessage() {}\n\nfunc (x *InMessageB) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use InMessageB.ProtoReflect.Descriptor instead.\nfunc (*InMessageB) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *InMessageB) GetValue() string {\n\tif x != nil {\n\t\treturn x.Value\n\t}\n\treturn \"\"\n}\n\n// OutMessageB represents a message returned from ServiceB.\ntype OutMessageB struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Here is the explanation about OutMessageB.value\n\tValues []string `protobuf:\"bytes,1,rep,name=values,proto3\" json:\"values,omitempty\"`\n}\n\nfunc (x *OutMessageB) Reset() {\n\t*x = OutMessageB{}\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OutMessageB) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OutMessageB) ProtoMessage() {}\n\nfunc (x *OutMessageB) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OutMessageB.ProtoReflect.Descriptor instead.\nfunc (*OutMessageB) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *OutMessageB) GetValues() []string {\n\tif x != nil {\n\t\treturn x.Values\n\t}\n\treturn nil\n}\n\nvar File_examples_internal_proto_examplepb_openapi_merge_b_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc = []byte{\n\t0x0a, 0x37, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x6d, 0x65, 0x72, 0x67,\n\t0x65, 0x5f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,\n\t0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x22, 0x22, 0x0a, 0x0a, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x12,\n\t0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x42, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01,\n\t0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x32, 0xb8, 0x02, 0x0a,\n\t0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65,\n\t0x74, 0x68, 0x6f, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x1a, 0x35, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x42, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22,\n\t0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x62, 0x2f, 0x31,\n\t0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x35,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x42, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x22, 0x1a, 0x82, 0xd3, 0xe4,\n\t0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x2f, 0x62, 0x2f, 0x32, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75,\n\t0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79,\n\t0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData = file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes = make([]protoimpl.MessageInfo, 2)\nvar file_examples_internal_proto_examplepb_openapi_merge_b_proto_goTypes = []any{\n\t(*InMessageB)(nil),  // 0: grpc.gateway.examples.internal.examplepb.InMessageB\n\t(*OutMessageB)(nil), // 1: grpc.gateway.examples.internal.examplepb.OutMessageB\n}\nvar file_examples_internal_proto_examplepb_openapi_merge_b_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.examplepb.ServiceB.MethodOne:input_type -> grpc.gateway.examples.internal.examplepb.InMessageB\n\t1, // 1: grpc.gateway.examples.internal.examplepb.ServiceB.MethodTwo:input_type -> grpc.gateway.examples.internal.examplepb.OutMessageB\n\t1, // 2: grpc.gateway.examples.internal.examplepb.ServiceB.MethodOne:output_type -> grpc.gateway.examples.internal.examplepb.OutMessageB\n\t0, // 3: grpc.gateway.examples.internal.examplepb.ServiceB.MethodTwo:output_type -> grpc.gateway.examples.internal.examplepb.InMessageB\n\t2, // [2:4] is the sub-list for method output_type\n\t0, // [0:2] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_openapi_merge_b_proto_init() }\nfunc file_examples_internal_proto_examplepb_openapi_merge_b_proto_init() {\n\tif File_examples_internal_proto_examplepb_openapi_merge_b_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   2,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_openapi_merge_b_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_openapi_merge_b_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_openapi_merge_b_proto = out.File\n\tfile_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_openapi_merge_b_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_openapi_merge_b_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/openapi_merge_b.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_ServiceB_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceBClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq InMessageB\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.MethodOne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ServiceB_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceBServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq InMessageB\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.MethodOne(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ServiceB_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceBClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OutMessageB\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.MethodTwo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ServiceB_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceBServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq OutMessageB\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.MethodTwo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterServiceBHandlerServer registers the http handlers for service ServiceB to \"mux\".\n// UnaryRPC     :call ServiceBServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterServiceBHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceBServer) error {\n\tmux.Handle(http.MethodPost, pattern_ServiceB_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne\", runtime.WithHTTPPathPattern(\"/v1/example/b/1\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ServiceB_MethodOne_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceB_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ServiceB_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo\", runtime.WithHTTPPathPattern(\"/v1/example/b/2\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ServiceB_MethodTwo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceB_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterServiceBHandlerFromEndpoint is same as RegisterServiceBHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterServiceBHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterServiceBHandler(ctx, mux, conn)\n}\n\n// RegisterServiceBHandler registers the http handlers for service ServiceB to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterServiceBHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterServiceBHandlerClient(ctx, mux, NewServiceBClient(conn))\n}\n\n// RegisterServiceBHandlerClient registers the http handlers for service ServiceB\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"ServiceBClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"ServiceBClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"ServiceBClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceBClient) error {\n\tmux.Handle(http.MethodPost, pattern_ServiceB_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne\", runtime.WithHTTPPathPattern(\"/v1/example/b/1\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ServiceB_MethodOne_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceB_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_ServiceB_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo\", runtime.WithHTTPPathPattern(\"/v1/example/b/2\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ServiceB_MethodTwo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ServiceB_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_ServiceB_MethodOne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"b\", \"1\"}, \"\"))\n\tpattern_ServiceB_MethodTwo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"b\", \"2\"}, \"\"))\n)\n\nvar (\n\tforward_ServiceB_MethodOne_0 = runtime.ForwardResponseMessage\n\tforward_ServiceB_MethodTwo_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_b.proto",
    "content": "syntax = \"proto3\";\n\n// Merging Services\n//\n// This is an example of merging two proto files.\npackage grpc.gateway.examples.internal.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// InMessageB represents a message to ServiceB.\nmessage InMessageB {\n  // Here is the explanation about InMessageB.values\n  string value = 1;\n}\n\n// OutMessageB represents a message returned from ServiceB.\nmessage OutMessageB {\n  // Here is the explanation about OutMessageB.value\n  repeated string values = 1;\n}\n\n// ServiceB service responds to incoming merge requests.\nservice ServiceB {\n  // ServiceB.MethodOne receives InMessageB and returns OutMessageB\n  //\n  // Here is the detail explanation about ServiceB.MethodOne.\n  rpc MethodOne(InMessageB) returns (OutMessageB) {\n    option (google.api.http) = {\n      post: \"/v1/example/b/1\"\n      body: \"*\"\n    };\n  }\n  // ServiceB.MethodTwo receives OutMessageB and returns InMessageB\n  //\n  // Here is the detail explanation about ServiceB.MethodTwo.\n  rpc MethodTwo(OutMessageB) returns (InMessageB) {\n    option (google.api.http) = {\n      post: \"/v1/example/b/2\"\n      body: \"*\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_b.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"Merging Services\",\n    \"description\": \"This is an example of merging two proto files.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"ServiceB\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/b/1\": {\n      \"post\": {\n        \"summary\": \"ServiceB.MethodOne receives InMessageB and returns OutMessageB\",\n        \"description\": \"Here is the detail explanation about ServiceB.MethodOne.\",\n        \"operationId\": \"ServiceB_MethodOne\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageB\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"InMessageB represents a message to ServiceB.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageB\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceB\"\n        ]\n      }\n    },\n    \"/v1/example/b/2\": {\n      \"post\": {\n        \"summary\": \"ServiceB.MethodTwo receives OutMessageB and returns InMessageB\",\n        \"description\": \"Here is the detail explanation about ServiceB.MethodTwo.\",\n        \"operationId\": \"ServiceB_MethodTwo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbInMessageB\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"OutMessageB represents a message returned from ServiceB.\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbOutMessageB\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"ServiceB\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbInMessageB\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"title\": \"Here is the explanation about InMessageB.values\"\n        }\n      },\n      \"description\": \"InMessageB represents a message to ServiceB.\"\n    },\n    \"examplepbOutMessageB\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"title\": \"Here is the explanation about OutMessageB.value\"\n        }\n      },\n      \"description\": \"OutMessageB represents a message returned from ServiceB.\"\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/openapi_merge_b.proto\n\n// Merging Services\n//\n// This is an example of merging two proto files.\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tServiceB_MethodOne_FullMethodName = \"/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne\"\n\tServiceB_MethodTwo_FullMethodName = \"/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo\"\n)\n\n// ServiceBClient is the client API for ServiceB service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// ServiceB service responds to incoming merge requests.\ntype ServiceBClient interface {\n\t// ServiceB.MethodOne receives InMessageB and returns OutMessageB\n\t//\n\t// Here is the detail explanation about ServiceB.MethodOne.\n\tMethodOne(ctx context.Context, in *InMessageB, opts ...grpc.CallOption) (*OutMessageB, error)\n\t// ServiceB.MethodTwo receives OutMessageB and returns InMessageB\n\t//\n\t// Here is the detail explanation about ServiceB.MethodTwo.\n\tMethodTwo(ctx context.Context, in *OutMessageB, opts ...grpc.CallOption) (*InMessageB, error)\n}\n\ntype serviceBClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewServiceBClient(cc grpc.ClientConnInterface) ServiceBClient {\n\treturn &serviceBClient{cc}\n}\n\nfunc (c *serviceBClient) MethodOne(ctx context.Context, in *InMessageB, opts ...grpc.CallOption) (*OutMessageB, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(OutMessageB)\n\terr := c.cc.Invoke(ctx, ServiceB_MethodOne_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *serviceBClient) MethodTwo(ctx context.Context, in *OutMessageB, opts ...grpc.CallOption) (*InMessageB, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(InMessageB)\n\terr := c.cc.Invoke(ctx, ServiceB_MethodTwo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ServiceBServer is the server API for ServiceB service.\n// All implementations should embed UnimplementedServiceBServer\n// for forward compatibility.\n//\n// ServiceB service responds to incoming merge requests.\ntype ServiceBServer interface {\n\t// ServiceB.MethodOne receives InMessageB and returns OutMessageB\n\t//\n\t// Here is the detail explanation about ServiceB.MethodOne.\n\tMethodOne(context.Context, *InMessageB) (*OutMessageB, error)\n\t// ServiceB.MethodTwo receives OutMessageB and returns InMessageB\n\t//\n\t// Here is the detail explanation about ServiceB.MethodTwo.\n\tMethodTwo(context.Context, *OutMessageB) (*InMessageB, error)\n}\n\n// UnimplementedServiceBServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedServiceBServer struct{}\n\nfunc (UnimplementedServiceBServer) MethodOne(context.Context, *InMessageB) (*OutMessageB, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method MethodOne not implemented\")\n}\nfunc (UnimplementedServiceBServer) MethodTwo(context.Context, *OutMessageB) (*InMessageB, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method MethodTwo not implemented\")\n}\nfunc (UnimplementedServiceBServer) testEmbeddedByValue() {}\n\n// UnsafeServiceBServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to ServiceBServer will\n// result in compilation errors.\ntype UnsafeServiceBServer interface {\n\tmustEmbedUnimplementedServiceBServer()\n}\n\nfunc RegisterServiceBServer(s grpc.ServiceRegistrar, srv ServiceBServer) {\n\t// If the following call pancis, it indicates UnimplementedServiceBServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&ServiceB_ServiceDesc, srv)\n}\n\nfunc _ServiceB_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(InMessageB)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ServiceBServer).MethodOne(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ServiceB_MethodOne_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ServiceBServer).MethodOne(ctx, req.(*InMessageB))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ServiceB_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(OutMessageB)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ServiceBServer).MethodTwo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ServiceB_MethodTwo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ServiceBServer).MethodTwo(ctx, req.(*OutMessageB))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// ServiceB_ServiceDesc is the grpc.ServiceDesc for ServiceB service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar ServiceB_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.examplepb.ServiceB\",\n\tHandlerType: (*ServiceBServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"MethodOne\",\n\t\t\tHandler:    _ServiceB_MethodOne_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"MethodTwo\",\n\t\t\tHandler:    _ServiceB_MethodTwo_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/openapi_merge_b.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/proto3_field_semantics.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - use_proto3_field_semantics=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/proto3_field_semantics.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/proto3_field_semantics.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype GetFilterRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n}\n\nfunc (x *GetFilterRequest) Reset() {\n\t*x = GetFilterRequest{}\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *GetFilterRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*GetFilterRequest) ProtoMessage() {}\n\nfunc (x *GetFilterRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use GetFilterRequest.ProtoReflect.Descriptor instead.\nfunc (*GetFilterRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *GetFilterRequest) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\ntype GetFilterResponse struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tFilter *Filter `protobuf:\"bytes,1,opt,name=filter,proto3\" json:\"filter,omitempty\"`\n}\n\nfunc (x *GetFilterResponse) Reset() {\n\t*x = GetFilterResponse{}\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *GetFilterResponse) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*GetFilterResponse) ProtoMessage() {}\n\nfunc (x *GetFilterResponse) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use GetFilterResponse.ProtoReflect.Descriptor instead.\nfunc (*GetFilterResponse) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *GetFilterResponse) GetFilter() *Filter {\n\tif x != nil {\n\t\treturn x.Filter\n\t}\n\treturn nil\n}\n\ntype Filter struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\t// Types that are assignable to FilterUnion:\n\t//\n\t//\t*Filter_Condition\n\t//\t*Filter_Group\n\tFilterUnion isFilter_FilterUnion `protobuf_oneof:\"filter_union\"`\n}\n\nfunc (x *Filter) Reset() {\n\t*x = Filter{}\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Filter) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Filter) ProtoMessage() {}\n\nfunc (x *Filter) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Filter.ProtoReflect.Descriptor instead.\nfunc (*Filter) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *Filter) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *Filter) GetFilterUnion() isFilter_FilterUnion {\n\tif m != nil {\n\t\treturn m.FilterUnion\n\t}\n\treturn nil\n}\n\nfunc (x *Filter) GetCondition() *FilterCondition {\n\tif x, ok := x.GetFilterUnion().(*Filter_Condition); ok {\n\t\treturn x.Condition\n\t}\n\treturn nil\n}\n\nfunc (x *Filter) GetGroup() *FilterGroup {\n\tif x, ok := x.GetFilterUnion().(*Filter_Group); ok {\n\t\treturn x.Group\n\t}\n\treturn nil\n}\n\ntype isFilter_FilterUnion interface {\n\tisFilter_FilterUnion()\n}\n\ntype Filter_Condition struct {\n\tCondition *FilterCondition `protobuf:\"bytes,2,opt,name=condition,proto3,oneof\"`\n}\n\ntype Filter_Group struct {\n\tGroup *FilterGroup `protobuf:\"bytes,3,opt,name=group,proto3,oneof\"`\n}\n\nfunc (*Filter_Condition) isFilter_FilterUnion() {}\n\nfunc (*Filter_Group) isFilter_FilterUnion() {}\n\ntype FilterCondition struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tField string `protobuf:\"bytes,1,opt,name=field,proto3\" json:\"field,omitempty\"`\n\tValue string `protobuf:\"bytes,2,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (x *FilterCondition) Reset() {\n\t*x = FilterCondition{}\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *FilterCondition) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*FilterCondition) ProtoMessage() {}\n\nfunc (x *FilterCondition) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use FilterCondition.ProtoReflect.Descriptor instead.\nfunc (*FilterCondition) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *FilterCondition) GetField() string {\n\tif x != nil {\n\t\treturn x.Field\n\t}\n\treturn \"\"\n}\n\nfunc (x *FilterCondition) GetValue() string {\n\tif x != nil {\n\t\treturn x.Value\n\t}\n\treturn \"\"\n}\n\ntype FilterGroup struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tFilters  []*Filter `protobuf:\"bytes,1,rep,name=filters,proto3\" json:\"filters,omitempty\"`\n\tOperator string    `protobuf:\"bytes,2,opt,name=operator,proto3\" json:\"operator,omitempty\"`\n}\n\nfunc (x *FilterGroup) Reset() {\n\t*x = FilterGroup{}\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *FilterGroup) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*FilterGroup) ProtoMessage() {}\n\nfunc (x *FilterGroup) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use FilterGroup.ProtoReflect.Descriptor instead.\nfunc (*FilterGroup) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *FilterGroup) GetFilters() []*Filter {\n\tif x != nil {\n\t\treturn x.Filters\n\t}\n\treturn nil\n}\n\nfunc (x *FilterGroup) GetOperator() string {\n\tif x != nil {\n\t\treturn x.Operator\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_proto_examplepb_proto3_field_semantics_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDesc = []byte{\n\t0x0a, 0x3e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64,\n\t0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e,\n\t0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26,\n\t0x0a, 0x10, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,\n\t0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c,\n\t0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x66,\n\t0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c,\n\t0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xe2, 0x01, 0x0a, 0x06,\n\t0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x5f, 0x0a, 0x09, 0x63, 0x6f,\n\t0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46,\n\t0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00,\n\t0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x05, 0x67,\n\t0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x74,\n\t0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70,\n\t0x42, 0x0e, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e,\n\t0x22, 0x3d, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74,\n\t0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,\n\t0x7b, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x50,\n\t0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73,\n\t0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x32, 0xc4, 0x01, 0x0a,\n\t0x1b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x6d, 0x61,\n\t0x6e, 0x74, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa4, 0x01, 0x0a,\n\t0x09, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46,\n\t0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x47, 0x65,\n\t0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,\n\t0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c,\n\t0x74, 0x65, 0x72, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,\n\t0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,\n\t0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32,\n\t0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescData = file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes = make([]protoimpl.MessageInfo, 5)\nvar file_examples_internal_proto_examplepb_proto3_field_semantics_proto_goTypes = []any{\n\t(*GetFilterRequest)(nil),  // 0: grpc.gateway.examples.internal.proto.examplepb.GetFilterRequest\n\t(*GetFilterResponse)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.GetFilterResponse\n\t(*Filter)(nil),            // 2: grpc.gateway.examples.internal.proto.examplepb.Filter\n\t(*FilterCondition)(nil),   // 3: grpc.gateway.examples.internal.proto.examplepb.FilterCondition\n\t(*FilterGroup)(nil),       // 4: grpc.gateway.examples.internal.proto.examplepb.FilterGroup\n}\nvar file_examples_internal_proto_examplepb_proto3_field_semantics_proto_depIdxs = []int32{\n\t2, // 0: grpc.gateway.examples.internal.proto.examplepb.GetFilterResponse.filter:type_name -> grpc.gateway.examples.internal.proto.examplepb.Filter\n\t3, // 1: grpc.gateway.examples.internal.proto.examplepb.Filter.condition:type_name -> grpc.gateway.examples.internal.proto.examplepb.FilterCondition\n\t4, // 2: grpc.gateway.examples.internal.proto.examplepb.Filter.group:type_name -> grpc.gateway.examples.internal.proto.examplepb.FilterGroup\n\t2, // 3: grpc.gateway.examples.internal.proto.examplepb.FilterGroup.filters:type_name -> grpc.gateway.examples.internal.proto.examplepb.Filter\n\t0, // 4: grpc.gateway.examples.internal.proto.examplepb.Proto3FieldSemanticsService.GetFilter:input_type -> grpc.gateway.examples.internal.proto.examplepb.GetFilterRequest\n\t1, // 5: grpc.gateway.examples.internal.proto.examplepb.Proto3FieldSemanticsService.GetFilter:output_type -> grpc.gateway.examples.internal.proto.examplepb.GetFilterResponse\n\t5, // [5:6] is the sub-list for method output_type\n\t4, // [4:5] is the sub-list for method input_type\n\t4, // [4:4] is the sub-list for extension type_name\n\t4, // [4:4] is the sub-list for extension extendee\n\t0, // [0:4] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_proto3_field_semantics_proto_init() }\nfunc file_examples_internal_proto_examplepb_proto3_field_semantics_proto_init() {\n\tif File_examples_internal_proto_examplepb_proto3_field_semantics_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes[2].OneofWrappers = []any{\n\t\t(*Filter_Condition)(nil),\n\t\t(*Filter_Group)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   5,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_proto3_field_semantics_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_proto3_field_semantics_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_proto3_field_semantics_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_proto3_field_semantics_proto = out.File\n\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_proto3_field_semantics_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/proto3_field_semantics.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/proto3_field_semantics.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_Proto3FieldSemanticsService_GetFilter_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Proto3FieldSemanticsService_GetFilter_0(ctx context.Context, marshaler runtime.Marshaler, client Proto3FieldSemanticsServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GetFilterRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Proto3FieldSemanticsService_GetFilter_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.GetFilter(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Proto3FieldSemanticsService_GetFilter_0(ctx context.Context, marshaler runtime.Marshaler, server Proto3FieldSemanticsServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq GetFilterRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Proto3FieldSemanticsService_GetFilter_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.GetFilter(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterProto3FieldSemanticsServiceHandlerServer registers the http handlers for service Proto3FieldSemanticsService to \"mux\".\n// UnaryRPC     :call Proto3FieldSemanticsServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterProto3FieldSemanticsServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterProto3FieldSemanticsServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server Proto3FieldSemanticsServiceServer) error {\n\tmux.Handle(http.MethodGet, pattern_Proto3FieldSemanticsService_GetFilter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Proto3FieldSemanticsService/GetFilter\", runtime.WithHTTPPathPattern(\"/v1/filter\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Proto3FieldSemanticsService_GetFilter_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Proto3FieldSemanticsService_GetFilter_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterProto3FieldSemanticsServiceHandlerFromEndpoint is same as RegisterProto3FieldSemanticsServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterProto3FieldSemanticsServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterProto3FieldSemanticsServiceHandler(ctx, mux, conn)\n}\n\n// RegisterProto3FieldSemanticsServiceHandler registers the http handlers for service Proto3FieldSemanticsService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterProto3FieldSemanticsServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterProto3FieldSemanticsServiceHandlerClient(ctx, mux, NewProto3FieldSemanticsServiceClient(conn))\n}\n\n// RegisterProto3FieldSemanticsServiceHandlerClient registers the http handlers for service Proto3FieldSemanticsService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"Proto3FieldSemanticsServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"Proto3FieldSemanticsServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"Proto3FieldSemanticsServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterProto3FieldSemanticsServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client Proto3FieldSemanticsServiceClient) error {\n\tmux.Handle(http.MethodGet, pattern_Proto3FieldSemanticsService_GetFilter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Proto3FieldSemanticsService/GetFilter\", runtime.WithHTTPPathPattern(\"/v1/filter\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Proto3FieldSemanticsService_GetFilter_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Proto3FieldSemanticsService_GetFilter_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_Proto3FieldSemanticsService_GetFilter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"filter\"}, \"\"))\n)\n\nvar (\n\tforward_Proto3FieldSemanticsService_GetFilter_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/proto3_field_semantics.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\nservice Proto3FieldSemanticsService {\n  rpc GetFilter(GetFilterRequest) returns (GetFilterResponse) {\n    option (google.api.http) = {get: \"/v1/filter\"};\n  }\n}\n\nmessage GetFilterRequest {\n  string name = 1;\n}\n\nmessage GetFilterResponse {\n  Filter filter = 1;\n}\n\nmessage Filter {\n  string name = 1;\n\n  oneof filter_union {\n    FilterCondition condition = 2;\n    FilterGroup group = 3;\n  }\n}\n\nmessage FilterCondition {\n  string field = 1;\n  string value = 2;\n}\n\nmessage FilterGroup {\n  repeated Filter filters = 1;\n  string operator = 2;\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/proto3_field_semantics.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/proto3_field_semantics.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"Proto3FieldSemanticsService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/filter\": {\n      \"get\": {\n        \"operationId\": \"Proto3FieldSemanticsService_GetFilter\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbGetFilterResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"name\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"Proto3FieldSemanticsService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbFilter\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"condition\": {\n          \"$ref\": \"#/definitions/examplepbFilterCondition\"\n        },\n        \"group\": {\n          \"$ref\": \"#/definitions/examplepbFilterGroup\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ]\n    },\n    \"examplepbFilterCondition\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"field\": {\n          \"type\": \"string\"\n        },\n        \"value\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"field\",\n        \"value\"\n      ]\n    },\n    \"examplepbFilterGroup\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"filters\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/examplepbFilter\"\n          }\n        },\n        \"operator\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"filters\",\n        \"operator\"\n      ]\n    },\n    \"examplepbGetFilterResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"filter\": {\n          \"$ref\": \"#/definitions/examplepbFilter\"\n        }\n      },\n      \"required\": [\n        \"filter\"\n      ]\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"required\": [\n        \"typeUrl\",\n        \"value\"\n      ]\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      },\n      \"required\": [\n        \"code\",\n        \"message\",\n        \"details\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/proto3_field_semantics_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/proto3_field_semantics.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tProto3FieldSemanticsService_GetFilter_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.Proto3FieldSemanticsService/GetFilter\"\n)\n\n// Proto3FieldSemanticsServiceClient is the client API for Proto3FieldSemanticsService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype Proto3FieldSemanticsServiceClient interface {\n\tGetFilter(ctx context.Context, in *GetFilterRequest, opts ...grpc.CallOption) (*GetFilterResponse, error)\n}\n\ntype proto3FieldSemanticsServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewProto3FieldSemanticsServiceClient(cc grpc.ClientConnInterface) Proto3FieldSemanticsServiceClient {\n\treturn &proto3FieldSemanticsServiceClient{cc}\n}\n\nfunc (c *proto3FieldSemanticsServiceClient) GetFilter(ctx context.Context, in *GetFilterRequest, opts ...grpc.CallOption) (*GetFilterResponse, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(GetFilterResponse)\n\terr := c.cc.Invoke(ctx, Proto3FieldSemanticsService_GetFilter_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// Proto3FieldSemanticsServiceServer is the server API for Proto3FieldSemanticsService service.\n// All implementations should embed UnimplementedProto3FieldSemanticsServiceServer\n// for forward compatibility.\ntype Proto3FieldSemanticsServiceServer interface {\n\tGetFilter(context.Context, *GetFilterRequest) (*GetFilterResponse, error)\n}\n\n// UnimplementedProto3FieldSemanticsServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedProto3FieldSemanticsServiceServer struct{}\n\nfunc (UnimplementedProto3FieldSemanticsServiceServer) GetFilter(context.Context, *GetFilterRequest) (*GetFilterResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GetFilter not implemented\")\n}\nfunc (UnimplementedProto3FieldSemanticsServiceServer) testEmbeddedByValue() {}\n\n// UnsafeProto3FieldSemanticsServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to Proto3FieldSemanticsServiceServer will\n// result in compilation errors.\ntype UnsafeProto3FieldSemanticsServiceServer interface {\n\tmustEmbedUnimplementedProto3FieldSemanticsServiceServer()\n}\n\nfunc RegisterProto3FieldSemanticsServiceServer(s grpc.ServiceRegistrar, srv Proto3FieldSemanticsServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedProto3FieldSemanticsServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&Proto3FieldSemanticsService_ServiceDesc, srv)\n}\n\nfunc _Proto3FieldSemanticsService_GetFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GetFilterRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(Proto3FieldSemanticsServiceServer).GetFilter(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: Proto3FieldSemanticsService_GetFilter_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(Proto3FieldSemanticsServiceServer).GetFilter(ctx, req.(*GetFilterRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// Proto3FieldSemanticsService_ServiceDesc is the grpc.ServiceDesc for Proto3FieldSemanticsService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar Proto3FieldSemanticsService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.Proto3FieldSemanticsService\",\n\tHandlerType: (*Proto3FieldSemanticsServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"GetFilter\",\n\t\t\tHandler:    _Proto3FieldSemanticsService_GetFilter_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/proto3_field_semantics.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/remove_internal_comment.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - remove_internal_comments=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/remove_internal_comment.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/remove_internal_comment.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// Foo2Request (-- This comment should be excluded from OpenAPI output --)\ntype Foo2Request struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Username.\n\t// (-- This comment should be excluded\n\t// from OpenAPI output --)\n\t// Same row, single line break doesn't count on markdown.\n\tUsername string `protobuf:\"bytes,1,opt,name=username,proto3\" json:\"username,omitempty\"`\n\t// Password.\n\t// (-- This comment should be excluded\n\t// from OpenAPI output --)\n\t//\n\t// New row.\n\tPassword string `protobuf:\"bytes,2,opt,name=password,proto3\" json:\"password,omitempty\"`\n}\n\nfunc (x *Foo2Request) Reset() {\n\t*x = Foo2Request{}\n\tmi := &file_examples_internal_proto_examplepb_remove_internal_comment_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Foo2Request) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Foo2Request) ProtoMessage() {}\n\nfunc (x *Foo2Request) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_remove_internal_comment_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Foo2Request.ProtoReflect.Descriptor instead.\nfunc (*Foo2Request) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *Foo2Request) GetUsername() string {\n\tif x != nil {\n\t\treturn x.Username\n\t}\n\treturn \"\"\n}\n\nfunc (x *Foo2Request) GetPassword() string {\n\tif x != nil {\n\t\treturn x.Password\n\t}\n\treturn \"\"\n}\n\n// (-- This comment should be excluded from OpenAPI output --)\ntype Foo2Reply struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n}\n\nfunc (x *Foo2Reply) Reset() {\n\t*x = Foo2Reply{}\n\tmi := &file_examples_internal_proto_examplepb_remove_internal_comment_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Foo2Reply) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Foo2Reply) ProtoMessage() {}\n\nfunc (x *Foo2Reply) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_remove_internal_comment_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Foo2Reply.ProtoReflect.Descriptor instead.\nfunc (*Foo2Reply) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescGZIP(), []int{1}\n}\n\nvar File_examples_internal_proto_examplepb_remove_internal_comment_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDesc = []byte{\n\t0x0a, 0x3f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e,\n\t0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,\n\t0x45, 0x0a, 0x0b, 0x46, 0x6f, 0x6f, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,\n\t0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61,\n\t0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61,\n\t0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x0b, 0x0a, 0x09, 0x46, 0x6f, 0x6f, 0x32, 0x52, 0x65,\n\t0x70, 0x6c, 0x79, 0x32, 0xaa, 0x01, 0x0a, 0x0b, 0x46, 0x6f, 0x6f, 0x32, 0x53, 0x65, 0x72, 0x76,\n\t0x69, 0x63, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x04, 0x46, 0x6f, 0x6f, 0x32, 0x12, 0x3b, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x6f,\n\t0x6f, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x6f, 0x32, 0x52,\n\t0x65, 0x70, 0x6c, 0x79, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22,\n\t0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x66, 0x6f, 0x6f,\n\t0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67,\n\t0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72,\n\t0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62,\n\t0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescData = file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_remove_internal_comment_proto_msgTypes = make([]protoimpl.MessageInfo, 2)\nvar file_examples_internal_proto_examplepb_remove_internal_comment_proto_goTypes = []any{\n\t(*Foo2Request)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.Foo2Request\n\t(*Foo2Reply)(nil),   // 1: grpc.gateway.examples.internal.proto.examplepb.Foo2Reply\n}\nvar file_examples_internal_proto_examplepb_remove_internal_comment_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.proto.examplepb.Foo2Service.Foo2:input_type -> grpc.gateway.examples.internal.proto.examplepb.Foo2Request\n\t1, // 1: grpc.gateway.examples.internal.proto.examplepb.Foo2Service.Foo2:output_type -> grpc.gateway.examples.internal.proto.examplepb.Foo2Reply\n\t1, // [1:2] is the sub-list for method output_type\n\t0, // [0:1] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_remove_internal_comment_proto_init() }\nfunc file_examples_internal_proto_examplepb_remove_internal_comment_proto_init() {\n\tif File_examples_internal_proto_examplepb_remove_internal_comment_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   2,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_remove_internal_comment_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_remove_internal_comment_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_remove_internal_comment_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_remove_internal_comment_proto = out.File\n\tfile_examples_internal_proto_examplepb_remove_internal_comment_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_remove_internal_comment_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_remove_internal_comment_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/remove_internal_comment.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/remove_internal_comment.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_Foo2Service_Foo2_0(ctx context.Context, marshaler runtime.Marshaler, client Foo2ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Foo2Request\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Foo2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Foo2Service_Foo2_0(ctx context.Context, marshaler runtime.Marshaler, server Foo2ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Foo2Request\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Foo2(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterFoo2ServiceHandlerServer registers the http handlers for service Foo2Service to \"mux\".\n// UnaryRPC     :call Foo2ServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterFoo2ServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterFoo2ServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server Foo2ServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_Foo2Service_Foo2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Foo2Service/Foo2\", runtime.WithHTTPPathPattern(\"/v1/example/foo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Foo2Service_Foo2_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Foo2Service_Foo2_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterFoo2ServiceHandlerFromEndpoint is same as RegisterFoo2ServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterFoo2ServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterFoo2ServiceHandler(ctx, mux, conn)\n}\n\n// RegisterFoo2ServiceHandler registers the http handlers for service Foo2Service to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterFoo2ServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterFoo2ServiceHandlerClient(ctx, mux, NewFoo2ServiceClient(conn))\n}\n\n// RegisterFoo2ServiceHandlerClient registers the http handlers for service Foo2Service\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"Foo2ServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"Foo2ServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"Foo2ServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterFoo2ServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client Foo2ServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_Foo2Service_Foo2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.Foo2Service/Foo2\", runtime.WithHTTPPathPattern(\"/v1/example/foo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Foo2Service_Foo2_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_Foo2Service_Foo2_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_Foo2Service_Foo2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"foo\"}, \"\"))\n)\n\nvar (\n\tforward_Foo2Service_Foo2_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/remove_internal_comment.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// Foo2Service (-- This comment should be excluded from OpenAPI output --)\nservice Foo2Service {\n  // Foo Summary (-- This comment should be excluded from OpenAPI output --)\n  //\n  // (-- This comment should be excluded from OpenAPI output --)\n  // Description\n  rpc Foo2(Foo2Request) returns (Foo2Reply) {\n    option (google.api.http) = {\n      post: \"/v1/example/foo\"\n      body: \"*\"\n    };\n  }\n}\n\n// Foo2Request (-- This comment should be excluded from OpenAPI output --)\nmessage Foo2Request {\n  // Username.\n  // (-- This comment should be excluded\n  // from OpenAPI output --)\n  // Same row, single line break doesn't count on markdown.\n  string username = 1;\n  // Password.\n  // (-- This comment should be excluded\n  // from OpenAPI output --)\n  //\n  // New row.\n  string password = 2;\n}\n\n// (-- This comment should be excluded from OpenAPI output --)\nmessage Foo2Reply {}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/remove_internal_comment.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/remove_internal_comment.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"Foo2Service\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/foo\": {\n      \"post\": {\n        \"summary\": \"Foo Summary\",\n        \"description\": \"Description\",\n        \"operationId\": \"Foo2Service_Foo2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbFoo2Reply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbFoo2Request\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"Foo2Service\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbFoo2Reply\": {\n      \"type\": \"object\"\n    },\n    \"examplepbFoo2Request\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"username\": {\n          \"type\": \"string\",\n          \"description\": \"Username.\\nSame row, single line break doesn't count on markdown.\"\n        },\n        \"password\": {\n          \"type\": \"string\",\n          \"description\": \"Password.\\n\\nNew row.\"\n        }\n      },\n      \"title\": \"Foo2Request\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/remove_internal_comment_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/remove_internal_comment.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tFoo2Service_Foo2_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.Foo2Service/Foo2\"\n)\n\n// Foo2ServiceClient is the client API for Foo2Service service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// Foo2Service (-- This comment should be excluded from OpenAPI output --)\ntype Foo2ServiceClient interface {\n\t// Foo Summary (-- This comment should be excluded from OpenAPI output --)\n\t//\n\t// (-- This comment should be excluded from OpenAPI output --)\n\t// Description\n\tFoo2(ctx context.Context, in *Foo2Request, opts ...grpc.CallOption) (*Foo2Reply, error)\n}\n\ntype foo2ServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewFoo2ServiceClient(cc grpc.ClientConnInterface) Foo2ServiceClient {\n\treturn &foo2ServiceClient{cc}\n}\n\nfunc (c *foo2ServiceClient) Foo2(ctx context.Context, in *Foo2Request, opts ...grpc.CallOption) (*Foo2Reply, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(Foo2Reply)\n\terr := c.cc.Invoke(ctx, Foo2Service_Foo2_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// Foo2ServiceServer is the server API for Foo2Service service.\n// All implementations should embed UnimplementedFoo2ServiceServer\n// for forward compatibility.\n//\n// Foo2Service (-- This comment should be excluded from OpenAPI output --)\ntype Foo2ServiceServer interface {\n\t// Foo Summary (-- This comment should be excluded from OpenAPI output --)\n\t//\n\t// (-- This comment should be excluded from OpenAPI output --)\n\t// Description\n\tFoo2(context.Context, *Foo2Request) (*Foo2Reply, error)\n}\n\n// UnimplementedFoo2ServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedFoo2ServiceServer struct{}\n\nfunc (UnimplementedFoo2ServiceServer) Foo2(context.Context, *Foo2Request) (*Foo2Reply, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Foo2 not implemented\")\n}\nfunc (UnimplementedFoo2ServiceServer) testEmbeddedByValue() {}\n\n// UnsafeFoo2ServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to Foo2ServiceServer will\n// result in compilation errors.\ntype UnsafeFoo2ServiceServer interface {\n\tmustEmbedUnimplementedFoo2ServiceServer()\n}\n\nfunc RegisterFoo2ServiceServer(s grpc.ServiceRegistrar, srv Foo2ServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedFoo2ServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&Foo2Service_ServiceDesc, srv)\n}\n\nfunc _Foo2Service_Foo2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Foo2Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(Foo2ServiceServer).Foo2(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: Foo2Service_Foo2_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(Foo2ServiceServer).Foo2(ctx, req.(*Foo2Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// Foo2Service_ServiceDesc is the grpc.ServiceDesc for Foo2Service service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar Foo2Service_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.Foo2Service\",\n\tHandlerType: (*Foo2ServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Foo2\",\n\t\t\tHandler:    _Foo2Service_Foo2_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/remove_internal_comment.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/response_body_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/response_body_service.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype RepeatedResponseBodyOut_Response_ResponseType int32\n\nconst (\n\t// UNKNOWN\n\tRepeatedResponseBodyOut_Response_UNKNOWN RepeatedResponseBodyOut_Response_ResponseType = 0\n\t// A is 1\n\tRepeatedResponseBodyOut_Response_A RepeatedResponseBodyOut_Response_ResponseType = 1\n\t// B is 2\n\tRepeatedResponseBodyOut_Response_B RepeatedResponseBodyOut_Response_ResponseType = 2\n)\n\n// Enum value maps for RepeatedResponseBodyOut_Response_ResponseType.\nvar (\n\tRepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"A\",\n\t\t2: \"B\",\n\t}\n\tRepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"A\":       1,\n\t\t\"B\":       2,\n\t}\n)\n\nfunc (x RepeatedResponseBodyOut_Response_ResponseType) Enum() *RepeatedResponseBodyOut_Response_ResponseType {\n\tp := new(RepeatedResponseBodyOut_Response_ResponseType)\n\t*p = x\n\treturn p\n}\n\nfunc (x RepeatedResponseBodyOut_Response_ResponseType) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (RepeatedResponseBodyOut_Response_ResponseType) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes[0].Descriptor()\n}\n\nfunc (RepeatedResponseBodyOut_Response_ResponseType) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes[0]\n}\n\nfunc (x RepeatedResponseBodyOut_Response_ResponseType) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use RepeatedResponseBodyOut_Response_ResponseType.Descriptor instead.\nfunc (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{2, 0, 0}\n}\n\ntype ResponseBodyIn struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tData string `protobuf:\"bytes,1,opt,name=data,proto3\" json:\"data,omitempty\"`\n}\n\nfunc (x *ResponseBodyIn) Reset() {\n\t*x = ResponseBodyIn{}\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ResponseBodyIn) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ResponseBodyIn) ProtoMessage() {}\n\nfunc (x *ResponseBodyIn) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ResponseBodyIn.ProtoReflect.Descriptor instead.\nfunc (*ResponseBodyIn) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *ResponseBodyIn) GetData() string {\n\tif x != nil {\n\t\treturn x.Data\n\t}\n\treturn \"\"\n}\n\ntype ResponseBodyOut struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tResponse *ResponseBodyOut_Response `protobuf:\"bytes,2,opt,name=response,proto3\" json:\"response,omitempty\"`\n}\n\nfunc (x *ResponseBodyOut) Reset() {\n\t*x = ResponseBodyOut{}\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ResponseBodyOut) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ResponseBodyOut) ProtoMessage() {}\n\nfunc (x *ResponseBodyOut) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ResponseBodyOut.ProtoReflect.Descriptor instead.\nfunc (*ResponseBodyOut) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response {\n\tif x != nil {\n\t\treturn x.Response\n\t}\n\treturn nil\n}\n\ntype RepeatedResponseBodyOut struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tResponse []*RepeatedResponseBodyOut_Response `protobuf:\"bytes,2,rep,name=response,proto3\" json:\"response,omitempty\"`\n}\n\nfunc (x *RepeatedResponseBodyOut) Reset() {\n\t*x = RepeatedResponseBodyOut{}\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *RepeatedResponseBodyOut) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*RepeatedResponseBodyOut) ProtoMessage() {}\n\nfunc (x *RepeatedResponseBodyOut) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use RepeatedResponseBodyOut.ProtoReflect.Descriptor instead.\nfunc (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response {\n\tif x != nil {\n\t\treturn x.Response\n\t}\n\treturn nil\n}\n\ntype RepeatedResponseStrings struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tValues []string `protobuf:\"bytes,1,rep,name=values,proto3\" json:\"values,omitempty\"`\n}\n\nfunc (x *RepeatedResponseStrings) Reset() {\n\t*x = RepeatedResponseStrings{}\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *RepeatedResponseStrings) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*RepeatedResponseStrings) ProtoMessage() {}\n\nfunc (x *RepeatedResponseStrings) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use RepeatedResponseStrings.ProtoReflect.Descriptor instead.\nfunc (*RepeatedResponseStrings) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *RepeatedResponseStrings) GetValues() []string {\n\tif x != nil {\n\t\treturn x.Values\n\t}\n\treturn nil\n}\n\ntype ResponseBodyValue struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tResponseBodyValue string `protobuf:\"bytes,1,opt,name=response_body_value,json=responseBodyValue,proto3\" json:\"response_body_value,omitempty\"`\n}\n\nfunc (x *ResponseBodyValue) Reset() {\n\t*x = ResponseBodyValue{}\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ResponseBodyValue) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ResponseBodyValue) ProtoMessage() {}\n\nfunc (x *ResponseBodyValue) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ResponseBodyValue.ProtoReflect.Descriptor instead.\nfunc (*ResponseBodyValue) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *ResponseBodyValue) GetResponseBodyValue() string {\n\tif x != nil {\n\t\treturn x.ResponseBodyValue\n\t}\n\treturn \"\"\n}\n\ntype ResponseBodyOut_Response struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tData string `protobuf:\"bytes,1,opt,name=data,proto3\" json:\"data,omitempty\"`\n}\n\nfunc (x *ResponseBodyOut_Response) Reset() {\n\t*x = ResponseBodyOut_Response{}\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ResponseBodyOut_Response) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ResponseBodyOut_Response) ProtoMessage() {}\n\nfunc (x *ResponseBodyOut_Response) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ResponseBodyOut_Response.ProtoReflect.Descriptor instead.\nfunc (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{1, 0}\n}\n\nfunc (x *ResponseBodyOut_Response) GetData() string {\n\tif x != nil {\n\t\treturn x.Data\n\t}\n\treturn \"\"\n}\n\ntype RepeatedResponseBodyOut_Response struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tData string                                        `protobuf:\"bytes,1,opt,name=data,proto3\" json:\"data,omitempty\"`\n\tType RepeatedResponseBodyOut_Response_ResponseType `protobuf:\"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut_Response_ResponseType\" json:\"type,omitempty\"`\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) Reset() {\n\t*x = RepeatedResponseBodyOut_Response{}\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*RepeatedResponseBodyOut_Response) ProtoMessage() {}\n\nfunc (x *RepeatedResponseBodyOut_Response) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use RepeatedResponseBodyOut_Response.ProtoReflect.Descriptor instead.\nfunc (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{2, 0}\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) GetData() string {\n\tif x != nil {\n\t\treturn x.Data\n\t}\n\treturn \"\"\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType {\n\tif x != nil {\n\t\treturn x.Type\n\t}\n\treturn RepeatedResponseBodyOut_Response_UNKNOWN\n}\n\nvar File_examples_internal_proto_examplepb_response_body_service_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = []byte{\n\t0x0a, 0x3d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64,\n\t0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a,\n\t0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f,\n\t0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x0a,\n\t0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x12,\n\t0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64,\n\t0x61, 0x74, 0x61, 0x22, 0x97, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,\n\t0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x64, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f,\n\t0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f,\n\t0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f,\n\t0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1e, 0x0a,\n\t0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,\n\t0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc6, 0x02,\n\t0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,\n\t0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x6c, 0x0a, 0x08, 0x72, 0x65, 0x73,\n\t0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70,\n\t0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64,\n\t0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbc, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x71, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,\n\t0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x5d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,\n\t0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55,\n\t0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12,\n\t0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x22, 0x31, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,\n\t0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x43, 0x0a, 0x11, 0x52, 0x65, 0x73,\n\t0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e,\n\t0x0a, 0x13, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x73,\n\t0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x8d,\n\t0x08, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53,\n\t0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xba, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x65,\n\t0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x3f, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4,\n\t0x93, 0x02, 0x20, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x2f,\n\t0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x64, 0x61,\n\t0x74, 0x61, 0x7d, 0x12, 0xc7, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x47, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65,\n\t0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79,\n\t0x4f, 0x75, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x62, 0x08, 0x72, 0x65, 0x73,\n\t0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,\n\t0x62, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x12, 0xc7, 0x01,\n\t0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74,\n\t0x72, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42,\n\t0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x27,\n\t0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x62, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x17,\n\t0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73,\n\t0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61,\n\t0x6d, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49,\n\t0x6e, 0x1a, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f,\n\t0x75, 0x74, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62,\n\t0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61,\n\t0x7d, 0x30, 0x01, 0x12, 0xd8, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,\n\t0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,\n\t0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a,\n\t0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x62, 0x13, 0x72, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12,\n\t0x1d, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73,\n\t0x61, 0x6d, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x42, 0x4d,\n\t0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70,\n\t0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63,\n\t0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_response_body_service_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_response_body_service_proto_rawDescData = file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_response_body_service_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_response_body_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_response_body_service_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_response_body_service_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\nvar file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7)\nvar file_examples_internal_proto_examplepb_response_body_service_proto_goTypes = []any{\n\t(RepeatedResponseBodyOut_Response_ResponseType)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response.ResponseType\n\t(*ResponseBodyIn)(nil),                             // 1: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn\n\t(*ResponseBodyOut)(nil),                            // 2: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut\n\t(*RepeatedResponseBodyOut)(nil),                    // 3: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut\n\t(*RepeatedResponseStrings)(nil),                    // 4: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseStrings\n\t(*ResponseBodyValue)(nil),                          // 5: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyValue\n\t(*ResponseBodyOut_Response)(nil),                   // 6: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut.Response\n\t(*RepeatedResponseBodyOut_Response)(nil),           // 7: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response\n}\nvar file_examples_internal_proto_examplepb_response_body_service_proto_depIdxs = []int32{\n\t6, // 0: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut.Response\n\t7, // 1: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response\n\t0, // 2: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response.ResponseType\n\t1, // 3: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn\n\t1, // 4: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseBodies:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn\n\t1, // 5: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseStrings:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn\n\t1, // 6: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBodyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn\n\t1, // 7: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBodySameName:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn\n\t2, // 8: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut\n\t3, // 9: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseBodies:output_type -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut\n\t4, // 10: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseStrings:output_type -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseStrings\n\t2, // 11: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBodyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut\n\t5, // 12: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBodySameName:output_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyValue\n\t8, // [8:13] is the sub-list for method output_type\n\t3, // [3:8] is the sub-list for method input_type\n\t3, // [3:3] is the sub-list for extension type_name\n\t3, // [3:3] is the sub-list for extension extendee\n\t0, // [0:3] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_response_body_service_proto_init() }\nfunc file_examples_internal_proto_examplepb_response_body_service_proto_init() {\n\tif File_examples_internal_proto_examplepb_response_body_service_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc,\n\t\t\tNumEnums:      1,\n\t\t\tNumMessages:   7,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_response_body_service_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_response_body_service_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_response_body_service_proto = out.File\n\tfile_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_response_body_service_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_response_body_service_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/response_body_service.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/response_body_service.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := client.GetResponseBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshaler runtime.Marshaler, server ResponseBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := server.GetResponseBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ResponseBodyService_ListResponseBodies_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := client.ListResponseBodies(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ResponseBodyService_ListResponseBodies_0(ctx context.Context, marshaler runtime.Marshaler, server ResponseBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := server.ListResponseBodies(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ResponseBodyService_ListResponseStrings_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := client.ListResponseStrings(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context, marshaler runtime.Marshaler, server ResponseBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := server.ListResponseStrings(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_ResponseBodyService_GetResponseBodyStream_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (ResponseBodyService_GetResponseBodyStreamClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tstream, err := client.GetResponseBodyStream(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_ResponseBodyService_GetResponseBodySameName_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := client.GetResponseBodySameName(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_ResponseBodyService_GetResponseBodySameName_0(ctx context.Context, marshaler runtime.Marshaler, server ResponseBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq ResponseBodyIn\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"data\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"data\")\n\t}\n\tprotoReq.Data, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"data\", err)\n\t}\n\tmsg, err := server.GetResponseBodySameName(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterResponseBodyServiceHandlerServer registers the http handlers for service ResponseBodyService to \"mux\".\n// UnaryRPC     :call ResponseBodyServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterResponseBodyServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer) error {\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody\", runtime.WithHTTPPathPattern(\"/responsebody/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ResponseBodyService_GetResponseBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_GetResponseBody_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp.(*ResponseBodyOut)}, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_ListResponseBodies_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies\", runtime.WithHTTPPathPattern(\"/responsebodies/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ResponseBodyService_ListResponseBodies_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_ListResponseBodies_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp.(*RepeatedResponseBodyOut)}, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_ListResponseStrings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings\", runtime.WithHTTPPathPattern(\"/responsestrings/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ResponseBodyService_ListResponseStrings_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_ListResponseStrings_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp.(*RepeatedResponseStrings)}, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_GetResponseBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_GetResponseBodySameName_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodySameName\", runtime.WithHTTPPathPattern(\"/responsebody/samename/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_ResponseBodyService_GetResponseBodySameName_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_GetResponseBodySameName_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBodySameName_0{resp.(*ResponseBodyValue)}, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterResponseBodyServiceHandlerFromEndpoint is same as RegisterResponseBodyServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterResponseBodyServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterResponseBodyServiceHandler(ctx, mux, conn)\n}\n\n// RegisterResponseBodyServiceHandler registers the http handlers for service ResponseBodyService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterResponseBodyServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterResponseBodyServiceHandlerClient(ctx, mux, NewResponseBodyServiceClient(conn))\n}\n\n// RegisterResponseBodyServiceHandlerClient registers the http handlers for service ResponseBodyService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"ResponseBodyServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"ResponseBodyServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"ResponseBodyServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ResponseBodyServiceClient) error {\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody\", runtime.WithHTTPPathPattern(\"/responsebody/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ResponseBodyService_GetResponseBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_GetResponseBody_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp.(*ResponseBodyOut)}, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_ListResponseBodies_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies\", runtime.WithHTTPPathPattern(\"/responsebodies/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ResponseBodyService_ListResponseBodies_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_ListResponseBodies_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp.(*RepeatedResponseBodyOut)}, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_ListResponseStrings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings\", runtime.WithHTTPPathPattern(\"/responsestrings/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ResponseBodyService_ListResponseStrings_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_ListResponseStrings_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp.(*RepeatedResponseStrings)}, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_GetResponseBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream\", runtime.WithHTTPPathPattern(\"/responsebody/stream/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ResponseBodyService_GetResponseBodyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_GetResponseBodyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) {\n\t\t\tres, err := resp.Recv()\n\t\t\treturn response_ResponseBodyService_GetResponseBodyStream_0{res}, err\n\t\t}, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_ResponseBodyService_GetResponseBodySameName_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodySameName\", runtime.WithHTTPPathPattern(\"/responsebody/samename/{data}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_ResponseBodyService_GetResponseBodySameName_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_ResponseBodyService_GetResponseBodySameName_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBodySameName_0{resp.(*ResponseBodyValue)}, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\ntype response_ResponseBodyService_GetResponseBody_0 struct {\n\t*ResponseBodyOut\n}\n\nfunc (m response_ResponseBodyService_GetResponseBody_0) XXX_ResponseBody() interface{} {\n\tresponse := m.ResponseBodyOut\n\treturn response.Response\n}\n\ntype response_ResponseBodyService_ListResponseBodies_0 struct {\n\t*RepeatedResponseBodyOut\n}\n\nfunc (m response_ResponseBodyService_ListResponseBodies_0) XXX_ResponseBody() interface{} {\n\tresponse := m.RepeatedResponseBodyOut\n\treturn response.Response\n}\n\ntype response_ResponseBodyService_ListResponseStrings_0 struct {\n\t*RepeatedResponseStrings\n}\n\nfunc (m response_ResponseBodyService_ListResponseStrings_0) XXX_ResponseBody() interface{} {\n\tresponse := m.RepeatedResponseStrings\n\treturn response.Values\n}\n\ntype response_ResponseBodyService_GetResponseBodyStream_0 struct {\n\t*ResponseBodyOut\n}\n\nfunc (m response_ResponseBodyService_GetResponseBodyStream_0) XXX_ResponseBody() interface{} {\n\tresponse := m.ResponseBodyOut\n\treturn response.Response\n}\n\ntype response_ResponseBodyService_GetResponseBodySameName_0 struct {\n\t*ResponseBodyValue\n}\n\nfunc (m response_ResponseBodyService_GetResponseBodySameName_0) XXX_ResponseBody() interface{} {\n\tresponse := m.ResponseBodyValue\n\treturn response.ResponseBodyValue\n}\n\nvar (\n\tpattern_ResponseBodyService_GetResponseBody_0         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{\"responsebody\", \"data\"}, \"\"))\n\tpattern_ResponseBodyService_ListResponseBodies_0      = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{\"responsebodies\", \"data\"}, \"\"))\n\tpattern_ResponseBodyService_ListResponseStrings_0     = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{\"responsestrings\", \"data\"}, \"\"))\n\tpattern_ResponseBodyService_GetResponseBodyStream_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"responsebody\", \"stream\", \"data\"}, \"\"))\n\tpattern_ResponseBodyService_GetResponseBodySameName_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{\"responsebody\", \"samename\", \"data\"}, \"\"))\n)\n\nvar (\n\tforward_ResponseBodyService_GetResponseBody_0         = runtime.ForwardResponseMessage\n\tforward_ResponseBodyService_ListResponseBodies_0      = runtime.ForwardResponseMessage\n\tforward_ResponseBodyService_ListResponseStrings_0     = runtime.ForwardResponseMessage\n\tforward_ResponseBodyService_GetResponseBodyStream_0   = runtime.ForwardResponseStream\n\tforward_ResponseBodyService_GetResponseBodySameName_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/response_body_service.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\nmessage ResponseBodyIn {\n  string data = 1;\n}\n\nmessage ResponseBodyOut {\n  message Response {\n    string data = 1;\n  }\n  Response response = 2;\n}\n\nmessage RepeatedResponseBodyOut {\n  message Response {\n    string data = 1;\n    enum ResponseType {\n      // UNKNOWN\n      UNKNOWN = 0;\n      // A is 1\n      A = 1;\n      // B is 2\n      B = 2;\n    }\n    ResponseType type = 3;\n  }\n  repeated Response response = 2;\n}\n\nmessage RepeatedResponseStrings {\n  repeated string values = 1;\n}\n\nmessage ResponseBodyValue {\n  string response_body_value = 1;\n}\n\nservice ResponseBodyService {\n  rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) {\n    option (google.api.http) = {\n      get: \"/responsebody/{data}\"\n      response_body: \"response\"\n    };\n  }\n  rpc ListResponseBodies(ResponseBodyIn) returns (RepeatedResponseBodyOut) {\n    option (google.api.http) = {\n      get: \"/responsebodies/{data}\"\n      response_body: \"response\"\n    };\n  }\n  rpc ListResponseStrings(ResponseBodyIn) returns (RepeatedResponseStrings) {\n    option (google.api.http) = {\n      get: \"/responsestrings/{data}\"\n      response_body: \"values\"\n    };\n  }\n\n  rpc GetResponseBodyStream(ResponseBodyIn) returns (stream ResponseBodyOut) {\n    option (google.api.http) = {\n      get: \"/responsebody/stream/{data}\"\n      response_body: \"response\"\n    };\n  }\n\n  rpc GetResponseBodySameName(ResponseBodyIn) returns (ResponseBodyValue) {\n    option (google.api.http) = {\n      get: \"/responsebody/samename/{data}\"\n      response_body: \"response_body_value\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/response_body_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/response_body_service.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"ResponseBodyService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/responsebodies/{data}\": {\n      \"get\": {\n        \"operationId\": \"ResponseBodyService_ListResponseBodies\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"object\",\n                \"$ref\": \"#/definitions/examplepbRepeatedResponseBodyOutResponse\"\n              }\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"data\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ResponseBodyService\"\n        ]\n      }\n    },\n    \"/responsebody/samename/{data}\": {\n      \"get\": {\n        \"operationId\": \"ResponseBodyService_GetResponseBodySameName\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"data\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ResponseBodyService\"\n        ]\n      }\n    },\n    \"/responsebody/stream/{data}\": {\n      \"get\": {\n        \"operationId\": \"ResponseBodyService_GetResponseBodyStream\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbResponseBodyOutResponse\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbResponseBodyOut\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"data\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ResponseBodyService\"\n        ]\n      }\n    },\n    \"/responsebody/{data}\": {\n      \"get\": {\n        \"operationId\": \"ResponseBodyService_GetResponseBody\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbResponseBodyOutResponse\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"data\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ResponseBodyService\"\n        ]\n      }\n    },\n    \"/responsestrings/{data}\": {\n      \"get\": {\n        \"operationId\": \"ResponseBodyService_ListResponseStrings\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\"\n              }\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"data\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"ResponseBodyService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"ResponseResponseType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"UNKNOWN\",\n        \"A\",\n        \"B\"\n      ],\n      \"default\": \"UNKNOWN\",\n      \"title\": \"- UNKNOWN: UNKNOWN\\n - A: A is 1\\n - B: B is 2\"\n    },\n    \"examplepbRepeatedResponseBodyOut\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"response\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/examplepbRepeatedResponseBodyOutResponse\"\n          }\n        }\n      }\n    },\n    \"examplepbRepeatedResponseBodyOutResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"data\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"$ref\": \"#/definitions/ResponseResponseType\"\n        }\n      }\n    },\n    \"examplepbRepeatedResponseStrings\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    },\n    \"examplepbResponseBodyOut\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"response\": {\n          \"$ref\": \"#/definitions/examplepbResponseBodyOutResponse\"\n        }\n      }\n    },\n    \"examplepbResponseBodyOutResponse\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"data\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"examplepbResponseBodyValue\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"responseBodyValue\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/response_body_service_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/response_body_service.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tResponseBodyService_GetResponseBody_FullMethodName         = \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody\"\n\tResponseBodyService_ListResponseBodies_FullMethodName      = \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies\"\n\tResponseBodyService_ListResponseStrings_FullMethodName     = \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings\"\n\tResponseBodyService_GetResponseBodyStream_FullMethodName   = \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream\"\n\tResponseBodyService_GetResponseBodySameName_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodySameName\"\n)\n\n// ResponseBodyServiceClient is the client API for ResponseBodyService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype ResponseBodyServiceClient interface {\n\tGetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error)\n\tListResponseBodies(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseBodyOut, error)\n\tListResponseStrings(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseStrings, error)\n\tGetResponseBodyStream(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ResponseBodyOut], error)\n\tGetResponseBodySameName(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyValue, error)\n}\n\ntype responseBodyServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewResponseBodyServiceClient(cc grpc.ClientConnInterface) ResponseBodyServiceClient {\n\treturn &responseBodyServiceClient{cc}\n}\n\nfunc (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ResponseBodyOut)\n\terr := c.cc.Invoke(ctx, ResponseBodyService_GetResponseBody_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *responseBodyServiceClient) ListResponseBodies(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseBodyOut, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(RepeatedResponseBodyOut)\n\terr := c.cc.Invoke(ctx, ResponseBodyService_ListResponseBodies_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *responseBodyServiceClient) ListResponseStrings(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseStrings, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(RepeatedResponseStrings)\n\terr := c.cc.Invoke(ctx, ResponseBodyService_ListResponseStrings_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *responseBodyServiceClient) GetResponseBodyStream(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ResponseBodyOut], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &ResponseBodyService_ServiceDesc.Streams[0], ResponseBodyService_GetResponseBodyStream_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[ResponseBodyIn, ResponseBodyOut]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype ResponseBodyService_GetResponseBodyStreamClient = grpc.ServerStreamingClient[ResponseBodyOut]\n\nfunc (c *responseBodyServiceClient) GetResponseBodySameName(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyValue, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(ResponseBodyValue)\n\terr := c.cc.Invoke(ctx, ResponseBodyService_GetResponseBodySameName_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ResponseBodyServiceServer is the server API for ResponseBodyService service.\n// All implementations should embed UnimplementedResponseBodyServiceServer\n// for forward compatibility.\ntype ResponseBodyServiceServer interface {\n\tGetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error)\n\tListResponseBodies(context.Context, *ResponseBodyIn) (*RepeatedResponseBodyOut, error)\n\tListResponseStrings(context.Context, *ResponseBodyIn) (*RepeatedResponseStrings, error)\n\tGetResponseBodyStream(*ResponseBodyIn, grpc.ServerStreamingServer[ResponseBodyOut]) error\n\tGetResponseBodySameName(context.Context, *ResponseBodyIn) (*ResponseBodyValue, error)\n}\n\n// UnimplementedResponseBodyServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedResponseBodyServiceServer struct{}\n\nfunc (UnimplementedResponseBodyServiceServer) GetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GetResponseBody not implemented\")\n}\nfunc (UnimplementedResponseBodyServiceServer) ListResponseBodies(context.Context, *ResponseBodyIn) (*RepeatedResponseBodyOut, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ListResponseBodies not implemented\")\n}\nfunc (UnimplementedResponseBodyServiceServer) ListResponseStrings(context.Context, *ResponseBodyIn) (*RepeatedResponseStrings, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ListResponseStrings not implemented\")\n}\nfunc (UnimplementedResponseBodyServiceServer) GetResponseBodyStream(*ResponseBodyIn, grpc.ServerStreamingServer[ResponseBodyOut]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method GetResponseBodyStream not implemented\")\n}\nfunc (UnimplementedResponseBodyServiceServer) GetResponseBodySameName(context.Context, *ResponseBodyIn) (*ResponseBodyValue, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GetResponseBodySameName not implemented\")\n}\nfunc (UnimplementedResponseBodyServiceServer) testEmbeddedByValue() {}\n\n// UnsafeResponseBodyServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to ResponseBodyServiceServer will\n// result in compilation errors.\ntype UnsafeResponseBodyServiceServer interface {\n\tmustEmbedUnimplementedResponseBodyServiceServer()\n}\n\nfunc RegisterResponseBodyServiceServer(s grpc.ServiceRegistrar, srv ResponseBodyServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedResponseBodyServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&ResponseBodyService_ServiceDesc, srv)\n}\n\nfunc _ResponseBodyService_GetResponseBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ResponseBodyIn)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ResponseBodyServiceServer).GetResponseBody(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ResponseBodyService_GetResponseBody_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ResponseBodyServiceServer).GetResponseBody(ctx, req.(*ResponseBodyIn))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ResponseBodyService_ListResponseBodies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ResponseBodyIn)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ResponseBodyServiceServer).ListResponseBodies(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ResponseBodyService_ListResponseBodies_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ResponseBodyServiceServer).ListResponseBodies(ctx, req.(*ResponseBodyIn))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ResponseBodyService_ListResponseStrings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ResponseBodyIn)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ResponseBodyServiceServer).ListResponseStrings(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ResponseBodyService_ListResponseStrings_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ResponseBodyServiceServer).ListResponseStrings(ctx, req.(*ResponseBodyIn))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _ResponseBodyService_GetResponseBodyStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(ResponseBodyIn)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(ResponseBodyServiceServer).GetResponseBodyStream(m, &grpc.GenericServerStream[ResponseBodyIn, ResponseBodyOut]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype ResponseBodyService_GetResponseBodyStreamServer = grpc.ServerStreamingServer[ResponseBodyOut]\n\nfunc _ResponseBodyService_GetResponseBodySameName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ResponseBodyIn)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ResponseBodyServiceServer).GetResponseBodySameName(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: ResponseBodyService_GetResponseBodySameName_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ResponseBodyServiceServer).GetResponseBodySameName(ctx, req.(*ResponseBodyIn))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// ResponseBodyService_ServiceDesc is the grpc.ServiceDesc for ResponseBodyService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar ResponseBodyService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService\",\n\tHandlerType: (*ResponseBodyServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"GetResponseBody\",\n\t\t\tHandler:    _ResponseBodyService_GetResponseBody_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ListResponseBodies\",\n\t\t\tHandler:    _ResponseBodyService_ListResponseBodies_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ListResponseStrings\",\n\t\t\tHandler:    _ResponseBodyService_ListResponseStrings_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"GetResponseBodySameName\",\n\t\t\tHandler:    _ResponseBodyService_GetResponseBodySameName_Handler,\n\t\t},\n\t},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"GetResponseBodyStream\",\n\t\t\tHandler:       _ResponseBodyService_GetResponseBodyStream_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t},\n\tMetadata: \"examples/internal/proto/examplepb/response_body_service.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml",
    "content": "version: v1\nplugins:\n  - plugin: grpc-gateway\n    out: .\n    opt:\n      - paths=source_relative\n      - standalone=true\n      - grpc_api_configuration=examples/internal/proto/examplepb/standalone_echo_service.yaml\n"
  },
  {
    "path": "examples/internal/proto/examplepb/standalone_echo_service.yaml",
    "content": "type: google.api.Service\r\nconfig_version: 3\r\n\r\nhttp:\r\n  rules:\r\n    - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo\r\n      post: \"/v2/example/echo/{id}\"\r\n      additional_bindings:\r\n        - get: \"/v2/example/echo/{id}/{num}\"\r\n        - get: \"/v2/example/echo/{id}/{num}/{lang}\"\r\n        - get: \"/v2/example/echo1/{id}/{line_num}/{status.note}\"\r\n        - get: \"/v2/example/echo2/{no.note}\"\r\n    - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody\r\n      post: \"/v2/example/echo_body\"\r\n      body: \"*\"\r\n    - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete\r\n      delete: \"/v2/example/echo_delete\"\r\n    - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoNested\r\n      put: \"/v1/example/echo_nested\"\r\n      body: \"*\"\r\n      response_body: \"n_id\"\r\n"
  },
  {
    "path": "examples/internal/proto/examplepb/stream.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/stream.proto\n\npackage examplepb\n\nimport (\n\tsub \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\thttpbody \"google.golang.org/genproto/googleapis/api/httpbody\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype Options struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tError bool `protobuf:\"varint,1,opt,name=error,proto3\" json:\"error,omitempty\"`\n}\n\nfunc (x *Options) Reset() {\n\t*x = Options{}\n\tmi := &file_examples_internal_proto_examplepb_stream_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Options) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Options) ProtoMessage() {}\n\nfunc (x *Options) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_stream_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Options.ProtoReflect.Descriptor instead.\nfunc (*Options) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_stream_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *Options) GetError() bool {\n\tif x != nil {\n\t\treturn x.Error\n\t}\n\treturn false\n}\n\nvar File_examples_internal_proto_examplepb_stream_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{\n\t0x0a, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61,\n\t0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1f,\n\t0x0a, 0x07, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72,\n\t0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x32,\n\t0x92, 0x06, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,\n\t0x65, 0x12, 0x99, 0x01, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,\n\t0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69,\n\t0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93,\n\t0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72,\n\t0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x28, 0x01, 0x12, 0xac, 0x01,\n\t0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a,\n\t0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e,\n\t0x67, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f,\n\t0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x30, 0x01, 0x12, 0xb1, 0x01, 0x0a,\n\t0x08, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74,\n\t0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4,\n\t0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x28, 0x01, 0x30, 0x01,\n\t0x12, 0x86, 0x01, 0x0a, 0x10, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x75, 0x72,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x38, 0x82, 0xd3, 0xe4,\n\t0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65,\n\t0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x64, 0x75, 0x72,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x01, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x08, 0x44, 0x6f, 0x77,\n\t0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x14,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70,\n\t0x42, 0x6f, 0x64, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76,\n\t0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f,\n\t0x61, 0x64, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,\n\t0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65,\n\t0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76,\n\t0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_stream_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_stream_proto_rawDescData = file_examples_internal_proto_examplepb_stream_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_stream_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_stream_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_stream_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_stream_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_stream_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_stream_proto_msgTypes = make([]protoimpl.MessageInfo, 1)\nvar file_examples_internal_proto_examplepb_stream_proto_goTypes = []any{\n\t(*Options)(nil),             // 0: grpc.gateway.examples.internal.proto.examplepb.Options\n\t(*ABitOfEverything)(nil),    // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t(*sub.StringMessage)(nil),   // 2: grpc.gateway.examples.internal.proto.sub.StringMessage\n\t(*durationpb.Duration)(nil), // 3: google.protobuf.Duration\n\t(*emptypb.Empty)(nil),       // 4: google.protobuf.Empty\n\t(*httpbody.HttpBody)(nil),   // 5: google.api.HttpBody\n}\nvar file_examples_internal_proto_examplepb_stream_proto_depIdxs = []int32{\n\t1, // 0: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkCreate:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t0, // 1: grpc.gateway.examples.internal.proto.examplepb.StreamService.List:input_type -> grpc.gateway.examples.internal.proto.examplepb.Options\n\t2, // 2: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkEcho:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage\n\t3, // 3: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkEchoDuration:input_type -> google.protobuf.Duration\n\t0, // 4: grpc.gateway.examples.internal.proto.examplepb.StreamService.Download:input_type -> grpc.gateway.examples.internal.proto.examplepb.Options\n\t4, // 5: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkCreate:output_type -> google.protobuf.Empty\n\t1, // 6: grpc.gateway.examples.internal.proto.examplepb.StreamService.List:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything\n\t2, // 7: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkEcho:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage\n\t3, // 8: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkEchoDuration:output_type -> google.protobuf.Duration\n\t5, // 9: grpc.gateway.examples.internal.proto.examplepb.StreamService.Download:output_type -> google.api.HttpBody\n\t5, // [5:10] is the sub-list for method output_type\n\t0, // [0:5] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_stream_proto_init() }\nfunc file_examples_internal_proto_examplepb_stream_proto_init() {\n\tif File_examples_internal_proto_examplepb_stream_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_examplepb_a_bit_of_everything_proto_init()\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_stream_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   1,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_stream_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_stream_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_stream_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_stream_proto = out.File\n\tfile_examples_internal_proto_examplepb_stream_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_stream_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_stream_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/stream.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/stream.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.BulkCreate(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\tfor {\n\t\tvar protoReq ABitOfEverything\n\t\terr = dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t}\n\t\tif err = stream.Send(&protoReq); err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn nil, metadata, err\n\t\t}\n\t}\n\tif err := stream.CloseSend(); err != nil {\n\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\tmsg, err := stream.CloseAndRecv()\n\tmetadata.TrailerMD = stream.Trailer()\n\treturn msg, metadata, err\n}\n\nvar filter_StreamService_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_StreamService_List_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_ListClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Options\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_StreamService_List_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.List(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_BulkEchoClient, runtime.ServerMetadata, error) {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.BulkEcho(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\thandleSend := func() error {\n\t\tvar protoReq sub.StringMessage\n\t\terr := dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn err\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn status.Errorf(codes.InvalidArgument, \"Failed to decode request: %v\", err)\n\t\t}\n\t\tif err := stream.Send(&protoReq); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\tgo func() {\n\t\tfor {\n\t\t\tif err := handleSend(); err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif err := stream.CloseSend(); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\t}\n\t}()\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nfunc request_StreamService_BulkEchoDuration_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_BulkEchoDurationClient, runtime.ServerMetadata, error) {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.BulkEchoDuration(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\thandleSend := func() error {\n\t\tvar protoReq durationpb.Duration\n\t\terr := dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn err\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn status.Errorf(codes.InvalidArgument, \"Failed to decode request: %v\", err)\n\t\t}\n\t\tif err := stream.Send(&protoReq); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\tgo func() {\n\t\tfor {\n\t\t\tif err := handleSend(); err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif err := stream.CloseSend(); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\t}\n\t}()\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\nvar filter_StreamService_Download_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_StreamService_Download_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_DownloadClient, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Options\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_StreamService_Download_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tstream, err := client.Download(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n\n// RegisterStreamServiceHandlerServer registers the http handlers for service StreamService to \"mux\".\n// UnaryRPC     :call StreamServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterStreamServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodGet, pattern_StreamService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_StreamService_BulkEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodPost, pattern_StreamService_BulkEchoDuration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\tmux.Handle(http.MethodGet, pattern_StreamService_Download_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\n\treturn nil\n}\n\n// RegisterStreamServiceHandlerFromEndpoint is same as RegisterStreamServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterStreamServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterStreamServiceHandler(ctx, mux, conn)\n}\n\n// RegisterStreamServiceHandler registers the http handlers for service StreamService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterStreamServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterStreamServiceHandlerClient(ctx, mux, NewStreamServiceClient(conn))\n}\n\n// RegisterStreamServiceHandlerClient registers the http handlers for service StreamService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"StreamServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"StreamServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"StreamServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client StreamServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/bulk\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_StreamService_BulkCreate_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_StreamService_BulkCreate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_StreamService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/List\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_StreamService_List_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_StreamService_List_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_StreamService_BulkEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/echo\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_StreamService_BulkEcho_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_StreamService_BulkEcho_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_StreamService_BulkEchoDuration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEchoDuration\", runtime.WithHTTPPathPattern(\"/v1/example/a_bit_of_everything/echo_duration\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_StreamService_BulkEchoDuration_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_StreamService_BulkEchoDuration_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_StreamService_Download_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download\", runtime.WithHTTPPathPattern(\"/v1/example/download\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_StreamService_Download_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_StreamService_Download_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_StreamService_BulkCreate_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"bulk\"}, \"\"))\n\tpattern_StreamService_List_0             = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"a_bit_of_everything\"}, \"\"))\n\tpattern_StreamService_BulkEcho_0         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"echo\"}, \"\"))\n\tpattern_StreamService_BulkEchoDuration_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"v1\", \"example\", \"a_bit_of_everything\", \"echo_duration\"}, \"\"))\n\tpattern_StreamService_Download_0         = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"download\"}, \"\"))\n)\n\nvar (\n\tforward_StreamService_BulkCreate_0       = runtime.ForwardResponseMessage\n\tforward_StreamService_List_0             = runtime.ForwardResponseStream\n\tforward_StreamService_BulkEcho_0         = runtime.ForwardResponseStream\n\tforward_StreamService_BulkEchoDuration_0 = runtime.ForwardResponseStream\n\tforward_StreamService_Download_0         = runtime.ForwardResponseStream\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/stream.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"examples/internal/proto/examplepb/a_bit_of_everything.proto\";\nimport \"examples/internal/proto/sub/message.proto\";\nimport \"google/api/annotations.proto\";\nimport \"google/api/httpbody.proto\";\nimport \"google/protobuf/duration.proto\";\nimport \"google/protobuf/empty.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// Defines some more operations to be added to ABitOfEverythingService\nservice StreamService {\n  rpc BulkCreate(stream ABitOfEverything) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v1/example/a_bit_of_everything/bulk\"\n      body: \"*\"\n    };\n  }\n  rpc List(Options) returns (stream ABitOfEverything) {\n    option (google.api.http) = {get: \"/v1/example/a_bit_of_everything\"};\n  }\n  rpc BulkEcho(stream grpc.gateway.examples.internal.proto.sub.StringMessage) returns (stream grpc.gateway.examples.internal.proto.sub.StringMessage) {\n    option (google.api.http) = {\n      post: \"/v1/example/a_bit_of_everything/echo\"\n      body: \"*\"\n    };\n  }\n  rpc BulkEchoDuration(stream google.protobuf.Duration) returns (stream google.protobuf.Duration) {\n    option (google.api.http) = {\n      post: \"/v1/example/a_bit_of_everything/echo_duration\"\n      body: \"*\"\n    };\n  }\n\n  rpc Download(Options) returns (stream google.api.HttpBody) {\n    option (google.api.http) = {get: \"/v1/example/download\"};\n  }\n}\n\nmessage Options {\n  bool error = 1;\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/stream.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/stream.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"StreamService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/a_bit_of_everything\": {\n      \"get\": {\n        \"operationId\": \"StreamService_List\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of examplepbABitOfEverything\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"error\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          }\n        ],\n        \"tags\": [\n          \"StreamService\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/bulk\": {\n      \"post\": {\n        \"operationId\": \"StreamService_BulkCreate\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"Intentionally complicated message type to cover many features of Protobuf. (streaming inputs)\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbABitOfEverything\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"StreamService\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/echo\": {\n      \"post\": {\n        \"operationId\": \"StreamService_BulkEcho\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {\n                  \"$ref\": \"#/definitions/subStringMessage\"\n                },\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of subStringMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \" (streaming inputs)\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/subStringMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"StreamService\"\n        ]\n      }\n    },\n    \"/v1/example/a_bit_of_everything/echo_duration\": {\n      \"post\": {\n        \"operationId\": \"StreamService_BulkEchoDuration\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"result\": {},\n                \"error\": {\n                  \"$ref\": \"#/definitions/googleRpcStatus\"\n                }\n              },\n              \"title\": \"Stream result of protobufDuration\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \" (streaming inputs)\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"StreamService\"\n        ]\n      }\n    },\n    \"/v1/example/download\": {\n      \"get\": {\n        \"operationId\": \"StreamService_Download\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.(streaming responses)\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"binary\",\n              \"properties\": {},\n              \"title\": \"Free form byte stream\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"error\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"boolean\"\n          }\n        ],\n        \"tags\": [\n          \"StreamService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"ABitOfEverythingNested\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"ok\": \"TRUE\"\n      },\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"name is nested field.\"\n        },\n        \"amount\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"ok\": {\n          \"$ref\": \"#/definitions/NestedDeepEnum\",\n          \"description\": \"DeepEnum description.\"\n        }\n      },\n      \"description\": \"Nested is nested type.\"\n    },\n    \"MessagePathEnumNestedPathEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"GHI\",\n        \"JKL\"\n      ],\n      \"default\": \"GHI\"\n    },\n    \"NestedDeepEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"FALSE\",\n        \"TRUE\"\n      ],\n      \"default\": \"FALSE\",\n      \"description\": \"DeepEnum is one or zero.\\n\\n - FALSE: FALSE is false.\\n - TRUE: TRUE is true.\"\n    },\n    \"apiHttpBody\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"contentType\": {\n          \"type\": \"string\",\n          \"description\": \"The HTTP Content-Type header value specifying the content type of the body.\"\n        },\n        \"data\": {\n          \"type\": \"string\",\n          \"format\": \"byte\",\n          \"description\": \"The HTTP request/response body as raw binary.\"\n        },\n        \"extensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"Application specific response metadata. Must be set in the first response\\nfor streaming APIs.\"\n        }\n      },\n      \"description\": \"Message that represents an arbitrary HTTP body. It should only be used for\\npayload formats that can't be represented as JSON, such as raw binary or\\nan HTML page.\\n\\n\\nThis message can be used both in streaming and non-streaming API methods in\\nthe request as well as the response.\\n\\nIt can be used as a top-level request field, which is convenient if one\\nwants to extract parameters from either the URL or HTTP template into the\\nrequest fields and also want access to the raw HTTP body.\\n\\nExample:\\n\\n    message GetResourceRequest {\\n      // A unique request id.\\n      string request_id = 1;\\n\\n      // The raw HTTP body is bound to this field.\\n      google.api.HttpBody http_body = 2;\\n\\n    }\\n\\n    service ResourceService {\\n      rpc GetResource(GetResourceRequest)\\n        returns (google.api.HttpBody);\\n      rpc UpdateResource(google.api.HttpBody)\\n        returns (google.protobuf.Empty);\\n\\n    }\\n\\nExample with streaming methods:\\n\\n    service CaldavService {\\n      rpc GetCalendar(stream google.api.HttpBody)\\n        returns (stream google.api.HttpBody);\\n      rpc UpdateCalendar(stream google.api.HttpBody)\\n        returns (stream google.api.HttpBody);\\n\\n    }\\n\\nUse of this type only changes how the request and response bodies are\\nhandled, all other features will continue to work unchanged.\"\n    },\n    \"examplepbABitOfEverything\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"int64_value\": 12,\n        \"double_value\": 12.3\n      },\n      \"properties\": {\n        \"singleNested\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n        },\n        \"uuid\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\",\n          \"minLength\": 1,\n          \"pattern\": \"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\",\n          \"x-internal\": true\n        },\n        \"nested\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"floatValue\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"default\": \"0.2\",\n          \"description\": \"Float value field\"\n        },\n        \"doubleValue\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"int64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"uint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"int32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"fixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"fixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"boolValue\": {\n          \"type\": \"boolean\"\n        },\n        \"stringValue\": {\n          \"type\": \"string\"\n        },\n        \"bytesValue\": {\n          \"type\": \"string\",\n          \"format\": \"byte\"\n        },\n        \"uint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"enumValue\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\"\n        },\n        \"pathEnumValue\": {\n          \"$ref\": \"#/definitions/pathenumPathEnum\"\n        },\n        \"nestedPathEnumValue\": {\n          \"$ref\": \"#/definitions/MessagePathEnumNestedPathEnum\"\n        },\n        \"sfixed32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sfixed64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"sint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"repeatedStringValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"oneofEmpty\": {\n          \"type\": \"object\",\n          \"properties\": {}\n        },\n        \"oneofString\": {\n          \"type\": \"string\"\n        },\n        \"mapValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"map of numeric enum\"\n        },\n        \"mappedStringValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Map of string description.\",\n          \"title\": \"Map of string title\"\n        },\n        \"mappedNestedValue\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          }\n        },\n        \"nonConventionalNameValue\": {\n          \"type\": \"string\"\n        },\n        \"timestampValue\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"repeatedEnumValue\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"title\": \"repeated enum value. it is comma-separated in query\"\n        },\n        \"repeatedEnumAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/examplepbNumericEnum\"\n          },\n          \"description\": \"Repeated numeric enum description.\",\n          \"title\": \"Repeated numeric enum title\"\n        },\n        \"enumValueAnnotation\": {\n          \"$ref\": \"#/definitions/examplepbNumericEnum\",\n          \"description\": \"Numeric enum description.\",\n          \"title\": \"Numeric enum title\"\n        },\n        \"repeatedStringAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Repeated string description.\",\n          \"title\": \"Repeated string title\"\n        },\n        \"repeatedNestedAnnotation\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/ABitOfEverythingNested\"\n          },\n          \"description\": \"Repeated nested object description.\",\n          \"title\": \"Repeated nested object title\"\n        },\n        \"nestedAnnotation\": {\n          \"$ref\": \"#/definitions/ABitOfEverythingNested\",\n          \"description\": \"Nested object description.\",\n          \"title\": \"Nested object title\"\n        },\n        \"int64OverrideType\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"requiredStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as required in Open API definition\"\n        },\n        \"outputOnlyStringViaFieldBehaviorAnnotation\": {\n          \"type\": \"string\",\n          \"title\": \"mark a field as readonly in Open API definition\",\n          \"readOnly\": true\n        },\n        \"optionalStringValue\": {\n          \"type\": \"string\"\n        },\n        \"productId\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"maxLength\": 19,\n            \"minLength\": 1,\n            \"pattern\": \"^[0-9]+$\"\n          },\n          \"description\": \"Only digits are allowed.\",\n          \"title\": \"Test openapiv2 generation of repeated fields\"\n        },\n        \"optionalStringField\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 generation of required fields with annotation and jsonschema to reproduce\"\n        },\n        \"requiredStringField1\": {\n          \"type\": \"string\"\n        },\n        \"requiredStringField2\": {\n          \"type\": \"string\"\n        },\n        \"required_field_behavior_json_name_custom\": {\n          \"type\": \"string\",\n          \"title\": \"Test openapiv2 handling of required json_name fields\"\n        },\n        \"required_field_schema_json_name_custom\": {\n          \"type\": \"string\"\n        },\n        \"trailingOnly\": {\n          \"type\": \"string\",\n          \"title\": \"Trailing only\"\n        },\n        \"trailingOnlyDot\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing only dot.\"\n        },\n        \"trailingBoth\": {\n          \"type\": \"string\",\n          \"description\": \"Trailing both.\",\n          \"title\": \"Leading both\"\n        },\n        \"trailingMultiline\": {\n          \"type\": \"string\",\n          \"description\": \"This is an example of a multi-line comment.\\n\\nTrailing multiline.\",\n          \"title\": \"Leading multiline\"\n        },\n        \"uuids\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"title\": \"Specify a custom format of repeated field items\"\n        }\n      },\n      \"description\": \"Intentionally complicated message type to cover many features of Protobuf.\",\n      \"title\": \"A bit of everything\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"required\": [\n        \"uuid\",\n        \"int64Value\",\n        \"doubleValue\",\n        \"required_field_schema_json_name_custom\",\n        \"floatValue\",\n        \"requiredStringViaFieldBehaviorAnnotation\",\n        \"requiredStringField1\",\n        \"requiredStringField2\",\n        \"required_field_behavior_json_name_custom\"\n      ],\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"examplepbNumericEnum\": {\n      \"type\": \"string\",\n      \"example\": \"ZERO\",\n      \"enum\": [\n        \"ZERO\",\n        \"ONE\"\n      ],\n      \"default\": \"ZERO\",\n      \"description\": \"NumericEnum is one or zero.\",\n      \"title\": \"NumericEnum\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about ABitOfEverything\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"x-a-bit-of-everything-foo\": \"bar\"\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"pathenumPathEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"ABC\",\n        \"DEF\"\n      ],\n      \"default\": \"ABC\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"subStringMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/stream_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/stream.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tsub \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\thttpbody \"google.golang.org/genproto/googleapis/api/httpbody\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tStreamService_BulkCreate_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate\"\n\tStreamService_List_FullMethodName             = \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/List\"\n\tStreamService_BulkEcho_FullMethodName         = \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho\"\n\tStreamService_BulkEchoDuration_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEchoDuration\"\n\tStreamService_Download_FullMethodName         = \"/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download\"\n)\n\n// StreamServiceClient is the client API for StreamService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// Defines some more operations to be added to ABitOfEverythingService\ntype StreamServiceClient interface {\n\tBulkCreate(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[ABitOfEverything, emptypb.Empty], error)\n\tList(ctx context.Context, in *Options, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ABitOfEverything], error)\n\tBulkEcho(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[sub.StringMessage, sub.StringMessage], error)\n\tBulkEchoDuration(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[durationpb.Duration, durationpb.Duration], error)\n\tDownload(ctx context.Context, in *Options, opts ...grpc.CallOption) (grpc.ServerStreamingClient[httpbody.HttpBody], error)\n}\n\ntype streamServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewStreamServiceClient(cc grpc.ClientConnInterface) StreamServiceClient {\n\treturn &streamServiceClient{cc}\n}\n\nfunc (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[ABitOfEverything, emptypb.Empty], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[0], StreamService_BulkCreate_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[ABitOfEverything, emptypb.Empty]{ClientStream: stream}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_BulkCreateClient = grpc.ClientStreamingClient[ABitOfEverything, emptypb.Empty]\n\nfunc (c *streamServiceClient) List(ctx context.Context, in *Options, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ABitOfEverything], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[1], StreamService_List_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[Options, ABitOfEverything]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_ListClient = grpc.ServerStreamingClient[ABitOfEverything]\n\nfunc (c *streamServiceClient) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[sub.StringMessage, sub.StringMessage], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[2], StreamService_BulkEcho_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[sub.StringMessage, sub.StringMessage]{ClientStream: stream}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_BulkEchoClient = grpc.BidiStreamingClient[sub.StringMessage, sub.StringMessage]\n\nfunc (c *streamServiceClient) BulkEchoDuration(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[durationpb.Duration, durationpb.Duration], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[3], StreamService_BulkEchoDuration_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[durationpb.Duration, durationpb.Duration]{ClientStream: stream}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_BulkEchoDurationClient = grpc.BidiStreamingClient[durationpb.Duration, durationpb.Duration]\n\nfunc (c *streamServiceClient) Download(ctx context.Context, in *Options, opts ...grpc.CallOption) (grpc.ServerStreamingClient[httpbody.HttpBody], error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tstream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[4], StreamService_Download_FullMethodName, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &grpc.GenericClientStream[Options, httpbody.HttpBody]{ClientStream: stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_DownloadClient = grpc.ServerStreamingClient[httpbody.HttpBody]\n\n// StreamServiceServer is the server API for StreamService service.\n// All implementations should embed UnimplementedStreamServiceServer\n// for forward compatibility.\n//\n// Defines some more operations to be added to ABitOfEverythingService\ntype StreamServiceServer interface {\n\tBulkCreate(grpc.ClientStreamingServer[ABitOfEverything, emptypb.Empty]) error\n\tList(*Options, grpc.ServerStreamingServer[ABitOfEverything]) error\n\tBulkEcho(grpc.BidiStreamingServer[sub.StringMessage, sub.StringMessage]) error\n\tBulkEchoDuration(grpc.BidiStreamingServer[durationpb.Duration, durationpb.Duration]) error\n\tDownload(*Options, grpc.ServerStreamingServer[httpbody.HttpBody]) error\n}\n\n// UnimplementedStreamServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedStreamServiceServer struct{}\n\nfunc (UnimplementedStreamServiceServer) BulkCreate(grpc.ClientStreamingServer[ABitOfEverything, emptypb.Empty]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method BulkCreate not implemented\")\n}\nfunc (UnimplementedStreamServiceServer) List(*Options, grpc.ServerStreamingServer[ABitOfEverything]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method List not implemented\")\n}\nfunc (UnimplementedStreamServiceServer) BulkEcho(grpc.BidiStreamingServer[sub.StringMessage, sub.StringMessage]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method BulkEcho not implemented\")\n}\nfunc (UnimplementedStreamServiceServer) BulkEchoDuration(grpc.BidiStreamingServer[durationpb.Duration, durationpb.Duration]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method BulkEchoDuration not implemented\")\n}\nfunc (UnimplementedStreamServiceServer) Download(*Options, grpc.ServerStreamingServer[httpbody.HttpBody]) error {\n\treturn status.Errorf(codes.Unimplemented, \"method Download not implemented\")\n}\nfunc (UnimplementedStreamServiceServer) testEmbeddedByValue() {}\n\n// UnsafeStreamServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to StreamServiceServer will\n// result in compilation errors.\ntype UnsafeStreamServiceServer interface {\n\tmustEmbedUnimplementedStreamServiceServer()\n}\n\nfunc RegisterStreamServiceServer(s grpc.ServiceRegistrar, srv StreamServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedStreamServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&StreamService_ServiceDesc, srv)\n}\n\nfunc _StreamService_BulkCreate_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(StreamServiceServer).BulkCreate(&grpc.GenericServerStream[ABitOfEverything, emptypb.Empty]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_BulkCreateServer = grpc.ClientStreamingServer[ABitOfEverything, emptypb.Empty]\n\nfunc _StreamService_List_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(Options)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(StreamServiceServer).List(m, &grpc.GenericServerStream[Options, ABitOfEverything]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_ListServer = grpc.ServerStreamingServer[ABitOfEverything]\n\nfunc _StreamService_BulkEcho_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(StreamServiceServer).BulkEcho(&grpc.GenericServerStream[sub.StringMessage, sub.StringMessage]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_BulkEchoServer = grpc.BidiStreamingServer[sub.StringMessage, sub.StringMessage]\n\nfunc _StreamService_BulkEchoDuration_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(StreamServiceServer).BulkEchoDuration(&grpc.GenericServerStream[durationpb.Duration, durationpb.Duration]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_BulkEchoDurationServer = grpc.BidiStreamingServer[durationpb.Duration, durationpb.Duration]\n\nfunc _StreamService_Download_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(Options)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(StreamServiceServer).Download(m, &grpc.GenericServerStream[Options, httpbody.HttpBody]{ServerStream: stream})\n}\n\n// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.\ntype StreamService_DownloadServer = grpc.ServerStreamingServer[httpbody.HttpBody]\n\n// StreamService_ServiceDesc is the grpc.ServiceDesc for StreamService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar StreamService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.StreamService\",\n\tHandlerType: (*StreamServiceServer)(nil),\n\tMethods:     []grpc.MethodDesc{},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"BulkCreate\",\n\t\t\tHandler:       _StreamService_BulkCreate_Handler,\n\t\t\tClientStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"List\",\n\t\t\tHandler:       _StreamService_List_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"BulkEcho\",\n\t\t\tHandler:       _StreamService_BulkEcho_Handler,\n\t\t\tServerStreams: true,\n\t\t\tClientStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"BulkEchoDuration\",\n\t\t\tHandler:       _StreamService_BulkEchoDuration_Handler,\n\t\t\tServerStreams: true,\n\t\t\tClientStreams: true,\n\t\t},\n\t\t{\n\t\t\tStreamName:    \"Download\",\n\t\t\tHandler:       _StreamService_Download_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t},\n\tMetadata: \"examples/internal/proto/examplepb/stream.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml",
    "content": "version: v1\nplugins:\n  - plugin: grpc-gateway\n    out: .\n    opt:\n      - paths=source_relative\n      - grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml\n  - plugin: openapiv2\n    out: .\n    opt:\n      - grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml\n      - openapi_configuration=examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml\n      - generate_x_go_type=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/unannotated_echo_service.proto\n\n// Unannotated Echo Service\n// Similar to echo_service.proto but without annotations. See\n// unannotated_echo_service.yaml for the equivalent of the annotations in\n// gRPC API configuration format.\n//\n// Echo Service API consists of a single service which returns\n// a message.\n\npackage examplepb\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// Embedded represents a message embedded in SimpleMessage.\ntype UnannotatedEmbedded struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Types that are assignable to Mark:\n\t//\n\t//\t*UnannotatedEmbedded_Progress\n\t//\t*UnannotatedEmbedded_Note\n\tMark isUnannotatedEmbedded_Mark `protobuf_oneof:\"mark\"`\n}\n\nfunc (x *UnannotatedEmbedded) Reset() {\n\t*x = UnannotatedEmbedded{}\n\tmi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UnannotatedEmbedded) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UnannotatedEmbedded) ProtoMessage() {}\n\nfunc (x *UnannotatedEmbedded) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UnannotatedEmbedded.ProtoReflect.Descriptor instead.\nfunc (*UnannotatedEmbedded) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (m *UnannotatedEmbedded) GetMark() isUnannotatedEmbedded_Mark {\n\tif m != nil {\n\t\treturn m.Mark\n\t}\n\treturn nil\n}\n\nfunc (x *UnannotatedEmbedded) GetProgress() int64 {\n\tif x, ok := x.GetMark().(*UnannotatedEmbedded_Progress); ok {\n\t\treturn x.Progress\n\t}\n\treturn 0\n}\n\nfunc (x *UnannotatedEmbedded) GetNote() string {\n\tif x, ok := x.GetMark().(*UnannotatedEmbedded_Note); ok {\n\t\treturn x.Note\n\t}\n\treturn \"\"\n}\n\ntype isUnannotatedEmbedded_Mark interface {\n\tisUnannotatedEmbedded_Mark()\n}\n\ntype UnannotatedEmbedded_Progress struct {\n\tProgress int64 `protobuf:\"varint,1,opt,name=progress,proto3,oneof\"`\n}\n\ntype UnannotatedEmbedded_Note struct {\n\tNote string `protobuf:\"bytes,2,opt,name=note,proto3,oneof\"`\n}\n\nfunc (*UnannotatedEmbedded_Progress) isUnannotatedEmbedded_Mark() {}\n\nfunc (*UnannotatedEmbedded_Note) isUnannotatedEmbedded_Mark() {}\n\ntype UnannotatedNestedMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tNId string `protobuf:\"bytes,1,opt,name=n_id,json=nId,proto3\" json:\"n_id,omitempty\"`\n\tVal string `protobuf:\"bytes,2,opt,name=val,proto3\" json:\"val,omitempty\"`\n}\n\nfunc (x *UnannotatedNestedMessage) Reset() {\n\t*x = UnannotatedNestedMessage{}\n\tmi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UnannotatedNestedMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UnannotatedNestedMessage) ProtoMessage() {}\n\nfunc (x *UnannotatedNestedMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UnannotatedNestedMessage.ProtoReflect.Descriptor instead.\nfunc (*UnannotatedNestedMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *UnannotatedNestedMessage) GetNId() string {\n\tif x != nil {\n\t\treturn x.NId\n\t}\n\treturn \"\"\n}\n\nfunc (x *UnannotatedNestedMessage) GetVal() string {\n\tif x != nil {\n\t\treturn x.Val\n\t}\n\treturn \"\"\n}\n\n// UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service.\ntype UnannotatedSimpleMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId       string               `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tNum      int64                `protobuf:\"varint,2,opt,name=num,proto3\" json:\"num,omitempty\"`\n\tDuration *durationpb.Duration `protobuf:\"bytes,3,opt,name=duration,proto3\" json:\"duration,omitempty\"`\n\t// Types that are assignable to Code:\n\t//\n\t//\t*UnannotatedSimpleMessage_LineNum\n\t//\t*UnannotatedSimpleMessage_Lang\n\tCode   isUnannotatedSimpleMessage_Code `protobuf_oneof:\"code\"`\n\tStatus *UnannotatedEmbedded            `protobuf:\"bytes,6,opt,name=status,proto3\" json:\"status,omitempty\"`\n\t// Types that are assignable to Ext:\n\t//\n\t//\t*UnannotatedSimpleMessage_En\n\t//\t*UnannotatedSimpleMessage_No\n\tExt        isUnannotatedSimpleMessage_Ext `protobuf_oneof:\"ext\"`\n\tResourceId string                         `protobuf:\"bytes,9,opt,name=resource_id,json=resourceId,proto3\" json:\"resource_id,omitempty\"`\n\tNId        *UnannotatedNestedMessage      `protobuf:\"bytes,10,opt,name=n_id,json=nId,proto3\" json:\"n_id,omitempty\"`\n}\n\nfunc (x *UnannotatedSimpleMessage) Reset() {\n\t*x = UnannotatedSimpleMessage{}\n\tmi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UnannotatedSimpleMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UnannotatedSimpleMessage) ProtoMessage() {}\n\nfunc (x *UnannotatedSimpleMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UnannotatedSimpleMessage.ProtoReflect.Descriptor instead.\nfunc (*UnannotatedSimpleMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *UnannotatedSimpleMessage) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *UnannotatedSimpleMessage) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (x *UnannotatedSimpleMessage) GetDuration() *durationpb.Duration {\n\tif x != nil {\n\t\treturn x.Duration\n\t}\n\treturn nil\n}\n\nfunc (m *UnannotatedSimpleMessage) GetCode() isUnannotatedSimpleMessage_Code {\n\tif m != nil {\n\t\treturn m.Code\n\t}\n\treturn nil\n}\n\nfunc (x *UnannotatedSimpleMessage) GetLineNum() int64 {\n\tif x, ok := x.GetCode().(*UnannotatedSimpleMessage_LineNum); ok {\n\t\treturn x.LineNum\n\t}\n\treturn 0\n}\n\nfunc (x *UnannotatedSimpleMessage) GetLang() string {\n\tif x, ok := x.GetCode().(*UnannotatedSimpleMessage_Lang); ok {\n\t\treturn x.Lang\n\t}\n\treturn \"\"\n}\n\nfunc (x *UnannotatedSimpleMessage) GetStatus() *UnannotatedEmbedded {\n\tif x != nil {\n\t\treturn x.Status\n\t}\n\treturn nil\n}\n\nfunc (m *UnannotatedSimpleMessage) GetExt() isUnannotatedSimpleMessage_Ext {\n\tif m != nil {\n\t\treturn m.Ext\n\t}\n\treturn nil\n}\n\nfunc (x *UnannotatedSimpleMessage) GetEn() int64 {\n\tif x, ok := x.GetExt().(*UnannotatedSimpleMessage_En); ok {\n\t\treturn x.En\n\t}\n\treturn 0\n}\n\nfunc (x *UnannotatedSimpleMessage) GetNo() *UnannotatedEmbedded {\n\tif x, ok := x.GetExt().(*UnannotatedSimpleMessage_No); ok {\n\t\treturn x.No\n\t}\n\treturn nil\n}\n\nfunc (x *UnannotatedSimpleMessage) GetResourceId() string {\n\tif x != nil {\n\t\treturn x.ResourceId\n\t}\n\treturn \"\"\n}\n\nfunc (x *UnannotatedSimpleMessage) GetNId() *UnannotatedNestedMessage {\n\tif x != nil {\n\t\treturn x.NId\n\t}\n\treturn nil\n}\n\ntype isUnannotatedSimpleMessage_Code interface {\n\tisUnannotatedSimpleMessage_Code()\n}\n\ntype UnannotatedSimpleMessage_LineNum struct {\n\tLineNum int64 `protobuf:\"varint,4,opt,name=line_num,json=lineNum,proto3,oneof\"`\n}\n\ntype UnannotatedSimpleMessage_Lang struct {\n\tLang string `protobuf:\"bytes,5,opt,name=lang,proto3,oneof\"`\n}\n\nfunc (*UnannotatedSimpleMessage_LineNum) isUnannotatedSimpleMessage_Code() {}\n\nfunc (*UnannotatedSimpleMessage_Lang) isUnannotatedSimpleMessage_Code() {}\n\ntype isUnannotatedSimpleMessage_Ext interface {\n\tisUnannotatedSimpleMessage_Ext()\n}\n\ntype UnannotatedSimpleMessage_En struct {\n\tEn int64 `protobuf:\"varint,7,opt,name=en,proto3,oneof\"`\n}\n\ntype UnannotatedSimpleMessage_No struct {\n\tNo *UnannotatedEmbedded `protobuf:\"bytes,8,opt,name=no,proto3,oneof\"`\n}\n\nfunc (*UnannotatedSimpleMessage_En) isUnannotatedSimpleMessage_Ext() {}\n\nfunc (*UnannotatedSimpleMessage_No) isUnannotatedSimpleMessage_Ext() {}\n\nvar File_examples_internal_proto_examplepb_unannotated_echo_service_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc = []byte{\n\t0x0a, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x75, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f,\n\t0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x22, 0x51, 0x0a, 0x13, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65,\n\t0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f,\n\t0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70,\n\t0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a,\n\t0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x3f, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74,\n\t0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x12, 0x11, 0x0a, 0x04, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x03, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0xf9, 0x03, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x6e, 0x6e,\n\t0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,\n\t0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08,\n\t0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00,\n\t0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e,\n\t0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12,\n\t0x5b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65,\n\t0x64, 0x64, 0x65, 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02,\n\t0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x55,\n\t0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e,\n\t0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48,\n\t0x01, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,\n\t0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f,\n\t0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x04, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65,\n\t0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03,\n\t0x6e, 0x49, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65,\n\t0x78, 0x74, 0x32, 0x9c, 0x05, 0x0a, 0x16, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,\n\t0x65, 0x64, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9a, 0x01,\n\t0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,\n\t0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d,\n\t0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x08, 0x45,\n\t0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74,\n\t0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69,\n\t0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa0, 0x01, 0x0a, 0x0a,\n\t0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e,\n\t0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65,\n\t0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa0,\n\t0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x48, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55,\n\t0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74,\n\t0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,\n\t0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67,\n\t0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData = file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3)\nvar file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes = []any{\n\t(*UnannotatedEmbedded)(nil),      // 0: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEmbedded\n\t(*UnannotatedNestedMessage)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.UnannotatedNestedMessage\n\t(*UnannotatedSimpleMessage)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t(*durationpb.Duration)(nil),      // 3: google.protobuf.Duration\n}\nvar file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs = []int32{\n\t3, // 0: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.duration:type_name -> google.protobuf.Duration\n\t0, // 1: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedEmbedded\n\t0, // 2: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedEmbedded\n\t1, // 3: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.n_id:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedNestedMessage\n\t2, // 4: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t2, // 5: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t2, // 6: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t2, // 7: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoNested:input_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t2, // 8: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t2, // 9: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t2, // 10: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t2, // 11: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoNested:output_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n\t8, // [8:12] is the sub-list for method output_type\n\t4, // [4:8] is the sub-list for method input_type\n\t4, // [4:4] is the sub-list for extension type_name\n\t4, // [4:4] is the sub-list for extension extendee\n\t0, // [0:4] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_unannotated_echo_service_proto_init() }\nfunc file_examples_internal_proto_examplepb_unannotated_echo_service_proto_init() {\n\tif File_examples_internal_proto_examplepb_unannotated_echo_service_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0].OneofWrappers = []any{\n\t\t(*UnannotatedEmbedded_Progress)(nil),\n\t\t(*UnannotatedEmbedded_Note)(nil),\n\t}\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[2].OneofWrappers = []any{\n\t\t(*UnannotatedSimpleMessage_LineNum)(nil),\n\t\t(*UnannotatedSimpleMessage_Lang)(nil),\n\t\t(*UnannotatedSimpleMessage_En)(nil),\n\t\t(*UnannotatedSimpleMessage_No)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   3,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_unannotated_echo_service_proto = out.File\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/unannotated_echo_service.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_UnannotatedEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_UnannotatedEchoService_Echo_1 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0, \"num\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, client UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, client UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_UnannotatedEchoService_EchoDelete_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, client UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoDelete(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_UnannotatedEchoService_EchoNested_0(ctx context.Context, marshaler runtime.Marshaler, client UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoNested(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_EchoNested_0(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoNested(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterUnannotatedEchoServiceHandlerServer registers the http handlers for service UnannotatedEchoService to \"mux\".\n// UnaryRPC     :call UnannotatedEchoServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterUnannotatedEchoServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}/{num}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v1/example/echo_body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/v1/example/echo_delete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_UnannotatedEchoService_EchoNested_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoNested\", runtime.WithHTTPPathPattern(\"/v1/example/echo_nested\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_EchoNested_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoNested_0(annotatedContext, mux, outboundMarshaler, w, req, response_UnannotatedEchoService_EchoNested_0{resp.(*UnannotatedSimpleMessage)}, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterUnannotatedEchoServiceHandlerFromEndpoint is same as RegisterUnannotatedEchoServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterUnannotatedEchoServiceHandler(ctx, mux, conn)\n}\n\n// RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, NewUnannotatedEchoServiceClient(conn))\n}\n\n// RegisterUnannotatedEchoServiceHandlerClient registers the http handlers for service UnannotatedEchoService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"UnannotatedEchoServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"UnannotatedEchoServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"UnannotatedEchoServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client UnannotatedEchoServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}/{num}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v1/example/echo_body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/v1/example/echo_delete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_UnannotatedEchoService_EchoNested_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoNested\", runtime.WithHTTPPathPattern(\"/v1/example/echo_nested\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_EchoNested_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoNested_0(annotatedContext, mux, outboundMarshaler, w, req, response_UnannotatedEchoService_EchoNested_0{resp.(*UnannotatedSimpleMessage)}, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\ntype response_UnannotatedEchoService_EchoNested_0 struct {\n\t*UnannotatedSimpleMessage\n}\n\nfunc (m response_UnannotatedEchoService_EchoNested_0) XXX_ResponseBody() interface{} {\n\tresponse := m.UnannotatedSimpleMessage\n\treturn response.NId\n}\n\nvar (\n\tpattern_UnannotatedEchoService_Echo_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"echo\", \"id\"}, \"\"))\n\tpattern_UnannotatedEchoService_Echo_1       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"echo\", \"id\", \"num\"}, \"\"))\n\tpattern_UnannotatedEchoService_EchoBody_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_body\"}, \"\"))\n\tpattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_delete\"}, \"\"))\n\tpattern_UnannotatedEchoService_EchoNested_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_nested\"}, \"\"))\n)\n\nvar (\n\tforward_UnannotatedEchoService_Echo_0       = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_Echo_1       = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_EchoBody_0   = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_EchoDelete_0 = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_EchoNested_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service.proto",
    "content": "syntax = \"proto3\";\n\n// Unannotated Echo Service\n// Similar to echo_service.proto but without annotations. See\n// unannotated_echo_service.yaml for the equivalent of the annotations in\n// gRPC API configuration format.\n//\n// Echo Service API consists of a single service which returns\n// a message.\npackage grpc.gateway.examples.internal.proto.examplepb;\n\n// Do not need annotations.proto, can still use well known types as usual\nimport \"google/protobuf/duration.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb\";\n\n// Embedded represents a message embedded in SimpleMessage.\nmessage UnannotatedEmbedded {\n  oneof mark {\n    int64 progress = 1;\n    string note = 2;\n  }\n}\n\nmessage UnannotatedNestedMessage {\n  string n_id = 1;\n  string val = 2;\n}\n\n// UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service.\nmessage UnannotatedSimpleMessage {\n  // Id represents the message identifier.\n  string id = 1;\n  int64 num = 2;\n  google.protobuf.Duration duration = 3;\n  oneof code {\n    int64 line_num = 4;\n    string lang = 5;\n  }\n  UnannotatedEmbedded status = 6;\n  oneof ext {\n    int64 en = 7;\n    UnannotatedEmbedded no = 8;\n  }\n  string resource_id = 9;\n  UnannotatedNestedMessage n_id = 10;\n}\n\n// Echo service responds to incoming echo requests.\nservice UnannotatedEchoService {\n  // Echo method receives a simple message and returns it.\n  //\n  // The message posted as the id parameter will also be\n  // returned.\n  rpc Echo(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage);\n\n  // EchoBody method receives a simple message and returns it.\n  rpc EchoBody(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage);\n\n  // EchoDelete method receives a simple message and returns it.\n  rpc EchoDelete(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage);\n\n  // EchoNested method receives a simple message and returns it.\n  rpc EchoNested(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage);\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"Unannotated Echo\",\n    \"description\": \"Unannotated Echo Service\\nSimilar to echo_service.proto but without annotations. See\\nunannotated_echo_service.yaml for the equivalent of the annotations in\\ngRPC API configuration format.\\n\\nEcho Service API consists of a single service which returns\\na message.\",\n    \"version\": \"1.0\",\n    \"contact\": {\n      \"name\": \"gRPC-Gateway project\",\n      \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\",\n      \"email\": \"none@example.com\"\n    },\n    \"license\": {\n      \"name\": \"BSD 3-Clause License\",\n      \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\"\n    },\n    \"x-something-something\": \"yadda\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"Echo\",\n      \"description\": \"Echo description\"\n    },\n    {\n      \"name\": \"Internal\",\n      \"description\": \"Internal description\",\n      \"x-traitTag\": true\n    },\n    {\n      \"name\": \"UnannotatedEchoService\",\n      \"description\": \"UnannotatedEchoService description -- which should not be used in place of the documentation comment!\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about UnannotatedEchoService\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      }\n    }\n  ],\n  \"schemes\": [\n    \"http\",\n    \"https\",\n    \"wss\"\n  ],\n  \"consumes\": [\n    \"application/json\",\n    \"application/x-foo-mime\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"application/x-foo-mime\"\n  ],\n  \"paths\": {\n    \"/v1/example/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Summary: Echo rpc\",\n        \"description\": \"Description Echo\",\n        \"operationId\": \"UnannotatedEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbUnannotatedSimpleMessage\"\n            },\n            \"examples\": {\n              \"application/json\": {\n                \"value\": \"the input value\"\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"integer\"\n            }\n          },\n          \"503\": {\n            \"description\": \"Returned when the resource is temporarily unavailable.\",\n            \"schema\": {},\n            \"x-number\": 100\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"description\": \"Int value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\",\n            \"default\": \"42\"\n          },\n          {\n            \"name\": \"duration\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"UnannotatedEchoService\"\n        ],\n        \"externalDocs\": {\n          \"description\": \"Find out more Echo\",\n          \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        }\n      }\n    },\n    \"/v1/example/echo/{id}/{num}\": {\n      \"get\": {\n        \"summary\": \"Summary: Echo rpc\",\n        \"description\": \"Description Echo\",\n        \"operationId\": \"UnannotatedEchoService_Echo2\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbUnannotatedSimpleMessage\"\n            },\n            \"examples\": {\n              \"application/json\": {\n                \"value\": \"the input value\"\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"integer\"\n            }\n          },\n          \"503\": {\n            \"description\": \"Returned when the resource is temporarily unavailable.\",\n            \"schema\": {},\n            \"x-number\": 100\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"description\": \"Int value field\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\",\n            \"default\": \"42\"\n          },\n          {\n            \"name\": \"duration\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"UnannotatedEchoService\"\n        ],\n        \"externalDocs\": {\n          \"description\": \"Find out more Echo\",\n          \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n        }\n      }\n    },\n    \"/v1/example/echo_body\": {\n      \"post\": {\n        \"summary\": \"EchoBody method receives a simple message and returns it.\",\n        \"operationId\": \"UnannotatedEchoService_EchoBody\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbUnannotatedSimpleMessage\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"A simple message with many types\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbUnannotatedSimpleMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"UnannotatedEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_delete\": {\n      \"delete\": {\n        \"summary\": \"EchoDelete method receives a simple message and returns it.\",\n        \"operationId\": \"UnannotatedEchoService_EchoDelete\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbUnannotatedSimpleMessage\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"description\": \"Int value field\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"format\": \"int64\",\n            \"default\": \"42\"\n          },\n          {\n            \"name\": \"duration\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.nId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"nId.val\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ],\n        \"tags\": [\n          \"UnannotatedEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_nested\": {\n      \"put\": {\n        \"summary\": \"EchoNested method receives a simple message and returns it.\",\n        \"operationId\": \"UnannotatedEchoService_EchoNested\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbUnannotatedNestedMessage\"\n            }\n          },\n          \"403\": {\n            \"description\": \"Returned when the user does not have permission to access the resource.\",\n            \"schema\": {}\n          },\n          \"404\": {\n            \"description\": \"Returned when the resource does not exist.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"string\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"description\": \"A simple message with many types\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbUnannotatedSimpleMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"UnannotatedEchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbUnannotatedEmbedded\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"progress\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"note\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Embedded represents a message embedded in SimpleMessage.\",\n      \"x-go-type\": {\n        \"import\": {\n          \"package\": \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n        },\n        \"type\": \"UnannotatedEmbedded\"\n      }\n    },\n    \"examplepbUnannotatedNestedMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"nId\": {\n          \"type\": \"string\"\n        },\n        \"val\": {\n          \"type\": \"string\"\n        }\n      },\n      \"x-go-type\": {\n        \"import\": {\n          \"package\": \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n        },\n        \"type\": \"UnannotatedNestedMessage\"\n      }\n    },\n    \"examplepbUnannotatedSimpleMessage\": {\n      \"type\": \"object\",\n      \"example\": {\n        \"id\": \"myid\"\n      },\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\",\n          \"default\": \"42\",\n          \"description\": \"Int value field\"\n        },\n        \"duration\": {\n          \"type\": \"string\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lang\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/examplepbUnannotatedEmbedded\"\n        },\n        \"en\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"$ref\": \"#/definitions/examplepbUnannotatedEmbedded\"\n        },\n        \"resourceId\": {\n          \"type\": \"string\"\n        },\n        \"nId\": {\n          \"$ref\": \"#/definitions/examplepbUnannotatedNestedMessage\"\n        }\n      },\n      \"description\": \"A simple message with many types\",\n      \"title\": \"A bit of everything\",\n      \"externalDocs\": {\n        \"description\": \"Find out more about UnannotatedSimpleMessage\",\n        \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n      },\n      \"required\": [\n        \"id\",\n        \"num\"\n      ]\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"x-go-type\": {\n        \"import\": {\n          \"package\": \"google.golang.org/protobuf/types/known/anypb\"\n        },\n        \"type\": \"Any\"\n      }\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      },\n      \"x-go-type\": {\n        \"import\": {\n          \"package\": \"google.golang.org/genproto/googleapis/rpc/status\"\n        },\n        \"type\": \"Status\"\n      }\n    }\n  },\n  \"securityDefinitions\": {\n    \"ApiKeyAuth\": {\n      \"type\": \"apiKey\",\n      \"name\": \"X-API-Key\",\n      \"in\": \"header\",\n      \"x-amazon-apigateway-authorizer\": {\n        \"authorizerResultTtlInSeconds\": 60,\n        \"type\": \"token\"\n      },\n      \"x-amazon-apigateway-authtype\": \"oauth2\"\n    },\n    \"BasicAuth\": {\n      \"type\": \"basic\"\n    }\n  },\n  \"security\": [\n    {\n      \"ApiKeyAuth\": [],\n      \"BasicAuth\": []\n    },\n    {\n      \"ApiKeyAuth\": [],\n      \"OAuth2\": [\n        \"read\",\n        \"write\"\n      ]\n    }\n  ],\n  \"externalDocs\": {\n    \"description\": \"More about gRPC-Gateway\",\n    \"url\": \"https://github.com/grpc-ecosystem/grpc-gateway\"\n  },\n  \"x-grpc-gateway-baz-list\": [\n    \"one\",\n    true\n  ],\n  \"x-grpc-gateway-foo\": \"bar\"\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml",
    "content": "openapiOptions:\n  file:\n    # the file name must be the same as one passed to protoc when generating .swagger.json\n    - file: \"examples/internal/proto/examplepb/unannotated_echo_service.proto\"\n      option:\n        info:\n          title: Unannotated Echo\n          contact:\n            name: gRPC-Gateway project\n            url: https://github.com/grpc-ecosystem/grpc-gateway\n            email: none@example.com\n          license:\n            name: BSD 3-Clause License\n            url: https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\n          version: \"1.0\"\n          extensions:\n            x-something-something: yadda\n        tags:\n          - name: Echo\n            description: Echo description\n          - name: Internal\n            description: Internal description\n            extensions:\n              x-traitTag: true\n        schemes:\n          - HTTP\n          - HTTPS\n          - WSS\n        consumes:\n          - application/json\n          - application/x-foo-mime\n        produces:\n          - application/json\n          - application/x-foo-mime\n        responses:\n          \"403\":\n            description: Returned when the user does not have permission to access the resource.\n          \"404\":\n            description: Returned when the resource does not exist.\n            schema:\n              jsonSchema:\n                type:\n                  - STRING\n        securityDefinitions:\n          security:\n            ApiKeyAuth:\n              type: TYPE_API_KEY\n              name: X-API-Key\n              in: IN_HEADER\n              extensions:\n                x-amazon-apigateway-authorizer:\n                  authorizerResultTtlInSeconds: 60\n                  type: token\n                x-amazon-apigateway-authtype: oauth2\n            BasicAuth:\n              type: TYPE_BASIC\n        security:\n          - securityRequirement:\n              ApiKeyAuth: {}\n              BasicAuth: {}\n          - securityRequirement:\n              ApiKeyAuth: {}\n              OAuth2:\n                scope:\n                  - read\n                  - write\n        externalDocs:\n          description: More about gRPC-Gateway\n          url: https://github.com/grpc-ecosystem/grpc-gateway\n        extensions:\n          x-grpc-gateway-baz-list:\n            - one\n            - true\n          x-grpc-gateway-foo: bar\n  service:\n    - service: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService\n      option:\n        description: \"UnannotatedEchoService description -- which should not be used in place of the documentation comment!\"\n        external_docs:\n          url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n          description: \"Find out more about UnannotatedEchoService\"\n  method:\n    - method: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo\n      option:\n        description: \"Description Echo\"\n        summary: \"Summary: Echo rpc\"\n        external_docs:\n          url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n          description: \"Find out more Echo\"\n        responses:\n          \"200\":\n            examples:\n              \"application/json\": '{\"value\": \"the input value\"}'\n          \"503\":\n            description: Returned when the resource is temporarily unavailable.\n            extensions:\n              x-number: 100\n          \"404\":\n            description: Returned when the resource does not exist.\n            schema:\n              jsonSchema:\n                type: [INTEGER]\n  message:\n    - message: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage\n      option:\n        json_schema:\n          title: \"A bit of everything\"\n          description: \"A simple message with many types\"\n          required: [\"id\"]\n        external_docs:\n          url: \"https://github.com/grpc-ecosystem/grpc-gateway\"\n          description: \"Find out more about UnannotatedSimpleMessage\"\n        example: '{\"id\": \"myid\"}'\n  field:\n    - field: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.num\n      option:\n        description: \"Int value field\"\n        default: \"42\"\n        required: [\"num\"]\n"
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service.yaml",
    "content": "type: google.api.Service\r\nconfig_version: 3\r\n\r\nhttp:\r\n  rules:\r\n  - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo\r\n    post: \"/v1/example/echo/{id}\"\r\n    additional_bindings:\r\n    - get: \"/v1/example/echo/{id}/{num}\"\r\n  - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody\r\n    post: \"/v1/example/echo_body\"\r\n    body: \"*\"\r\n  - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete\r\n    delete: \"/v1/example/echo_delete\"\r\n  - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoNested\r\n    put: \"/v1/example/echo_nested\"\r\n    body: \"*\"\r\n    response_body: \"n_id\""
  },
  {
    "path": "examples/internal/proto/examplepb/unannotated_echo_service_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/unannotated_echo_service.proto\n\n// Unannotated Echo Service\n// Similar to echo_service.proto but without annotations. See\n// unannotated_echo_service.yaml for the equivalent of the annotations in\n// gRPC API configuration format.\n//\n// Echo Service API consists of a single service which returns\n// a message.\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tUnannotatedEchoService_Echo_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\"\n\tUnannotatedEchoService_EchoBody_FullMethodName   = \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody\"\n\tUnannotatedEchoService_EchoDelete_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete\"\n\tUnannotatedEchoService_EchoNested_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoNested\"\n)\n\n// UnannotatedEchoServiceClient is the client API for UnannotatedEchoService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// Echo service responds to incoming echo requests.\ntype UnannotatedEchoServiceClient interface {\n\t// Echo method receives a simple message and returns it.\n\t//\n\t// The message posted as the id parameter will also be\n\t// returned.\n\tEcho(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error)\n\t// EchoBody method receives a simple message and returns it.\n\tEchoBody(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error)\n\t// EchoDelete method receives a simple message and returns it.\n\tEchoDelete(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error)\n\t// EchoNested method receives a simple message and returns it.\n\tEchoNested(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error)\n}\n\ntype unannotatedEchoServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewUnannotatedEchoServiceClient(cc grpc.ClientConnInterface) UnannotatedEchoServiceClient {\n\treturn &unannotatedEchoServiceClient{cc}\n}\n\nfunc (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(UnannotatedSimpleMessage)\n\terr := c.cc.Invoke(ctx, UnannotatedEchoService_Echo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(UnannotatedSimpleMessage)\n\terr := c.cc.Invoke(ctx, UnannotatedEchoService_EchoBody_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *unannotatedEchoServiceClient) EchoDelete(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(UnannotatedSimpleMessage)\n\terr := c.cc.Invoke(ctx, UnannotatedEchoService_EchoDelete_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *unannotatedEchoServiceClient) EchoNested(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(UnannotatedSimpleMessage)\n\terr := c.cc.Invoke(ctx, UnannotatedEchoService_EchoNested_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// UnannotatedEchoServiceServer is the server API for UnannotatedEchoService service.\n// All implementations should embed UnimplementedUnannotatedEchoServiceServer\n// for forward compatibility.\n//\n// Echo service responds to incoming echo requests.\ntype UnannotatedEchoServiceServer interface {\n\t// Echo method receives a simple message and returns it.\n\t//\n\t// The message posted as the id parameter will also be\n\t// returned.\n\tEcho(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error)\n\t// EchoBody method receives a simple message and returns it.\n\tEchoBody(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error)\n\t// EchoDelete method receives a simple message and returns it.\n\tEchoDelete(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error)\n\t// EchoNested method receives a simple message and returns it.\n\tEchoNested(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error)\n}\n\n// UnimplementedUnannotatedEchoServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedUnannotatedEchoServiceServer struct{}\n\nfunc (UnimplementedUnannotatedEchoServiceServer) Echo(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Echo not implemented\")\n}\nfunc (UnimplementedUnannotatedEchoServiceServer) EchoBody(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoBody not implemented\")\n}\nfunc (UnimplementedUnannotatedEchoServiceServer) EchoDelete(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoDelete not implemented\")\n}\nfunc (UnimplementedUnannotatedEchoServiceServer) EchoNested(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoNested not implemented\")\n}\nfunc (UnimplementedUnannotatedEchoServiceServer) testEmbeddedByValue() {}\n\n// UnsafeUnannotatedEchoServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to UnannotatedEchoServiceServer will\n// result in compilation errors.\ntype UnsafeUnannotatedEchoServiceServer interface {\n\tmustEmbedUnimplementedUnannotatedEchoServiceServer()\n}\n\nfunc RegisterUnannotatedEchoServiceServer(s grpc.ServiceRegistrar, srv UnannotatedEchoServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedUnannotatedEchoServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&UnannotatedEchoService_ServiceDesc, srv)\n}\n\nfunc _UnannotatedEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(UnannotatedSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(UnannotatedEchoServiceServer).Echo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: UnannotatedEchoService_Echo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(UnannotatedEchoServiceServer).Echo(ctx, req.(*UnannotatedSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _UnannotatedEchoService_EchoBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(UnannotatedSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(UnannotatedEchoServiceServer).EchoBody(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: UnannotatedEchoService_EchoBody_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(UnannotatedEchoServiceServer).EchoBody(ctx, req.(*UnannotatedSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _UnannotatedEchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(UnannotatedSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(UnannotatedEchoServiceServer).EchoDelete(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: UnannotatedEchoService_EchoDelete_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(UnannotatedEchoServiceServer).EchoDelete(ctx, req.(*UnannotatedSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _UnannotatedEchoService_EchoNested_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(UnannotatedSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(UnannotatedEchoServiceServer).EchoNested(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: UnannotatedEchoService_EchoNested_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(UnannotatedEchoServiceServer).EchoNested(ctx, req.(*UnannotatedSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// UnannotatedEchoService_ServiceDesc is the grpc.ServiceDesc for UnannotatedEchoService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar UnannotatedEchoService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService\",\n\tHandlerType: (*UnannotatedEchoServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Echo\",\n\t\t\tHandler:    _UnannotatedEchoService_Echo_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoBody\",\n\t\t\tHandler:    _UnannotatedEchoService_EchoBody_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoDelete\",\n\t\t\tHandler:    _UnannotatedEchoService_EchoDelete_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoNested\",\n\t\t\tHandler:    _UnannotatedEchoService_EchoNested_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/unannotated_echo_service.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/use_go_template.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - use_go_templates=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/use_go_template.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/use_go_template.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype LoginRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// The entered username\n\tUsername string `protobuf:\"bytes,1,opt,name=username,proto3\" json:\"username,omitempty\"`\n\t// The entered password\n\tPassword string `protobuf:\"bytes,2,opt,name=password,proto3\" json:\"password,omitempty\"`\n}\n\nfunc (x *LoginRequest) Reset() {\n\t*x = LoginRequest{}\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *LoginRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*LoginRequest) ProtoMessage() {}\n\nfunc (x *LoginRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use LoginRequest.ProtoReflect.Descriptor instead.\nfunc (*LoginRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *LoginRequest) GetUsername() string {\n\tif x != nil {\n\t\treturn x.Username\n\t}\n\treturn \"\"\n}\n\nfunc (x *LoginRequest) GetPassword() string {\n\tif x != nil {\n\t\treturn x.Password\n\t}\n\treturn \"\"\n}\n\ntype LoginReply struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tMessage string `protobuf:\"bytes,1,opt,name=message,proto3\" json:\"message,omitempty\"`\n\t// Whether you have access or not\n\tAccess bool `protobuf:\"varint,2,opt,name=access,proto3\" json:\"access,omitempty\"`\n}\n\nfunc (x *LoginReply) Reset() {\n\t*x = LoginReply{}\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *LoginReply) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*LoginReply) ProtoMessage() {}\n\nfunc (x *LoginReply) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use LoginReply.ProtoReflect.Descriptor instead.\nfunc (*LoginReply) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *LoginReply) GetMessage() string {\n\tif x != nil {\n\t\treturn x.Message\n\t}\n\treturn \"\"\n}\n\nfunc (x *LoginReply) GetAccess() bool {\n\tif x != nil {\n\t\treturn x.Access\n\t}\n\treturn false\n}\n\ntype LogoutRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// The time the logout was registered\n\tTimeoflogout string `protobuf:\"bytes,1,opt,name=timeoflogout,proto3\" json:\"timeoflogout,omitempty\"`\n\t// This is the title\n\t//\n\t// This is the \"Description\" of field test\n\t// you can use as many newlines as you want\n\t//\n\t// it will still format the same in the table\n\tTest int32 `protobuf:\"varint,2,opt,name=test,proto3\" json:\"test,omitempty\"`\n\t// This is an array\n\t//\n\t// It displays that using [] in front of the type\n\tStringarray []string `protobuf:\"bytes,3,rep,name=stringarray,proto3\" json:\"stringarray,omitempty\"`\n}\n\nfunc (x *LogoutRequest) Reset() {\n\t*x = LogoutRequest{}\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *LogoutRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*LogoutRequest) ProtoMessage() {}\n\nfunc (x *LogoutRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use LogoutRequest.ProtoReflect.Descriptor instead.\nfunc (*LogoutRequest) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *LogoutRequest) GetTimeoflogout() string {\n\tif x != nil {\n\t\treturn x.Timeoflogout\n\t}\n\treturn \"\"\n}\n\nfunc (x *LogoutRequest) GetTest() int32 {\n\tif x != nil {\n\t\treturn x.Test\n\t}\n\treturn 0\n}\n\nfunc (x *LogoutRequest) GetStringarray() []string {\n\tif x != nil {\n\t\treturn x.Stringarray\n\t}\n\treturn nil\n}\n\ntype LogoutReply struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Message that tells you whether your\n\t// logout was successful or not\n\tMessage string `protobuf:\"bytes,1,opt,name=message,proto3\" json:\"message,omitempty\"`\n}\n\nfunc (x *LogoutReply) Reset() {\n\t*x = LogoutReply{}\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *LogoutReply) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*LogoutReply) ProtoMessage() {}\n\nfunc (x *LogoutReply) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use LogoutReply.ProtoReflect.Descriptor instead.\nfunc (*LogoutReply) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *LogoutReply) GetMessage() string {\n\tif x != nil {\n\t\treturn x.Message\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_proto_examplepb_use_go_template_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc = []byte{\n\t0x0a, 0x37, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x75, 0x73, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c,\n\t0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e,\n\t0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e,\n\t0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e,\n\t0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22,\n\t0x3e, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a,\n\t0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,\n\t0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73,\n\t0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22,\n\t0x69, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,\n\t0x12, 0x22, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f,\n\t0x67, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,\n\t0x28, 0x05, 0x52, 0x04, 0x74, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69,\n\t0x6e, 0x67, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73,\n\t0x74, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x72, 0x72, 0x61, 0x79, 0x22, 0x27, 0x0a, 0x0b, 0x4c, 0x6f,\n\t0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x32, 0xd6, 0x02, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x65, 0x72,\n\t0x76, 0x69, 0x63, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3c,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f,\n\t0x67, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16,\n\t0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75,\n\t0x74, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,\n\t0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82,\n\t0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x42, 0x4d, 0x5a, 0x4b,\n\t0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d,\n\t0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_use_go_template_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_use_go_template_proto_rawDescData = file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_use_go_template_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_use_go_template_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_use_go_template_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_use_go_template_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes = make([]protoimpl.MessageInfo, 4)\nvar file_examples_internal_proto_examplepb_use_go_template_proto_goTypes = []any{\n\t(*LoginRequest)(nil),  // 0: grpc.gateway.examples.internal.proto.examplepb.LoginRequest\n\t(*LoginReply)(nil),    // 1: grpc.gateway.examples.internal.proto.examplepb.LoginReply\n\t(*LogoutRequest)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.LogoutRequest\n\t(*LogoutReply)(nil),   // 3: grpc.gateway.examples.internal.proto.examplepb.LogoutReply\n}\nvar file_examples_internal_proto_examplepb_use_go_template_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.proto.examplepb.LoginService.Login:input_type -> grpc.gateway.examples.internal.proto.examplepb.LoginRequest\n\t2, // 1: grpc.gateway.examples.internal.proto.examplepb.LoginService.Logout:input_type -> grpc.gateway.examples.internal.proto.examplepb.LogoutRequest\n\t1, // 2: grpc.gateway.examples.internal.proto.examplepb.LoginService.Login:output_type -> grpc.gateway.examples.internal.proto.examplepb.LoginReply\n\t3, // 3: grpc.gateway.examples.internal.proto.examplepb.LoginService.Logout:output_type -> grpc.gateway.examples.internal.proto.examplepb.LogoutReply\n\t2, // [2:4] is the sub-list for method output_type\n\t0, // [0:2] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_use_go_template_proto_init() }\nfunc file_examples_internal_proto_examplepb_use_go_template_proto_init() {\n\tif File_examples_internal_proto_examplepb_use_go_template_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   4,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_use_go_template_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_use_go_template_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_use_go_template_proto = out.File\n\tfile_examples_internal_proto_examplepb_use_go_template_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_use_go_template_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_use_go_template_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/use_go_template.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/use_go_template.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_LoginService_Login_0(ctx context.Context, marshaler runtime.Marshaler, client LoginServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq LoginRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Login(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_LoginService_Login_0(ctx context.Context, marshaler runtime.Marshaler, server LoginServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq LoginRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Login(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_LoginService_Logout_0(ctx context.Context, marshaler runtime.Marshaler, client LoginServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq LogoutRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Logout(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_LoginService_Logout_0(ctx context.Context, marshaler runtime.Marshaler, server LoginServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq LogoutRequest\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Logout(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterLoginServiceHandlerServer registers the http handlers for service LoginService to \"mux\".\n// UnaryRPC     :call LoginServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterLoginServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server LoginServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_LoginService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login\", runtime.WithHTTPPathPattern(\"/v1/example/login\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_LoginService_Login_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_LoginService_Login_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_LoginService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout\", runtime.WithHTTPPathPattern(\"/v1/example/logout\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_LoginService_Logout_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_LoginService_Logout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterLoginServiceHandlerFromEndpoint is same as RegisterLoginServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterLoginServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterLoginServiceHandler(ctx, mux, conn)\n}\n\n// RegisterLoginServiceHandler registers the http handlers for service LoginService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterLoginServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterLoginServiceHandlerClient(ctx, mux, NewLoginServiceClient(conn))\n}\n\n// RegisterLoginServiceHandlerClient registers the http handlers for service LoginService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"LoginServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"LoginServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"LoginServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LoginServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_LoginService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login\", runtime.WithHTTPPathPattern(\"/v1/example/login\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_LoginService_Login_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_LoginService_Login_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_LoginService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout\", runtime.WithHTTPPathPattern(\"/v1/example/logout\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_LoginService_Logout_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_LoginService_Logout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_LoginService_Login_0  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"login\"}, \"\"))\n\tpattern_LoginService_Logout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"logout\"}, \"\"))\n)\n\nvar (\n\tforward_LoginService_Login_0  = runtime.ForwardResponseMessage\n\tforward_LoginService_Logout_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/use_go_template.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\nservice LoginService {\n  // Login\n  //\n  // {{.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.\n  // It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n  //\n  // ## {{.RequestType.Name}}\n  // | Field ID    | Name      | Type                                                       | Description                  |\n  // | ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | {{range .RequestType.Fields}}\n  // | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n  //\n  // ## {{.ResponseType.Name}}\n  // | Field ID    | Name      | Type                                                       | Description                  |\n  // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}\n  // | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n  rpc Login(LoginRequest) returns (LoginReply) {\n    option (google.api.http) = {\n      post: \"/v1/example/login\"\n      body: \"*\"\n    };\n  }\n\n  // Logout\n  //\n  // {{.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.\n  // It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n  //\n  // ## {{.RequestType.Name}}\n  // | Field ID    | Name      | Type                                                       | Description                  |\n  // | ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | {{range .RequestType.Fields}}\n  // | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n  //\n  // ## {{.ResponseType.Name}}\n  // | Field ID    | Name      | Type                                                       | Description                  |\n  // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}\n  // | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n  rpc Logout(LogoutRequest) returns (LogoutReply) {\n    option (google.api.http) = {\n      post: \"/v1/example/logout\"\n      body: \"*\"\n    };\n  }\n}\n\nmessage LoginRequest {\n  // The entered username\n  string username = 1;\n  // The entered password\n  string password = 2;\n}\n\nmessage LoginReply {\n  string message = 1;\n  // Whether you have access or not\n  bool access = 2;\n}\n\nmessage LogoutRequest {\n  // The time the logout was registered\n  string timeoflogout = 1;\n  // This is the title\n  //\n  // This is the \"Description\" of field test\n  // you can use as many newlines as you want\n  //\n  //\n  // it will still format the same in the table\n  int32 test = 2;\n  // This is an array\n  //\n  // It displays that using [] in front of the type\n  repeated string stringarray = 3;\n}\n\nmessage LogoutReply {\n  // Message that tells you whether your\n  // logout was successful or not\n  string message = 1;\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/use_go_template.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/use_go_template.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"LoginService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/login\": {\n      \"post\": {\n        \"summary\": \"Login\",\n        \"description\": \"Login is a call with the method(s) POST within the \\\"LoginService\\\" service.\\nIt takes in \\\"LoginRequest\\\" and returns a \\\"LoginReply\\\".\\n\\n## LoginRequest\\n| Field ID    | Name      | Type                                                       | Description                  |\\n| ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | \\n| 1 | username | TYPE_STRING | The entered username | \\n| 2 | password | TYPE_STRING | The entered password | \\n\\n## LoginReply\\n| Field ID    | Name      | Type                                                       | Description                  |\\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \\n| 1 | message | TYPE_STRING |  | \\n| 2 | access | TYPE_BOOL | Whether you have access or not |\",\n        \"operationId\": \"LoginService_Login\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbLoginReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbLoginRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"LoginService\"\n        ]\n      }\n    },\n    \"/v1/example/logout\": {\n      \"post\": {\n        \"summary\": \"Logout\",\n        \"description\": \"Logout is a call with the method(s) POST within the \\\"LoginService\\\" service.\\nIt takes in \\\"LogoutRequest\\\" and returns a \\\"LogoutReply\\\".\\n\\n## LogoutRequest\\n| Field ID    | Name      | Type                                                       | Description                  |\\n| ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | \\n| 1 | timeoflogout | TYPE_STRING | The time the logout was registered | \\n| 2 | test | TYPE_INT32 | This is the title\\u003cbr\\u003e\\u003cbr\\u003eThis is the \\\"Description\\\" of field test\\u003cbr\\u003eyou can use as many newlines as you want\\u003cbr\\u003e\\u003cbr\\u003e\\u003cbr\\u003eit will still format the same in the table | \\n| 3 | stringarray | []TYPE_STRING | This is an array\\u003cbr\\u003e\\u003cbr\\u003eIt displays that using [] in front of the type | \\n\\n## LogoutReply\\n| Field ID    | Name      | Type                                                       | Description                  |\\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \\n| 1 | message | TYPE_STRING | Message that tells you whether your\\u003cbr\\u003elogout was successful or not |\",\n        \"operationId\": \"LoginService_Logout\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbLogoutReply\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbLogoutRequest\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"LoginService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbLoginReply\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"access\": {\n          \"type\": \"boolean\",\n          \"title\": \"Whether you have access or not\"\n        }\n      }\n    },\n    \"examplepbLoginRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"username\": {\n          \"type\": \"string\",\n          \"title\": \"The entered username\"\n        },\n        \"password\": {\n          \"type\": \"string\",\n          \"title\": \"The entered password\"\n        }\n      }\n    },\n    \"examplepbLogoutReply\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"message\": {\n          \"type\": \"string\",\n          \"title\": \"Message that tells you whether your\\nlogout was successful or not\"\n        }\n      }\n    },\n    \"examplepbLogoutRequest\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"timeoflogout\": {\n          \"type\": \"string\",\n          \"title\": \"The time the logout was registered\"\n        },\n        \"test\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"This is the \\\"Description\\\" of field test\\nyou can use as many newlines as you want\\n\\n\\nit will still format the same in the table\",\n          \"title\": \"This is the title\"\n        },\n        \"stringarray\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"It displays that using [] in front of the type\",\n          \"title\": \"This is an array\"\n        }\n      }\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/use_go_template_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/use_go_template.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tLoginService_Login_FullMethodName  = \"/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login\"\n\tLoginService_Logout_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout\"\n)\n\n// LoginServiceClient is the client API for LoginService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype LoginServiceClient interface {\n\t// Login\n\t//\n\t// {{.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.\n\t// It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n\t//\n\t// ## {{.RequestType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | {{range .RequestType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\t//\n\t// ## {{.ResponseType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\tLogin(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginReply, error)\n\t// Logout\n\t//\n\t// {{.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.\n\t// It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n\t//\n\t// ## {{.RequestType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | {{range .RequestType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\t//\n\t// ## {{.ResponseType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\tLogout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutReply, error)\n}\n\ntype loginServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewLoginServiceClient(cc grpc.ClientConnInterface) LoginServiceClient {\n\treturn &loginServiceClient{cc}\n}\n\nfunc (c *loginServiceClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginReply, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(LoginReply)\n\terr := c.cc.Invoke(ctx, LoginService_Login_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *loginServiceClient) Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutReply, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(LogoutReply)\n\terr := c.cc.Invoke(ctx, LoginService_Logout_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// LoginServiceServer is the server API for LoginService service.\n// All implementations should embed UnimplementedLoginServiceServer\n// for forward compatibility.\ntype LoginServiceServer interface {\n\t// Login\n\t//\n\t// {{.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.\n\t// It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n\t//\n\t// ## {{.RequestType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | {{range .RequestType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\t//\n\t// ## {{.ResponseType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\tLogin(context.Context, *LoginRequest) (*LoginReply, error)\n\t// Logout\n\t//\n\t// {{.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.\n\t// It takes in \"{{.RequestType.Name}}\" and returns a \"{{.ResponseType.Name}}\".\n\t//\n\t// ## {{.RequestType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------  | ---------------------------- | {{range .RequestType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\t//\n\t// ## {{.ResponseType.Name}}\n\t// | Field ID    | Name      | Type                                                       | Description                  |\n\t// | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}\n\t// | {{.Number}} | {{.Name}} | {{if eq .Label.String \"LABEL_REPEATED\"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}\n\tLogout(context.Context, *LogoutRequest) (*LogoutReply, error)\n}\n\n// UnimplementedLoginServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedLoginServiceServer struct{}\n\nfunc (UnimplementedLoginServiceServer) Login(context.Context, *LoginRequest) (*LoginReply, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Login not implemented\")\n}\nfunc (UnimplementedLoginServiceServer) Logout(context.Context, *LogoutRequest) (*LogoutReply, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Logout not implemented\")\n}\nfunc (UnimplementedLoginServiceServer) testEmbeddedByValue() {}\n\n// UnsafeLoginServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to LoginServiceServer will\n// result in compilation errors.\ntype UnsafeLoginServiceServer interface {\n\tmustEmbedUnimplementedLoginServiceServer()\n}\n\nfunc RegisterLoginServiceServer(s grpc.ServiceRegistrar, srv LoginServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedLoginServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&LoginService_ServiceDesc, srv)\n}\n\nfunc _LoginService_Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(LoginRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(LoginServiceServer).Login(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: LoginService_Login_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(LoginServiceServer).Login(ctx, req.(*LoginRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _LoginService_Logout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(LogoutRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(LoginServiceServer).Logout(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: LoginService_Logout_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(LoginServiceServer).Logout(ctx, req.(*LogoutRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// LoginService_ServiceDesc is the grpc.ServiceDesc for LoginService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar LoginService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.LoginService\",\n\tHandlerType: (*LoginServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Login\",\n\t\t\tHandler:    _LoginService_Login_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Logout\",\n\t\t\tHandler:    _LoginService_Logout_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/use_go_template.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\n// Visibility Rule Echo Service\n// Similar to echo_service.proto but with annotations to change visibility\n// of services, methods, fields and enum values.\n//\n// `google.api.VisibilityRule` annotations are added to customize where they are generated.\n// Combined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\n// Elements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n//\n// These restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\n// In this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\t_ \"google.golang.org/genproto/googleapis/api/visibility\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// EnumInPreviewMethod doesn't define its own visibility restrictions,\n// but is only included in a method marked as \"PREVIEW\", so it will only\n// appear if `visibility_restriction_selectors` include \"PREVIEW\".\ntype VisibilityRuleEnumInPreviewMethod int32\n\nconst (\n\tVisibilityRuleEnumInPreviewMethod_VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED VisibilityRuleEnumInPreviewMethod = 0\n)\n\n// Enum value maps for VisibilityRuleEnumInPreviewMethod.\nvar (\n\tVisibilityRuleEnumInPreviewMethod_name = map[int32]string{\n\t\t0: \"VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED\",\n\t}\n\tVisibilityRuleEnumInPreviewMethod_value = map[string]int32{\n\t\t\"VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED\": 0,\n\t}\n)\n\nfunc (x VisibilityRuleEnumInPreviewMethod) Enum() *VisibilityRuleEnumInPreviewMethod {\n\tp := new(VisibilityRuleEnumInPreviewMethod)\n\t*p = x\n\treturn p\n}\n\nfunc (x VisibilityRuleEnumInPreviewMethod) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (VisibilityRuleEnumInPreviewMethod) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0].Descriptor()\n}\n\nfunc (VisibilityRuleEnumInPreviewMethod) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0]\n}\n\nfunc (x VisibilityRuleEnumInPreviewMethod) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use VisibilityRuleEnumInPreviewMethod.Descriptor instead.\nfunc (VisibilityRuleEnumInPreviewMethod) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{0}\n}\n\ntype VisibilityRuleSimpleMessage_VisibilityEnum int32\n\nconst (\n\tVisibilityRuleSimpleMessage_VISIBILITY_ENUM_UNSPECIFIED VisibilityRuleSimpleMessage_VisibilityEnum = 0\n\tVisibilityRuleSimpleMessage_VISIBILITY_ENUM_VISIBLE     VisibilityRuleSimpleMessage_VisibilityEnum = 1\n\tVisibilityRuleSimpleMessage_VISIBILITY_ENUM_INTERNAL    VisibilityRuleSimpleMessage_VisibilityEnum = 2\n\tVisibilityRuleSimpleMessage_VISIBILITY_ENUM_PREVIEW     VisibilityRuleSimpleMessage_VisibilityEnum = 3\n)\n\n// Enum value maps for VisibilityRuleSimpleMessage_VisibilityEnum.\nvar (\n\tVisibilityRuleSimpleMessage_VisibilityEnum_name = map[int32]string{\n\t\t0: \"VISIBILITY_ENUM_UNSPECIFIED\",\n\t\t1: \"VISIBILITY_ENUM_VISIBLE\",\n\t\t2: \"VISIBILITY_ENUM_INTERNAL\",\n\t\t3: \"VISIBILITY_ENUM_PREVIEW\",\n\t}\n\tVisibilityRuleSimpleMessage_VisibilityEnum_value = map[string]int32{\n\t\t\"VISIBILITY_ENUM_UNSPECIFIED\": 0,\n\t\t\"VISIBILITY_ENUM_VISIBLE\":     1,\n\t\t\"VISIBILITY_ENUM_INTERNAL\":    2,\n\t\t\"VISIBILITY_ENUM_PREVIEW\":     3,\n\t}\n)\n\nfunc (x VisibilityRuleSimpleMessage_VisibilityEnum) Enum() *VisibilityRuleSimpleMessage_VisibilityEnum {\n\tp := new(VisibilityRuleSimpleMessage_VisibilityEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x VisibilityRuleSimpleMessage_VisibilityEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (VisibilityRuleSimpleMessage_VisibilityEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[1].Descriptor()\n}\n\nfunc (VisibilityRuleSimpleMessage_VisibilityEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[1]\n}\n\nfunc (x VisibilityRuleSimpleMessage_VisibilityEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use VisibilityRuleSimpleMessage_VisibilityEnum.Descriptor instead.\nfunc (VisibilityRuleSimpleMessage_VisibilityEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{1, 0}\n}\n\ntype VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault int32\n\nconst (\n\tVisibilityRuleSimpleMessage_VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault = 0\n\tVisibilityRuleSimpleMessage_VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE     VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault = 1\n)\n\n// Enum value maps for VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault.\nvar (\n\tVisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault_name = map[int32]string{\n\t\t0: \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n\t\t1: \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\",\n\t}\n\tVisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault_value = map[string]int32{\n\t\t\"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\": 0,\n\t\t\"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\":     1,\n\t}\n)\n\nfunc (x VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault) Enum() *VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault {\n\tp := new(VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault)\n\t*p = x\n\treturn p\n}\n\nfunc (x VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[2].Descriptor()\n}\n\nfunc (VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[2]\n}\n\nfunc (x VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault.Descriptor instead.\nfunc (VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{1, 1}\n}\n\n// Embedded represents a message embedded in SimpleMessage.\ntype VisibilityRuleEmbedded struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Types that are assignable to Mark:\n\t//\n\t//\t*VisibilityRuleEmbedded_Progress\n\t//\t*VisibilityRuleEmbedded_Note\n\t//\t*VisibilityRuleEmbedded_InternalField\n\t//\t*VisibilityRuleEmbedded_PreviewField\n\tMark isVisibilityRuleEmbedded_Mark `protobuf_oneof:\"mark\"`\n}\n\nfunc (x *VisibilityRuleEmbedded) Reset() {\n\t*x = VisibilityRuleEmbedded{}\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *VisibilityRuleEmbedded) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*VisibilityRuleEmbedded) ProtoMessage() {}\n\nfunc (x *VisibilityRuleEmbedded) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use VisibilityRuleEmbedded.ProtoReflect.Descriptor instead.\nfunc (*VisibilityRuleEmbedded) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (m *VisibilityRuleEmbedded) GetMark() isVisibilityRuleEmbedded_Mark {\n\tif m != nil {\n\t\treturn m.Mark\n\t}\n\treturn nil\n}\n\nfunc (x *VisibilityRuleEmbedded) GetProgress() int64 {\n\tif x, ok := x.GetMark().(*VisibilityRuleEmbedded_Progress); ok {\n\t\treturn x.Progress\n\t}\n\treturn 0\n}\n\nfunc (x *VisibilityRuleEmbedded) GetNote() string {\n\tif x, ok := x.GetMark().(*VisibilityRuleEmbedded_Note); ok {\n\t\treturn x.Note\n\t}\n\treturn \"\"\n}\n\nfunc (x *VisibilityRuleEmbedded) GetInternalField() string {\n\tif x, ok := x.GetMark().(*VisibilityRuleEmbedded_InternalField); ok {\n\t\treturn x.InternalField\n\t}\n\treturn \"\"\n}\n\nfunc (x *VisibilityRuleEmbedded) GetPreviewField() string {\n\tif x, ok := x.GetMark().(*VisibilityRuleEmbedded_PreviewField); ok {\n\t\treturn x.PreviewField\n\t}\n\treturn \"\"\n}\n\ntype isVisibilityRuleEmbedded_Mark interface {\n\tisVisibilityRuleEmbedded_Mark()\n}\n\ntype VisibilityRuleEmbedded_Progress struct {\n\tProgress int64 `protobuf:\"varint,1,opt,name=progress,proto3,oneof\"`\n}\n\ntype VisibilityRuleEmbedded_Note struct {\n\tNote string `protobuf:\"bytes,2,opt,name=note,proto3,oneof\"`\n}\n\ntype VisibilityRuleEmbedded_InternalField struct {\n\tInternalField string `protobuf:\"bytes,3,opt,name=internal_field,json=internalField,proto3,oneof\"`\n}\n\ntype VisibilityRuleEmbedded_PreviewField struct {\n\tPreviewField string `protobuf:\"bytes,4,opt,name=preview_field,json=previewField,proto3,oneof\"`\n}\n\nfunc (*VisibilityRuleEmbedded_Progress) isVisibilityRuleEmbedded_Mark() {}\n\nfunc (*VisibilityRuleEmbedded_Note) isVisibilityRuleEmbedded_Mark() {}\n\nfunc (*VisibilityRuleEmbedded_InternalField) isVisibilityRuleEmbedded_Mark() {}\n\nfunc (*VisibilityRuleEmbedded_PreviewField) isVisibilityRuleEmbedded_Mark() {}\n\n// SimpleMessage represents a simple message sent to the Echo service.\ntype VisibilityRuleSimpleMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId  string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tNum int64  `protobuf:\"varint,2,opt,name=num,proto3\" json:\"num,omitempty\"`\n\t// Types that are assignable to Code:\n\t//\n\t//\t*VisibilityRuleSimpleMessage_LineNum\n\t//\t*VisibilityRuleSimpleMessage_Lang\n\tCode   isVisibilityRuleSimpleMessage_Code `protobuf_oneof:\"code\"`\n\tStatus *VisibilityRuleEmbedded            `protobuf:\"bytes,5,opt,name=status,proto3\" json:\"status,omitempty\"`\n\t// Types that are assignable to Ext:\n\t//\n\t//\t*VisibilityRuleSimpleMessage_En\n\t//\t*VisibilityRuleSimpleMessage_No\n\tExt                isVisibilityRuleSimpleMessage_Ext                       `protobuf_oneof:\"ext\"`\n\tInternalField      string                                                  `protobuf:\"bytes,8,opt,name=internal_field,json=internalField,proto3\" json:\"internal_field,omitempty\"`\n\tPreviewField       string                                                  `protobuf:\"bytes,9,opt,name=preview_field,json=previewField,proto3\" json:\"preview_field,omitempty\"`\n\tAnEnum             VisibilityRuleSimpleMessage_VisibilityEnum              `protobuf:\"varint,10,opt,name=an_enum,json=anEnum,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage_VisibilityEnum\" json:\"an_enum,omitempty\"`\n\tAhiddenDefaultEnum VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault `protobuf:\"varint,11,opt,name=ahidden_default_enum,json=ahiddenDefaultEnum,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault\" json:\"ahidden_default_enum,omitempty\"`\n}\n\nfunc (x *VisibilityRuleSimpleMessage) Reset() {\n\t*x = VisibilityRuleSimpleMessage{}\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *VisibilityRuleSimpleMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*VisibilityRuleSimpleMessage) ProtoMessage() {}\n\nfunc (x *VisibilityRuleSimpleMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use VisibilityRuleSimpleMessage.ProtoReflect.Descriptor instead.\nfunc (*VisibilityRuleSimpleMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (m *VisibilityRuleSimpleMessage) GetCode() isVisibilityRuleSimpleMessage_Code {\n\tif m != nil {\n\t\treturn m.Code\n\t}\n\treturn nil\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetLineNum() int64 {\n\tif x, ok := x.GetCode().(*VisibilityRuleSimpleMessage_LineNum); ok {\n\t\treturn x.LineNum\n\t}\n\treturn 0\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetLang() string {\n\tif x, ok := x.GetCode().(*VisibilityRuleSimpleMessage_Lang); ok {\n\t\treturn x.Lang\n\t}\n\treturn \"\"\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetStatus() *VisibilityRuleEmbedded {\n\tif x != nil {\n\t\treturn x.Status\n\t}\n\treturn nil\n}\n\nfunc (m *VisibilityRuleSimpleMessage) GetExt() isVisibilityRuleSimpleMessage_Ext {\n\tif m != nil {\n\t\treturn m.Ext\n\t}\n\treturn nil\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetEn() int64 {\n\tif x, ok := x.GetExt().(*VisibilityRuleSimpleMessage_En); ok {\n\t\treturn x.En\n\t}\n\treturn 0\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetNo() *VisibilityRuleEmbedded {\n\tif x, ok := x.GetExt().(*VisibilityRuleSimpleMessage_No); ok {\n\t\treturn x.No\n\t}\n\treturn nil\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetInternalField() string {\n\tif x != nil {\n\t\treturn x.InternalField\n\t}\n\treturn \"\"\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetPreviewField() string {\n\tif x != nil {\n\t\treturn x.PreviewField\n\t}\n\treturn \"\"\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetAnEnum() VisibilityRuleSimpleMessage_VisibilityEnum {\n\tif x != nil {\n\t\treturn x.AnEnum\n\t}\n\treturn VisibilityRuleSimpleMessage_VISIBILITY_ENUM_UNSPECIFIED\n}\n\nfunc (x *VisibilityRuleSimpleMessage) GetAhiddenDefaultEnum() VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault {\n\tif x != nil {\n\t\treturn x.AhiddenDefaultEnum\n\t}\n\treturn VisibilityRuleSimpleMessage_VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\n}\n\ntype isVisibilityRuleSimpleMessage_Code interface {\n\tisVisibilityRuleSimpleMessage_Code()\n}\n\ntype VisibilityRuleSimpleMessage_LineNum struct {\n\tLineNum int64 `protobuf:\"varint,3,opt,name=line_num,json=lineNum,proto3,oneof\"`\n}\n\ntype VisibilityRuleSimpleMessage_Lang struct {\n\tLang string `protobuf:\"bytes,4,opt,name=lang,proto3,oneof\"`\n}\n\nfunc (*VisibilityRuleSimpleMessage_LineNum) isVisibilityRuleSimpleMessage_Code() {}\n\nfunc (*VisibilityRuleSimpleMessage_Lang) isVisibilityRuleSimpleMessage_Code() {}\n\ntype isVisibilityRuleSimpleMessage_Ext interface {\n\tisVisibilityRuleSimpleMessage_Ext()\n}\n\ntype VisibilityRuleSimpleMessage_En struct {\n\tEn int64 `protobuf:\"varint,6,opt,name=en,proto3,oneof\"`\n}\n\ntype VisibilityRuleSimpleMessage_No struct {\n\tNo *VisibilityRuleEmbedded `protobuf:\"bytes,7,opt,name=no,proto3,oneof\"`\n}\n\nfunc (*VisibilityRuleSimpleMessage_En) isVisibilityRuleSimpleMessage_Ext() {}\n\nfunc (*VisibilityRuleSimpleMessage_No) isVisibilityRuleSimpleMessage_Ext() {}\n\n// MessageInPreviewMethod doesn't define its own visibility restrictions,\n// but is only included in a method marked as \"PREVIEW\", so it will only\n// appear if `visibility_restriction_selectors` include \"PREVIEW\".\ntype VisibilityRuleMessageInPreviewMethod struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tId         string                                   `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tSubMessage *VisibilityRuleSubMessageInPreviewMethod `protobuf:\"bytes,2,opt,name=sub_message,json=subMessage,proto3\" json:\"sub_message,omitempty\"`\n\tEnum       VisibilityRuleEnumInPreviewMethod        `protobuf:\"varint,3,opt,name=enum,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEnumInPreviewMethod\" json:\"enum,omitempty\"`\n}\n\nfunc (x *VisibilityRuleMessageInPreviewMethod) Reset() {\n\t*x = VisibilityRuleMessageInPreviewMethod{}\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *VisibilityRuleMessageInPreviewMethod) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*VisibilityRuleMessageInPreviewMethod) ProtoMessage() {}\n\nfunc (x *VisibilityRuleMessageInPreviewMethod) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use VisibilityRuleMessageInPreviewMethod.ProtoReflect.Descriptor instead.\nfunc (*VisibilityRuleMessageInPreviewMethod) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *VisibilityRuleMessageInPreviewMethod) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *VisibilityRuleMessageInPreviewMethod) GetSubMessage() *VisibilityRuleSubMessageInPreviewMethod {\n\tif x != nil {\n\t\treturn x.SubMessage\n\t}\n\treturn nil\n}\n\nfunc (x *VisibilityRuleMessageInPreviewMethod) GetEnum() VisibilityRuleEnumInPreviewMethod {\n\tif x != nil {\n\t\treturn x.Enum\n\t}\n\treturn VisibilityRuleEnumInPreviewMethod_VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED\n}\n\n// SubMessageInPreviewMethod doesn't define its own visibility restrictions,\n// but is only included in a method marked as \"PREVIEW\", so it will only\n// appear if `visibility_restriction_selectors` include \"PREVIEW\".\ntype VisibilityRuleSubMessageInPreviewMethod struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tId string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n}\n\nfunc (x *VisibilityRuleSubMessageInPreviewMethod) Reset() {\n\t*x = VisibilityRuleSubMessageInPreviewMethod{}\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *VisibilityRuleSubMessageInPreviewMethod) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*VisibilityRuleSubMessageInPreviewMethod) ProtoMessage() {}\n\nfunc (x *VisibilityRuleSubMessageInPreviewMethod) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use VisibilityRuleSubMessageInPreviewMethod.ProtoReflect.Descriptor instead.\nfunc (*VisibilityRuleSubMessageInPreviewMethod) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *VisibilityRuleSubMessageInPreviewMethod) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_proto_examplepb_visibility_rule_echo_service_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc = []byte{\n\t0x0a, 0x44, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x72,\n\t0x75, 0x6c, 0x65, 0x5f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61,\n\t0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69,\n\t0x2f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x22, 0xd0, 0x01, 0x0a, 0x16, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,\n\t0x52, 0x75, 0x6c, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08,\n\t0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00,\n\t0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f,\n\t0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65,\n\t0x12, 0x39, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x65,\n\t0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a,\n\t0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x70,\n\t0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01,\n\t0x28, 0x09, 0x42, 0x18, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45,\n\t0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x48, 0x00, 0x52, 0x0c,\n\t0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x06, 0x0a, 0x04,\n\t0x6d, 0x61, 0x72, 0x6b, 0x22, 0x9c, 0x08, 0x0a, 0x1b, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c,\n\t0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e,\n\t0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65,\n\t0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28,\n\t0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x5e, 0x0a, 0x06, 0x73, 0x74, 0x61,\n\t0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62,\n\t0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65,\n\t0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18,\n\t0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x58, 0x0a, 0x02, 0x6e,\n\t0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c,\n\t0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48,\n\t0x01, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x37, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xfa,\n\t0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x52,\n\t0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3d,\n\t0x0a, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18,\n\t0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49,\n\t0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x52,\n\t0x0c, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x73, 0x0a,\n\t0x07, 0x61, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x5a,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69,\n\t0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x56, 0x69, 0x73, 0x69,\n\t0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x06, 0x61, 0x6e, 0x45, 0x6e,\n\t0x75, 0x6d, 0x12, 0x99, 0x01, 0x0a, 0x14, 0x61, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x5f, 0x64,\n\t0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28,\n\t0x0e, 0x32, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c,\n\t0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x56,\n\t0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x69, 0x64,\n\t0x64, 0x65, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x12, 0x61, 0x68, 0x69, 0x64,\n\t0x64, 0x65, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0xb5,\n\t0x01, 0x0a, 0x0e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x75,\n\t0x6d, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f,\n\t0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,\n\t0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59,\n\t0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12,\n\t0x2e, 0x0a, 0x18, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x4e,\n\t0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x1a, 0x10, 0xfa,\n\t0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x12,\n\t0x35, 0x0a, 0x17, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x4e,\n\t0x55, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x10, 0x03, 0x1a, 0x18, 0xfa, 0xd2,\n\t0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50,\n\t0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x22, 0x8b, 0x01, 0x0a, 0x1b, 0x56, 0x69, 0x73, 0x69, 0x62,\n\t0x69, 0x6c, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x44,\n\t0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x40, 0x0a, 0x2a, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49,\n\t0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x44, 0x44, 0x45, 0x4e,\n\t0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,\n\t0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x10, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08,\n\t0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x12, 0x2a, 0x0a, 0x26, 0x56, 0x49, 0x53, 0x49,\n\t0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x44, 0x44,\n\t0x45, 0x4e, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42,\n\t0x4c, 0x45, 0x10, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03,\n\t0x65, 0x78, 0x74, 0x22, 0x97, 0x02, 0x0a, 0x24, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69,\n\t0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x50,\n\t0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x0e, 0x0a, 0x02,\n\t0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x78, 0x0a, 0x0b,\n\t0x73, 0x75, 0x62, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c,\n\t0x65, 0x53, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x50, 0x72, 0x65,\n\t0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x65, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x03,\n\t0x20, 0x01, 0x28, 0x0e, 0x32, 0x51, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,\n\t0x52, 0x75, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x49, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65,\n\t0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x39, 0x0a,\n\t0x27, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53,\n\t0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69,\n\t0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x2a, 0x5b, 0x0a, 0x21, 0x56, 0x69, 0x73, 0x69,\n\t0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x49, 0x6e,\n\t0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x36, 0x0a,\n\t0x32, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x55, 0x4c, 0x45,\n\t0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57,\n\t0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,\n\t0x49, 0x45, 0x44, 0x10, 0x00, 0x32, 0x9b, 0x07, 0x0a, 0x19, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69,\n\t0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76,\n\t0x69, 0x63, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x4b, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69,\n\t0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70,\n\t0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62,\n\t0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15,\n\t0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f,\n\t0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xdb, 0x01, 0x0a, 0x0c, 0x45, 0x63, 0x68, 0x6f, 0x49, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69,\n\t0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52,\n\t0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x22, 0x31, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e,\n\t0x41, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x12, 0xe1, 0x01, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, 0x65, 0x76,\n\t0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52,\n\t0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x1a, 0x54, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77,\n\t0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x2f, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07,\n\t0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f,\n\t0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f,\n\t0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0xf9, 0x01, 0x0a, 0x16, 0x45, 0x63, 0x68, 0x6f,\n\t0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x65, 0x76, 0x69,\n\t0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75,\n\t0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a,\n\t0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53,\n\t0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0xfa, 0xd2,\n\t0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50,\n\t0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76,\n\t0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x76,\n\t0x69, 0x65, 0x77, 0x32, 0x80, 0x02, 0x0a, 0x21, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69,\n\t0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x63,\n\t0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc8, 0x01, 0x0a, 0x04, 0x45, 0x63,\n\t0x68, 0x6f, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75,\n\t0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a,\n\t0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53,\n\t0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x26, 0x82, 0xd3,\n\t0xe4, 0x93, 0x02, 0x20, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f,\n\t0x7b, 0x69, 0x64, 0x7d, 0x1a, 0x10, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e,\n\t0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73,\n\t0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62,\n\t0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData = file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 3)\nvar file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4)\nvar file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_goTypes = []any{\n\t(VisibilityRuleEnumInPreviewMethod)(0),                       // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEnumInPreviewMethod\n\t(VisibilityRuleSimpleMessage_VisibilityEnum)(0),              // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum\n\t(VisibilityRuleSimpleMessage_VisibilityEnumHiddenDefault)(0), // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnumHiddenDefault\n\t(*VisibilityRuleEmbedded)(nil),                               // 3: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded\n\t(*VisibilityRuleSimpleMessage)(nil),                          // 4: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t(*VisibilityRuleMessageInPreviewMethod)(nil),                 // 5: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod\n\t(*VisibilityRuleSubMessageInPreviewMethod)(nil),              // 6: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSubMessageInPreviewMethod\n}\nvar file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_depIdxs = []int32{\n\t3,  // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded\n\t3,  // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded\n\t1,  // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.an_enum:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum\n\t2,  // 3: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.ahidden_default_enum:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnumHiddenDefault\n\t6,  // 4: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod.sub_message:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSubMessageInPreviewMethod\n\t0,  // 5: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod.enum:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEnumInPreviewMethod\n\t4,  // 6: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t4,  // 7: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t4,  // 8: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t4,  // 9: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t4,  // 10: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t4,  // 11: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t4,  // 12: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t5,  // 13: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod\n\t4,  // 14: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t4,  // 15: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage\n\t11, // [11:16] is the sub-list for method output_type\n\t6,  // [6:11] is the sub-list for method input_type\n\t6,  // [6:6] is the sub-list for extension type_name\n\t6,  // [6:6] is the sub-list for extension extendee\n\t0,  // [0:6] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_init() }\nfunc file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_init() {\n\tif File_examples_internal_proto_examplepb_visibility_rule_echo_service_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0].OneofWrappers = []any{\n\t\t(*VisibilityRuleEmbedded_Progress)(nil),\n\t\t(*VisibilityRuleEmbedded_Note)(nil),\n\t\t(*VisibilityRuleEmbedded_InternalField)(nil),\n\t\t(*VisibilityRuleEmbedded_PreviewField)(nil),\n\t}\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[1].OneofWrappers = []any{\n\t\t(*VisibilityRuleSimpleMessage_LineNum)(nil),\n\t\t(*VisibilityRuleSimpleMessage_Lang)(nil),\n\t\t(*VisibilityRuleSimpleMessage_En)(nil),\n\t\t(*VisibilityRuleSimpleMessage_No)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc,\n\t\t\tNumEnums:      3,\n\t\t\tNumMessages:   4,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   2,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto = out.File\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_VisibilityRuleEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_VisibilityRuleEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_VisibilityRuleEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_VisibilityRuleEchoService_EchoInternal_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_VisibilityRuleEchoService_EchoInternal_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternal_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoInternal(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_VisibilityRuleEchoService_EchoInternal_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternal_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoInternal(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_VisibilityRuleEchoService_EchoPreview_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_VisibilityRuleEchoService_EchoPreview_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoPreview_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoPreview(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_VisibilityRuleEchoService_EchoPreview_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoPreview_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoPreview(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_VisibilityRuleEchoService_EchoInternalAndPreview_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternalAndPreview_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoInternalAndPreview(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternalAndPreview_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoInternalAndPreview(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_VisibilityRuleInternalEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_VisibilityRuleInternalEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleInternalEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleInternalEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_VisibilityRuleInternalEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleInternalEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq VisibilityRuleSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleInternalEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterVisibilityRuleEchoServiceHandlerServer registers the http handlers for service VisibilityRuleEchoService to \"mux\".\n// UnaryRPC     :call VisibilityRuleEchoServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterVisibilityRuleEchoServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterVisibilityRuleEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VisibilityRuleEchoServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_VisibilityRuleEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_VisibilityRuleEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_VisibilityRuleEchoService_EchoInternal_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal\", runtime.WithHTTPPathPattern(\"/v1/example/echo_internal\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_VisibilityRuleEchoService_EchoPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview\", runtime.WithHTTPPathPattern(\"/v1/example/echo_preview\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_VisibilityRuleEchoService_EchoInternalAndPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview\", runtime.WithHTTPPathPattern(\"/v1/example/echo_internal_and_preview\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterVisibilityRuleInternalEchoServiceHandlerServer registers the http handlers for service VisibilityRuleInternalEchoService to \"mux\".\n// UnaryRPC     :call VisibilityRuleInternalEchoServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterVisibilityRuleInternalEchoServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterVisibilityRuleInternalEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VisibilityRuleInternalEchoServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_VisibilityRuleInternalEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/internal/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterVisibilityRuleEchoServiceHandlerFromEndpoint is same as RegisterVisibilityRuleEchoServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterVisibilityRuleEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterVisibilityRuleEchoServiceHandler(ctx, mux, conn)\n}\n\n// RegisterVisibilityRuleEchoServiceHandler registers the http handlers for service VisibilityRuleEchoService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterVisibilityRuleEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterVisibilityRuleEchoServiceHandlerClient(ctx, mux, NewVisibilityRuleEchoServiceClient(conn))\n}\n\n// RegisterVisibilityRuleEchoServiceHandlerClient registers the http handlers for service VisibilityRuleEchoService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"VisibilityRuleEchoServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"VisibilityRuleEchoServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"VisibilityRuleEchoServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterVisibilityRuleEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VisibilityRuleEchoServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_VisibilityRuleEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_VisibilityRuleEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_VisibilityRuleEchoService_EchoInternal_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal\", runtime.WithHTTPPathPattern(\"/v1/example/echo_internal\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_VisibilityRuleEchoService_EchoPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview\", runtime.WithHTTPPathPattern(\"/v1/example/echo_preview\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_VisibilityRuleEchoService_EchoInternalAndPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview\", runtime.WithHTTPPathPattern(\"/v1/example/echo_internal_and_preview\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_VisibilityRuleEchoService_Echo_0                   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v1\", \"example\", \"echo\", \"id\"}, \"\"))\n\tpattern_VisibilityRuleEchoService_EchoInternal_0           = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_internal\"}, \"\"))\n\tpattern_VisibilityRuleEchoService_EchoPreview_0            = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_preview\"}, \"\"))\n\tpattern_VisibilityRuleEchoService_EchoInternalAndPreview_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_internal_and_preview\"}, \"\"))\n)\n\nvar (\n\tforward_VisibilityRuleEchoService_Echo_0                   = runtime.ForwardResponseMessage\n\tforward_VisibilityRuleEchoService_EchoInternal_0           = runtime.ForwardResponseMessage\n\tforward_VisibilityRuleEchoService_EchoPreview_0            = runtime.ForwardResponseMessage\n\tforward_VisibilityRuleEchoService_EchoInternalAndPreview_0 = runtime.ForwardResponseMessage\n)\n\n// RegisterVisibilityRuleInternalEchoServiceHandlerFromEndpoint is same as RegisterVisibilityRuleInternalEchoServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterVisibilityRuleInternalEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterVisibilityRuleInternalEchoServiceHandler(ctx, mux, conn)\n}\n\n// RegisterVisibilityRuleInternalEchoServiceHandler registers the http handlers for service VisibilityRuleInternalEchoService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterVisibilityRuleInternalEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterVisibilityRuleInternalEchoServiceHandlerClient(ctx, mux, NewVisibilityRuleInternalEchoServiceClient(conn))\n}\n\n// RegisterVisibilityRuleInternalEchoServiceHandlerClient registers the http handlers for service VisibilityRuleInternalEchoService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"VisibilityRuleInternalEchoServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"VisibilityRuleInternalEchoServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"VisibilityRuleInternalEchoServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterVisibilityRuleInternalEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VisibilityRuleInternalEchoServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_VisibilityRuleInternalEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v1/example/internal/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_VisibilityRuleInternalEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"v1\", \"example\", \"internal\", \"echo\", \"id\"}, \"\"))\n)\n\nvar (\n\tforward_VisibilityRuleInternalEchoService_Echo_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_echo_service.proto",
    "content": "syntax = \"proto3\";\n\n// Visibility Rule Echo Service\n// Similar to echo_service.proto but with annotations to change visibility\n// of services, methods, fields and enum values.\n//\n// `google.api.VisibilityRule` annotations are added to customize where they are generated.\n// Combined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\n// Elements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n//\n// These restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\n// In this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\nimport \"google/api/visibility.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb\";\n\n// Embedded represents a message embedded in SimpleMessage.\nmessage VisibilityRuleEmbedded {\n  oneof mark {\n    int64 progress = 1;\n    string note = 2;\n    string internal_field = 3 [(google.api.field_visibility).restriction = \"INTERNAL\"];\n    string preview_field = 4 [(google.api.field_visibility).restriction = \"INTERNAL,PREVIEW\"];\n  }\n}\n\n// SimpleMessage represents a simple message sent to the Echo service.\nmessage VisibilityRuleSimpleMessage {\n  enum VisibilityEnum {\n    VISIBILITY_ENUM_UNSPECIFIED = 0;\n    VISIBILITY_ENUM_VISIBLE = 1;\n    VISIBILITY_ENUM_INTERNAL = 2 [(google.api.value_visibility).restriction = \"INTERNAL\"];\n    VISIBILITY_ENUM_PREVIEW = 3 [(google.api.value_visibility).restriction = \"INTERNAL,PREVIEW\"];\n  }\n\n  enum VisibilityEnumHiddenDefault {\n    VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED = 0 [(google.api.value_visibility).restriction = \"INTERNAL\"];\n    VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE = 1;\n  }\n\n  // Id represents the message identifier.\n  string id = 1;\n  int64 num = 2;\n  oneof code {\n    int64 line_num = 3;\n    string lang = 4;\n  }\n  VisibilityRuleEmbedded status = 5;\n  oneof ext {\n    int64 en = 6;\n    VisibilityRuleEmbedded no = 7;\n  }\n  string internal_field = 8 [(google.api.field_visibility).restriction = \"INTERNAL\"];\n  string preview_field = 9 [(google.api.field_visibility).restriction = \"INTERNAL,PREVIEW\"];\n  VisibilityEnum an_enum = 10;\n  VisibilityEnumHiddenDefault ahidden_default_enum = 11;\n}\n\n// MessageInPreviewMethod doesn't define its own visibility restrictions,\n// but is only included in a method marked as \"PREVIEW\", so it will only\n// appear if `visibility_restriction_selectors` include \"PREVIEW\".\nmessage VisibilityRuleMessageInPreviewMethod {\n  string id = 1;\n  VisibilityRuleSubMessageInPreviewMethod sub_message = 2;\n  VisibilityRuleEnumInPreviewMethod enum = 3;\n}\n\n// SubMessageInPreviewMethod doesn't define its own visibility restrictions,\n// but is only included in a method marked as \"PREVIEW\", so it will only\n// appear if `visibility_restriction_selectors` include \"PREVIEW\".\nmessage VisibilityRuleSubMessageInPreviewMethod {\n  string id = 1;\n}\n\n// EnumInPreviewMethod doesn't define its own visibility restrictions,\n// but is only included in a method marked as \"PREVIEW\", so it will only\n// appear if `visibility_restriction_selectors` include \"PREVIEW\".\nenum VisibilityRuleEnumInPreviewMethod {\n  VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED = 0;\n}\n\n// VisibilityRuleEchoService service responds to incoming echo requests.\n// Different services will be available in the swagger documentation depending\n// based on `google.api.VisibilityRule`s and the set `visibility_restriction_selectors`\n// flag when calling protoc-gen-openapiv2.\nservice VisibilityRuleEchoService {\n  // Echo method receives a simple message and returns it.\n  // It should always be visible in the open API output.\n  rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {\n    option (google.api.http) = {post: \"/v1/example/echo/{id}\"};\n  }\n  // EchoInternal is an internal API that should only be visible in the OpenAPI spec\n  // if `visibility_restriction_selectors` includes \"INTERNAL\".\n  rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {\n    option (google.api.method_visibility).restriction = \"INTERNAL\";\n    option (google.api.http) = {get: \"/v1/example/echo_internal\"};\n  }\n  // EchoPreview is a preview API that should only be visible in the OpenAPI spec\n  // if `visibility_restriction_selectors` includes \"PREVIEW\".\n  rpc EchoPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleMessageInPreviewMethod) {\n    option (google.api.method_visibility).restriction = \"PREVIEW\";\n    option (google.api.http) = {get: \"/v1/example/echo_preview\"};\n  }\n  // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\n  // if `visibility_restriction_selectors` includes \"PREVIEW\" or \"INTERNAL\".\n  rpc EchoInternalAndPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {\n    option (google.api.method_visibility).restriction = \"INTERNAL,PREVIEW\";\n    option (google.api.http) = {get: \"/v1/example/echo_internal_and_preview\"};\n  }\n}\n\n// VisibilityRuleInternalEchoService service responds to incoming echo requests.\n// It should only be visible in the OpenAPI spec if `visibility_restriction_selectors` includes \"INTERNAL\".\nservice VisibilityRuleInternalEchoService {\n  option (google.api.api_visibility).restriction = \"INTERNAL\";\n\n  // Echo method receives a simple message and returns it.\n  // It should not be visible in the open API output.\n  rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {\n    option (google.api.http) = {post: \"/v1/example/internal/echo/{id}\"};\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/visibility_rule_echo_service.proto\n\n// Visibility Rule Echo Service\n// Similar to echo_service.proto but with annotations to change visibility\n// of services, methods, fields and enum values.\n//\n// `google.api.VisibilityRule` annotations are added to customize where they are generated.\n// Combined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\n// Elements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n//\n// These restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\n// In this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tVisibilityRuleEchoService_Echo_FullMethodName                   = \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo\"\n\tVisibilityRuleEchoService_EchoInternal_FullMethodName           = \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal\"\n\tVisibilityRuleEchoService_EchoPreview_FullMethodName            = \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview\"\n\tVisibilityRuleEchoService_EchoInternalAndPreview_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview\"\n)\n\n// VisibilityRuleEchoServiceClient is the client API for VisibilityRuleEchoService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// VisibilityRuleEchoService service responds to incoming echo requests.\n// Different services will be available in the swagger documentation depending\n// based on `google.api.VisibilityRule`s and the set `visibility_restriction_selectors`\n// flag when calling protoc-gen-openapiv2.\ntype VisibilityRuleEchoServiceClient interface {\n\t// Echo method receives a simple message and returns it.\n\t// It should always be visible in the open API output.\n\tEcho(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error)\n\t// EchoInternal is an internal API that should only be visible in the OpenAPI spec\n\t// if `visibility_restriction_selectors` includes \"INTERNAL\".\n\tEchoInternal(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error)\n\t// EchoPreview is a preview API that should only be visible in the OpenAPI spec\n\t// if `visibility_restriction_selectors` includes \"PREVIEW\".\n\tEchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleMessageInPreviewMethod, error)\n\t// EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\n\t// if `visibility_restriction_selectors` includes \"PREVIEW\" or \"INTERNAL\".\n\tEchoInternalAndPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error)\n}\n\ntype visibilityRuleEchoServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewVisibilityRuleEchoServiceClient(cc grpc.ClientConnInterface) VisibilityRuleEchoServiceClient {\n\treturn &visibilityRuleEchoServiceClient{cc}\n}\n\nfunc (c *visibilityRuleEchoServiceClient) Echo(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(VisibilityRuleSimpleMessage)\n\terr := c.cc.Invoke(ctx, VisibilityRuleEchoService_Echo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *visibilityRuleEchoServiceClient) EchoInternal(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(VisibilityRuleSimpleMessage)\n\terr := c.cc.Invoke(ctx, VisibilityRuleEchoService_EchoInternal_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *visibilityRuleEchoServiceClient) EchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleMessageInPreviewMethod, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(VisibilityRuleMessageInPreviewMethod)\n\terr := c.cc.Invoke(ctx, VisibilityRuleEchoService_EchoPreview_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *visibilityRuleEchoServiceClient) EchoInternalAndPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(VisibilityRuleSimpleMessage)\n\terr := c.cc.Invoke(ctx, VisibilityRuleEchoService_EchoInternalAndPreview_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// VisibilityRuleEchoServiceServer is the server API for VisibilityRuleEchoService service.\n// All implementations should embed UnimplementedVisibilityRuleEchoServiceServer\n// for forward compatibility.\n//\n// VisibilityRuleEchoService service responds to incoming echo requests.\n// Different services will be available in the swagger documentation depending\n// based on `google.api.VisibilityRule`s and the set `visibility_restriction_selectors`\n// flag when calling protoc-gen-openapiv2.\ntype VisibilityRuleEchoServiceServer interface {\n\t// Echo method receives a simple message and returns it.\n\t// It should always be visible in the open API output.\n\tEcho(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error)\n\t// EchoInternal is an internal API that should only be visible in the OpenAPI spec\n\t// if `visibility_restriction_selectors` includes \"INTERNAL\".\n\tEchoInternal(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error)\n\t// EchoPreview is a preview API that should only be visible in the OpenAPI spec\n\t// if `visibility_restriction_selectors` includes \"PREVIEW\".\n\tEchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleMessageInPreviewMethod, error)\n\t// EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\n\t// if `visibility_restriction_selectors` includes \"PREVIEW\" or \"INTERNAL\".\n\tEchoInternalAndPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error)\n}\n\n// UnimplementedVisibilityRuleEchoServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedVisibilityRuleEchoServiceServer struct{}\n\nfunc (UnimplementedVisibilityRuleEchoServiceServer) Echo(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Echo not implemented\")\n}\nfunc (UnimplementedVisibilityRuleEchoServiceServer) EchoInternal(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoInternal not implemented\")\n}\nfunc (UnimplementedVisibilityRuleEchoServiceServer) EchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleMessageInPreviewMethod, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoPreview not implemented\")\n}\nfunc (UnimplementedVisibilityRuleEchoServiceServer) EchoInternalAndPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EchoInternalAndPreview not implemented\")\n}\nfunc (UnimplementedVisibilityRuleEchoServiceServer) testEmbeddedByValue() {}\n\n// UnsafeVisibilityRuleEchoServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to VisibilityRuleEchoServiceServer will\n// result in compilation errors.\ntype UnsafeVisibilityRuleEchoServiceServer interface {\n\tmustEmbedUnimplementedVisibilityRuleEchoServiceServer()\n}\n\nfunc RegisterVisibilityRuleEchoServiceServer(s grpc.ServiceRegistrar, srv VisibilityRuleEchoServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedVisibilityRuleEchoServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&VisibilityRuleEchoService_ServiceDesc, srv)\n}\n\nfunc _VisibilityRuleEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(VisibilityRuleSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).Echo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: VisibilityRuleEchoService_Echo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).Echo(ctx, req.(*VisibilityRuleSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _VisibilityRuleEchoService_EchoInternal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(VisibilityRuleSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).EchoInternal(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: VisibilityRuleEchoService_EchoInternal_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).EchoInternal(ctx, req.(*VisibilityRuleSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _VisibilityRuleEchoService_EchoPreview_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(VisibilityRuleSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).EchoPreview(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: VisibilityRuleEchoService_EchoPreview_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).EchoPreview(ctx, req.(*VisibilityRuleSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _VisibilityRuleEchoService_EchoInternalAndPreview_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(VisibilityRuleSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).EchoInternalAndPreview(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: VisibilityRuleEchoService_EchoInternalAndPreview_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(VisibilityRuleEchoServiceServer).EchoInternalAndPreview(ctx, req.(*VisibilityRuleSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// VisibilityRuleEchoService_ServiceDesc is the grpc.ServiceDesc for VisibilityRuleEchoService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar VisibilityRuleEchoService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService\",\n\tHandlerType: (*VisibilityRuleEchoServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Echo\",\n\t\t\tHandler:    _VisibilityRuleEchoService_Echo_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoInternal\",\n\t\t\tHandler:    _VisibilityRuleEchoService_EchoInternal_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoPreview\",\n\t\t\tHandler:    _VisibilityRuleEchoService_EchoPreview_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EchoInternalAndPreview\",\n\t\t\tHandler:    _VisibilityRuleEchoService_EchoInternalAndPreview_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/visibility_rule_echo_service.proto\",\n}\n\nconst (\n\tVisibilityRuleInternalEchoService_Echo_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo\"\n)\n\n// VisibilityRuleInternalEchoServiceClient is the client API for VisibilityRuleInternalEchoService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// VisibilityRuleInternalEchoService service responds to incoming echo requests.\n// It should only be visible in the OpenAPI spec if `visibility_restriction_selectors` includes \"INTERNAL\".\ntype VisibilityRuleInternalEchoServiceClient interface {\n\t// Echo method receives a simple message and returns it.\n\t// It should not be visible in the open API output.\n\tEcho(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error)\n}\n\ntype visibilityRuleInternalEchoServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewVisibilityRuleInternalEchoServiceClient(cc grpc.ClientConnInterface) VisibilityRuleInternalEchoServiceClient {\n\treturn &visibilityRuleInternalEchoServiceClient{cc}\n}\n\nfunc (c *visibilityRuleInternalEchoServiceClient) Echo(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(VisibilityRuleSimpleMessage)\n\terr := c.cc.Invoke(ctx, VisibilityRuleInternalEchoService_Echo_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// VisibilityRuleInternalEchoServiceServer is the server API for VisibilityRuleInternalEchoService service.\n// All implementations should embed UnimplementedVisibilityRuleInternalEchoServiceServer\n// for forward compatibility.\n//\n// VisibilityRuleInternalEchoService service responds to incoming echo requests.\n// It should only be visible in the OpenAPI spec if `visibility_restriction_selectors` includes \"INTERNAL\".\ntype VisibilityRuleInternalEchoServiceServer interface {\n\t// Echo method receives a simple message and returns it.\n\t// It should not be visible in the open API output.\n\tEcho(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error)\n}\n\n// UnimplementedVisibilityRuleInternalEchoServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedVisibilityRuleInternalEchoServiceServer struct{}\n\nfunc (UnimplementedVisibilityRuleInternalEchoServiceServer) Echo(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Echo not implemented\")\n}\nfunc (UnimplementedVisibilityRuleInternalEchoServiceServer) testEmbeddedByValue() {}\n\n// UnsafeVisibilityRuleInternalEchoServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to VisibilityRuleInternalEchoServiceServer will\n// result in compilation errors.\ntype UnsafeVisibilityRuleInternalEchoServiceServer interface {\n\tmustEmbedUnimplementedVisibilityRuleInternalEchoServiceServer()\n}\n\nfunc RegisterVisibilityRuleInternalEchoServiceServer(s grpc.ServiceRegistrar, srv VisibilityRuleInternalEchoServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedVisibilityRuleInternalEchoServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&VisibilityRuleInternalEchoService_ServiceDesc, srv)\n}\n\nfunc _VisibilityRuleInternalEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(VisibilityRuleSimpleMessage)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(VisibilityRuleInternalEchoServiceServer).Echo(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: VisibilityRuleInternalEchoService_Echo_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(VisibilityRuleInternalEchoServiceServer).Echo(ctx, req.(*VisibilityRuleSimpleMessage))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// VisibilityRuleInternalEchoService_ServiceDesc is the grpc.ServiceDesc for VisibilityRuleInternalEchoService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar VisibilityRuleInternalEchoService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService\",\n\tHandlerType: (*VisibilityRuleInternalEchoServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Echo\",\n\t\t\tHandler:    _VisibilityRuleInternalEchoService_Echo_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/visibility_rule_echo_service.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_enums_as_ints_echo_service.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - enums_as_ints=true\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_enums_as_ints_echo_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/visibility_rule_echo_service.proto\",\n    \"description\": \"Visibility Rule Echo Service\\nSimilar to echo_service.proto but with annotations to change visibility\\nof services, methods, fields and enum values.\\n\\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\\n\\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"VisibilityRuleEchoService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\\nIt should always be visible in the open API output.\",\n        \"operationId\": \"VisibilityRuleEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"enum\": [\n              0,\n              1\n            ],\n            \"default\": 0\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"enum\": [\n              1\n            ],\n            \"default\": 0\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"VisibilityRuleSimpleMessageVisibilityEnum\": {\n      \"type\": \"integer\",\n      \"format\": \"int32\",\n      \"enum\": [\n        0,\n        1\n      ],\n      \"default\": 0\n    },\n    \"VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\": {\n      \"type\": \"integer\",\n      \"format\": \"int32\",\n      \"enum\": [\n        1\n      ],\n      \"default\": 0\n    },\n    \"examplepbVisibilityRuleEmbedded\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"progress\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"note\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Embedded represents a message embedded in SimpleMessage.\"\n    },\n    \"examplepbVisibilityRuleSimpleMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lang\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"en\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"anEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnum\"\n        },\n        \"ahiddenDefaultEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\"\n        }\n      },\n      \"description\": \"SimpleMessage represents a simple message sent to the Echo service.\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n     - visibility_restriction_selectors=INTERNAL\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/visibility_rule_echo_service.proto\",\n    \"description\": \"Visibility Rule Echo Service\\nSimilar to echo_service.proto but with annotations to change visibility\\nof services, methods, fields and enum values.\\n\\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\\n\\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"VisibilityRuleEchoService\"\n    },\n    {\n      \"name\": \"VisibilityRuleInternalEchoService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\\nIt should always be visible in the open API output.\",\n        \"operationId\": \"VisibilityRuleEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_internal\": {\n      \"get\": {\n        \"summary\": \"EchoInternal is an internal API that should only be visible in the OpenAPI spec\\nif `visibility_restriction_selectors` includes \\\"INTERNAL\\\".\",\n        \"operationId\": \"VisibilityRuleEchoService_EchoInternal\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_internal_and_preview\": {\n      \"get\": {\n        \"summary\": \"EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\\nif `visibility_restriction_selectors` includes \\\"PREVIEW\\\" or \\\"INTERNAL\\\".\",\n        \"operationId\": \"VisibilityRuleEchoService_EchoInternalAndPreview\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/internal/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\\nIt should not be visible in the open API output.\",\n        \"operationId\": \"VisibilityRuleInternalEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleInternalEchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"VisibilityRuleSimpleMessageVisibilityEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_UNSPECIFIED\",\n        \"VISIBILITY_ENUM_VISIBLE\",\n        \"VISIBILITY_ENUM_INTERNAL\",\n        \"VISIBILITY_ENUM_PREVIEW\"\n      ],\n      \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n    },\n    \"VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n        \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n      ],\n      \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n    },\n    \"examplepbVisibilityRuleEmbedded\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"progress\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"note\": {\n          \"type\": \"string\"\n        },\n        \"internalField\": {\n          \"type\": \"string\"\n        },\n        \"previewField\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Embedded represents a message embedded in SimpleMessage.\"\n    },\n    \"examplepbVisibilityRuleSimpleMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lang\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"en\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"internalField\": {\n          \"type\": \"string\"\n        },\n        \"previewField\": {\n          \"type\": \"string\"\n        },\n        \"anEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnum\"\n        },\n        \"ahiddenDefaultEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\"\n        }\n      },\n      \"description\": \"SimpleMessage represents a simple message sent to the Echo service.\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/visibility_rule_echo_service.proto\",\n    \"description\": \"Visibility Rule Echo Service\\nSimilar to echo_service.proto but with annotations to change visibility\\nof services, methods, fields and enum values.\\n\\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\\n\\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"VisibilityRuleEchoService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\\nIt should always be visible in the open API output.\",\n        \"operationId\": \"VisibilityRuleEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"VisibilityRuleSimpleMessageVisibilityEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_UNSPECIFIED\",\n        \"VISIBILITY_ENUM_VISIBLE\"\n      ],\n      \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n    },\n    \"VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n      ]\n    },\n    \"examplepbVisibilityRuleEmbedded\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"progress\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"note\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Embedded represents a message embedded in SimpleMessage.\"\n    },\n    \"examplepbVisibilityRuleSimpleMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lang\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"en\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"anEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnum\"\n        },\n        \"ahiddenDefaultEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\"\n        }\n      },\n      \"description\": \"SimpleMessage represents a simple message sent to the Echo service.\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - visibility_restriction_selectors=PREVIEW\n      - visibility_restriction_selectors=INTERNAL\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/visibility_rule_echo_service.proto\",\n    \"description\": \"Visibility Rule Echo Service\\nSimilar to echo_service.proto but with annotations to change visibility\\nof services, methods, fields and enum values.\\n\\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\\n\\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"VisibilityRuleEchoService\"\n    },\n    {\n      \"name\": \"VisibilityRuleInternalEchoService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\\nIt should always be visible in the open API output.\",\n        \"operationId\": \"VisibilityRuleEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_internal\": {\n      \"get\": {\n        \"summary\": \"EchoInternal is an internal API that should only be visible in the OpenAPI spec\\nif `visibility_restriction_selectors` includes \\\"INTERNAL\\\".\",\n        \"operationId\": \"VisibilityRuleEchoService_EchoInternal\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_internal_and_preview\": {\n      \"get\": {\n        \"summary\": \"EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\\nif `visibility_restriction_selectors` includes \\\"PREVIEW\\\" or \\\"INTERNAL\\\".\",\n        \"operationId\": \"VisibilityRuleEchoService_EchoInternalAndPreview\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_preview\": {\n      \"get\": {\n        \"summary\": \"EchoPreview is a preview API that should only be visible in the OpenAPI spec\\nif `visibility_restriction_selectors` includes \\\"PREVIEW\\\".\",\n        \"operationId\": \"VisibilityRuleEchoService_EchoPreview\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleMessageInPreviewMethod\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/internal/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\\nIt should not be visible in the open API output.\",\n        \"operationId\": \"VisibilityRuleInternalEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"internalField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_INTERNAL\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleInternalEchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"VisibilityRuleSimpleMessageVisibilityEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_UNSPECIFIED\",\n        \"VISIBILITY_ENUM_VISIBLE\",\n        \"VISIBILITY_ENUM_INTERNAL\",\n        \"VISIBILITY_ENUM_PREVIEW\"\n      ],\n      \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n    },\n    \"VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\",\n        \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n      ],\n      \"default\": \"VISIBILITY_ENUM_HIDDEN_DEFAULT_UNSPECIFIED\"\n    },\n    \"examplepbVisibilityRuleEmbedded\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"progress\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"note\": {\n          \"type\": \"string\"\n        },\n        \"internalField\": {\n          \"type\": \"string\"\n        },\n        \"previewField\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Embedded represents a message embedded in SimpleMessage.\"\n    },\n    \"examplepbVisibilityRuleEnumInPreviewMethod\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED\"\n      ],\n      \"default\": \"VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED\",\n      \"description\": \"EnumInPreviewMethod doesn't define its own visibility restrictions,\\nbut is only included in a method marked as \\\"PREVIEW\\\", so it will only\\nappear if `visibility_restriction_selectors` include \\\"PREVIEW\\\".\"\n    },\n    \"examplepbVisibilityRuleMessageInPreviewMethod\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        },\n        \"subMessage\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleSubMessageInPreviewMethod\"\n        },\n        \"enum\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEnumInPreviewMethod\"\n        }\n      },\n      \"description\": \"MessageInPreviewMethod doesn't define its own visibility restrictions,\\nbut is only included in a method marked as \\\"PREVIEW\\\", so it will only\\nappear if `visibility_restriction_selectors` include \\\"PREVIEW\\\".\"\n    },\n    \"examplepbVisibilityRuleSimpleMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lang\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"en\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"internalField\": {\n          \"type\": \"string\"\n        },\n        \"previewField\": {\n          \"type\": \"string\"\n        },\n        \"anEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnum\"\n        },\n        \"ahiddenDefaultEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\"\n        }\n      },\n      \"description\": \"SimpleMessage represents a simple message sent to the Echo service.\"\n    },\n    \"examplepbVisibilityRuleSubMessageInPreviewMethod\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"SubMessageInPreviewMethod doesn't define its own visibility restrictions,\\nbut is only included in a method marked as \\\"PREVIEW\\\", so it will only\\nappear if `visibility_restriction_selectors` include \\\"PREVIEW\\\".\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - local: protoc-gen-openapiv2\n    out: .\n    opt:\n      - visibility_restriction_selectors=PREVIEW\n"
  },
  {
    "path": "examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/visibility_rule_echo_service.proto\",\n    \"description\": \"Visibility Rule Echo Service\\nSimilar to echo_service.proto but with annotations to change visibility\\nof services, methods, fields and enum values.\\n\\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\\n\\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"VisibilityRuleEchoService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/echo/{id}\": {\n      \"post\": {\n        \"summary\": \"Echo method receives a simple message and returns it.\\nIt should always be visible in the open API output.\",\n        \"operationId\": \"VisibilityRuleEchoService_Echo\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_internal_and_preview\": {\n      \"get\": {\n        \"summary\": \"EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\\nif `visibility_restriction_selectors` includes \\\"PREVIEW\\\" or \\\"INTERNAL\\\".\",\n        \"operationId\": \"VisibilityRuleEchoService_EchoInternalAndPreview\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleSimpleMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    },\n    \"/v1/example/echo_preview\": {\n      \"get\": {\n        \"summary\": \"EchoPreview is a preview API that should only be visible in the OpenAPI spec\\nif `visibility_restriction_selectors` includes \\\"PREVIEW\\\".\",\n        \"operationId\": \"VisibilityRuleEchoService_EchoPreview\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbVisibilityRuleMessageInPreviewMethod\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"Id represents the message identifier.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"num\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lineNum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"lang\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"status.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"status.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"en\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.progress\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"format\": \"int64\"\n          },\n          {\n            \"name\": \"no.note\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"no.previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"previewField\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"anEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_UNSPECIFIED\",\n              \"VISIBILITY_ENUM_VISIBLE\",\n              \"VISIBILITY_ENUM_PREVIEW\"\n            ],\n            \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n          },\n          {\n            \"name\": \"ahiddenDefaultEnum\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [\n              \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n            ]\n          }\n        ],\n        \"tags\": [\n          \"VisibilityRuleEchoService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"VisibilityRuleSimpleMessageVisibilityEnum\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_UNSPECIFIED\",\n        \"VISIBILITY_ENUM_VISIBLE\",\n        \"VISIBILITY_ENUM_PREVIEW\"\n      ],\n      \"default\": \"VISIBILITY_ENUM_UNSPECIFIED\"\n    },\n    \"VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_ENUM_HIDDEN_DEFAULT_VISIBLE\"\n      ]\n    },\n    \"examplepbVisibilityRuleEmbedded\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"progress\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"note\": {\n          \"type\": \"string\"\n        },\n        \"previewField\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"Embedded represents a message embedded in SimpleMessage.\"\n    },\n    \"examplepbVisibilityRuleEnumInPreviewMethod\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED\"\n      ],\n      \"default\": \"VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED\",\n      \"description\": \"EnumInPreviewMethod doesn't define its own visibility restrictions,\\nbut is only included in a method marked as \\\"PREVIEW\\\", so it will only\\nappear if `visibility_restriction_selectors` include \\\"PREVIEW\\\".\"\n    },\n    \"examplepbVisibilityRuleMessageInPreviewMethod\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        },\n        \"subMessage\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleSubMessageInPreviewMethod\"\n        },\n        \"enum\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEnumInPreviewMethod\"\n        }\n      },\n      \"description\": \"MessageInPreviewMethod doesn't define its own visibility restrictions,\\nbut is only included in a method marked as \\\"PREVIEW\\\", so it will only\\nappear if `visibility_restriction_selectors` include \\\"PREVIEW\\\".\"\n    },\n    \"examplepbVisibilityRuleSimpleMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lang\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"en\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"$ref\": \"#/definitions/examplepbVisibilityRuleEmbedded\"\n        },\n        \"previewField\": {\n          \"type\": \"string\"\n        },\n        \"anEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnum\"\n        },\n        \"ahiddenDefaultEnum\": {\n          \"$ref\": \"#/definitions/VisibilityRuleSimpleMessageVisibilityEnumHiddenDefault\"\n        }\n      },\n      \"description\": \"SimpleMessage represents a simple message sent to the Echo service.\"\n    },\n    \"examplepbVisibilityRuleSubMessageInPreviewMethod\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        }\n      },\n      \"description\": \"SubMessageInPreviewMethod doesn't define its own visibility restrictions,\\nbut is only included in a method marked as \\\"PREVIEW\\\", so it will only\\nappear if `visibility_restriction_selectors` include \\\"PREVIEW\\\".\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/wrappers.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/examplepb/wrappers.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n\twrapperspb \"google.golang.org/protobuf/types/known/wrapperspb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype Wrappers struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tStringValue *wrapperspb.StringValue `protobuf:\"bytes,1,opt,name=string_value,json=stringValue,proto3\" json:\"string_value,omitempty\"`\n\tInt32Value  *wrapperspb.Int32Value  `protobuf:\"bytes,2,opt,name=int32_value,json=int32Value,proto3\" json:\"int32_value,omitempty\"`\n\tInt64Value  *wrapperspb.Int64Value  `protobuf:\"bytes,3,opt,name=int64_value,json=int64Value,proto3\" json:\"int64_value,omitempty\"`\n\tFloatValue  *wrapperspb.FloatValue  `protobuf:\"bytes,4,opt,name=float_value,json=floatValue,proto3\" json:\"float_value,omitempty\"`\n\tDoubleValue *wrapperspb.DoubleValue `protobuf:\"bytes,5,opt,name=double_value,json=doubleValue,proto3\" json:\"double_value,omitempty\"`\n\tBoolValue   *wrapperspb.BoolValue   `protobuf:\"bytes,6,opt,name=bool_value,json=boolValue,proto3\" json:\"bool_value,omitempty\"`\n\tUint32Value *wrapperspb.UInt32Value `protobuf:\"bytes,7,opt,name=uint32_value,json=uint32Value,proto3\" json:\"uint32_value,omitempty\"`\n\tUint64Value *wrapperspb.UInt64Value `protobuf:\"bytes,8,opt,name=uint64_value,json=uint64Value,proto3\" json:\"uint64_value,omitempty\"`\n\tBytesValue  *wrapperspb.BytesValue  `protobuf:\"bytes,9,opt,name=bytes_value,json=bytesValue,proto3\" json:\"bytes_value,omitempty\"`\n}\n\nfunc (x *Wrappers) Reset() {\n\t*x = Wrappers{}\n\tmi := &file_examples_internal_proto_examplepb_wrappers_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Wrappers) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Wrappers) ProtoMessage() {}\n\nfunc (x *Wrappers) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_examplepb_wrappers_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Wrappers.ProtoReflect.Descriptor instead.\nfunc (*Wrappers) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_examplepb_wrappers_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *Wrappers) GetStringValue() *wrapperspb.StringValue {\n\tif x != nil {\n\t\treturn x.StringValue\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetInt32Value() *wrapperspb.Int32Value {\n\tif x != nil {\n\t\treturn x.Int32Value\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetInt64Value() *wrapperspb.Int64Value {\n\tif x != nil {\n\t\treturn x.Int64Value\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetFloatValue() *wrapperspb.FloatValue {\n\tif x != nil {\n\t\treturn x.FloatValue\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetDoubleValue() *wrapperspb.DoubleValue {\n\tif x != nil {\n\t\treturn x.DoubleValue\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetBoolValue() *wrapperspb.BoolValue {\n\tif x != nil {\n\t\treturn x.BoolValue\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetUint32Value() *wrapperspb.UInt32Value {\n\tif x != nil {\n\t\treturn x.Uint32Value\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetUint64Value() *wrapperspb.UInt64Value {\n\tif x != nil {\n\t\treturn x.Uint64Value\n\t}\n\treturn nil\n}\n\nfunc (x *Wrappers) GetBytesValue() *wrapperspb.BytesValue {\n\tif x != nil {\n\t\treturn x.BytesValue\n\t}\n\treturn nil\n}\n\nvar File_examples_internal_proto_examplepb_wrappers_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_examplepb_wrappers_proto_rawDesc = []byte{\n\t0x0a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61,\n\t0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77,\n\t0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x04,\n\t0x0a, 0x08, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74,\n\t0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b,\n\t0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69,\n\t0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69,\n\t0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6e, 0x74,\n\t0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74,\n\t0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,\n\t0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f,\n\t0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c,\n\t0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f,\n\t0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36,\n\t0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x32, 0xbe, 0x09, 0x0a, 0x0f, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x53, 0x65,\n\t0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9d, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,\n\t0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x1a, 0x38, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70,\n\t0x70, 0x65, 0x72, 0x73, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22,\n\t0x14, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x72, 0x61,\n\t0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53,\n\t0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,\n\t0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,\n\t0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01,\n\t0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e,\n\t0x67, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22,\n\t0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f,\n\t0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65,\n\t0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74,\n\t0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a,\n\t0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x36,\n\t0x34, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22,\n\t0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f,\n\t0x74, 0x65, 0x73, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65,\n\t0x61, 0x74, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,\n\t0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93,\n\t0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x44,\n\t0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x62, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42,\n\t0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x76, 0x31,\n\t0x2f, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65,\n\t0x61, 0x74, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,\n\t0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93,\n\t0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55,\n\t0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55,\n\t0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,\n\t0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36,\n\t0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01,\n\t0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36,\n\t0x34, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22,\n\t0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f,\n\t0x74, 0x65, 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x0b, 0x43, 0x72, 0x65,\n\t0x61, 0x74, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,\n\t0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12,\n\t0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6d, 0x70,\n\t0x74, 0x79, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,\n\t0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f,\n\t0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_examplepb_wrappers_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_examplepb_wrappers_proto_rawDescData = file_examples_internal_proto_examplepb_wrappers_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_examplepb_wrappers_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_examplepb_wrappers_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_examplepb_wrappers_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_wrappers_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_examplepb_wrappers_proto_rawDescData\n}\n\nvar file_examples_internal_proto_examplepb_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 1)\nvar file_examples_internal_proto_examplepb_wrappers_proto_goTypes = []any{\n\t(*Wrappers)(nil),               // 0: grpc.gateway.examples.internal.proto.examplepb.Wrappers\n\t(*wrapperspb.StringValue)(nil), // 1: google.protobuf.StringValue\n\t(*wrapperspb.Int32Value)(nil),  // 2: google.protobuf.Int32Value\n\t(*wrapperspb.Int64Value)(nil),  // 3: google.protobuf.Int64Value\n\t(*wrapperspb.FloatValue)(nil),  // 4: google.protobuf.FloatValue\n\t(*wrapperspb.DoubleValue)(nil), // 5: google.protobuf.DoubleValue\n\t(*wrapperspb.BoolValue)(nil),   // 6: google.protobuf.BoolValue\n\t(*wrapperspb.UInt32Value)(nil), // 7: google.protobuf.UInt32Value\n\t(*wrapperspb.UInt64Value)(nil), // 8: google.protobuf.UInt64Value\n\t(*wrapperspb.BytesValue)(nil),  // 9: google.protobuf.BytesValue\n\t(*emptypb.Empty)(nil),          // 10: google.protobuf.Empty\n}\nvar file_examples_internal_proto_examplepb_wrappers_proto_depIdxs = []int32{\n\t1,  // 0: grpc.gateway.examples.internal.proto.examplepb.Wrappers.string_value:type_name -> google.protobuf.StringValue\n\t2,  // 1: grpc.gateway.examples.internal.proto.examplepb.Wrappers.int32_value:type_name -> google.protobuf.Int32Value\n\t3,  // 2: grpc.gateway.examples.internal.proto.examplepb.Wrappers.int64_value:type_name -> google.protobuf.Int64Value\n\t4,  // 3: grpc.gateway.examples.internal.proto.examplepb.Wrappers.float_value:type_name -> google.protobuf.FloatValue\n\t5,  // 4: grpc.gateway.examples.internal.proto.examplepb.Wrappers.double_value:type_name -> google.protobuf.DoubleValue\n\t6,  // 5: grpc.gateway.examples.internal.proto.examplepb.Wrappers.bool_value:type_name -> google.protobuf.BoolValue\n\t7,  // 6: grpc.gateway.examples.internal.proto.examplepb.Wrappers.uint32_value:type_name -> google.protobuf.UInt32Value\n\t8,  // 7: grpc.gateway.examples.internal.proto.examplepb.Wrappers.uint64_value:type_name -> google.protobuf.UInt64Value\n\t9,  // 8: grpc.gateway.examples.internal.proto.examplepb.Wrappers.bytes_value:type_name -> google.protobuf.BytesValue\n\t0,  // 9: grpc.gateway.examples.internal.proto.examplepb.WrappersService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.Wrappers\n\t1,  // 10: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateStringValue:input_type -> google.protobuf.StringValue\n\t2,  // 11: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt32Value:input_type -> google.protobuf.Int32Value\n\t3,  // 12: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt64Value:input_type -> google.protobuf.Int64Value\n\t4,  // 13: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateFloatValue:input_type -> google.protobuf.FloatValue\n\t5,  // 14: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateDoubleValue:input_type -> google.protobuf.DoubleValue\n\t6,  // 15: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBoolValue:input_type -> google.protobuf.BoolValue\n\t7,  // 16: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt32Value:input_type -> google.protobuf.UInt32Value\n\t8,  // 17: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt64Value:input_type -> google.protobuf.UInt64Value\n\t9,  // 18: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBytesValue:input_type -> google.protobuf.BytesValue\n\t10, // 19: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateEmpty:input_type -> google.protobuf.Empty\n\t0,  // 20: grpc.gateway.examples.internal.proto.examplepb.WrappersService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.Wrappers\n\t1,  // 21: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateStringValue:output_type -> google.protobuf.StringValue\n\t2,  // 22: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt32Value:output_type -> google.protobuf.Int32Value\n\t3,  // 23: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt64Value:output_type -> google.protobuf.Int64Value\n\t4,  // 24: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateFloatValue:output_type -> google.protobuf.FloatValue\n\t5,  // 25: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateDoubleValue:output_type -> google.protobuf.DoubleValue\n\t6,  // 26: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBoolValue:output_type -> google.protobuf.BoolValue\n\t7,  // 27: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt32Value:output_type -> google.protobuf.UInt32Value\n\t8,  // 28: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt64Value:output_type -> google.protobuf.UInt64Value\n\t9,  // 29: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBytesValue:output_type -> google.protobuf.BytesValue\n\t10, // 30: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateEmpty:output_type -> google.protobuf.Empty\n\t20, // [20:31] is the sub-list for method output_type\n\t9,  // [9:20] is the sub-list for method input_type\n\t9,  // [9:9] is the sub-list for extension type_name\n\t9,  // [9:9] is the sub-list for extension extendee\n\t0,  // [0:9] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_examplepb_wrappers_proto_init() }\nfunc file_examples_internal_proto_examplepb_wrappers_proto_init() {\n\tif File_examples_internal_proto_examplepb_wrappers_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_examplepb_wrappers_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   1,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_examplepb_wrappers_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_examplepb_wrappers_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_examplepb_wrappers_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_examplepb_wrappers_proto = out.File\n\tfile_examples_internal_proto_examplepb_wrappers_proto_rawDesc = nil\n\tfile_examples_internal_proto_examplepb_wrappers_proto_goTypes = nil\n\tfile_examples_internal_proto_examplepb_wrappers_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/wrappers.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/wrappers.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nfunc request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Wrappers\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq Wrappers\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Create(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.StringValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateStringValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.StringValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateStringValue(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.Int32Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateInt32Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.Int32Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateInt32Value(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.Int64Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateInt64Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.Int64Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateInt64Value(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.FloatValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateFloatValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.FloatValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateFloatValue(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.DoubleValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateDoubleValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.DoubleValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateDoubleValue(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.BoolValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateBoolValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.BoolValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateBoolValue(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.UInt32Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateUInt32Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.UInt32Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateUInt32Value(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.UInt64Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateUInt64Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.UInt64Value\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateUInt64Value(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.BytesValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateBytesValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq wrapperspb.BytesValue\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateBytesValue(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.CreateEmpty(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq emptypb.Empty\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.CreateEmpty(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterWrappersServiceHandlerServer registers the http handlers for service WrappersService to \"mux\".\n// UnaryRPC     :call WrappersServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterWrappersServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create\", runtime.WithHTTPPathPattern(\"/v1/example/wrappers\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_Create_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateStringValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue\", runtime.WithHTTPPathPattern(\"/v1/testString\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateStringValue_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateStringValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value\", runtime.WithHTTPPathPattern(\"/v1/testInt32\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateInt32Value_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value\", runtime.WithHTTPPathPattern(\"/v1/testInt64\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateInt64Value_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateFloatValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue\", runtime.WithHTTPPathPattern(\"/v1/testFloat\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateFloatValue_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateFloatValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateDoubleValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue\", runtime.WithHTTPPathPattern(\"/v1/testDouble\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateDoubleValue_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateDoubleValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateBoolValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue\", runtime.WithHTTPPathPattern(\"/v1/testBool\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateBoolValue_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateBoolValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateUInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value\", runtime.WithHTTPPathPattern(\"/v1/testUint32\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateUInt32Value_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateUInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateUInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value\", runtime.WithHTTPPathPattern(\"/v1/testUint64\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateUInt64Value_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateUInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateBytesValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue\", runtime.WithHTTPPathPattern(\"/v1/testBytes\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateBytesValue_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateBytesValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateEmpty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty\", runtime.WithHTTPPathPattern(\"/v1/testEmpty\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_WrappersService_CreateEmpty_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateEmpty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterWrappersServiceHandlerFromEndpoint is same as RegisterWrappersServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterWrappersServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterWrappersServiceHandler(ctx, mux, conn)\n}\n\n// RegisterWrappersServiceHandler registers the http handlers for service WrappersService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterWrappersServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterWrappersServiceHandlerClient(ctx, mux, NewWrappersServiceClient(conn))\n}\n\n// RegisterWrappersServiceHandlerClient registers the http handlers for service WrappersService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"WrappersServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"WrappersServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"WrappersServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WrappersServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create\", runtime.WithHTTPPathPattern(\"/v1/example/wrappers\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_Create_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateStringValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue\", runtime.WithHTTPPathPattern(\"/v1/testString\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateStringValue_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateStringValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value\", runtime.WithHTTPPathPattern(\"/v1/testInt32\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateInt32Value_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value\", runtime.WithHTTPPathPattern(\"/v1/testInt64\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateInt64Value_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateFloatValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue\", runtime.WithHTTPPathPattern(\"/v1/testFloat\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateFloatValue_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateFloatValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateDoubleValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue\", runtime.WithHTTPPathPattern(\"/v1/testDouble\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateDoubleValue_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateDoubleValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateBoolValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue\", runtime.WithHTTPPathPattern(\"/v1/testBool\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateBoolValue_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateBoolValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateUInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value\", runtime.WithHTTPPathPattern(\"/v1/testUint32\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateUInt32Value_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateUInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateUInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value\", runtime.WithHTTPPathPattern(\"/v1/testUint64\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateUInt64Value_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateUInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateBytesValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue\", runtime.WithHTTPPathPattern(\"/v1/testBytes\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateBytesValue_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateBytesValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_WrappersService_CreateEmpty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty\", runtime.WithHTTPPathPattern(\"/v1/testEmpty\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_WrappersService_CreateEmpty_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_WrappersService_CreateEmpty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\nvar (\n\tpattern_WrappersService_Create_0            = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"wrappers\"}, \"\"))\n\tpattern_WrappersService_CreateStringValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testString\"}, \"\"))\n\tpattern_WrappersService_CreateInt32Value_0  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testInt32\"}, \"\"))\n\tpattern_WrappersService_CreateInt64Value_0  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testInt64\"}, \"\"))\n\tpattern_WrappersService_CreateFloatValue_0  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testFloat\"}, \"\"))\n\tpattern_WrappersService_CreateDoubleValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testDouble\"}, \"\"))\n\tpattern_WrappersService_CreateBoolValue_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testBool\"}, \"\"))\n\tpattern_WrappersService_CreateUInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testUint32\"}, \"\"))\n\tpattern_WrappersService_CreateUInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testUint64\"}, \"\"))\n\tpattern_WrappersService_CreateBytesValue_0  = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testBytes\"}, \"\"))\n\tpattern_WrappersService_CreateEmpty_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{\"v1\", \"testEmpty\"}, \"\"))\n)\n\nvar (\n\tforward_WrappersService_Create_0            = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateStringValue_0 = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateInt32Value_0  = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateInt64Value_0  = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateFloatValue_0  = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateDoubleValue_0 = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateBoolValue_0   = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateUInt32Value_0 = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateUInt64Value_0 = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateBytesValue_0  = runtime.ForwardResponseMessage\n\tforward_WrappersService_CreateEmpty_0       = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/examplepb/wrappers.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.examplepb;\n\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/empty.proto\";\nimport \"google/protobuf/wrappers.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\nmessage Wrappers {\n  google.protobuf.StringValue string_value = 1;\n  google.protobuf.Int32Value int32_value = 2;\n  google.protobuf.Int64Value int64_value = 3;\n  google.protobuf.FloatValue float_value = 4;\n  google.protobuf.DoubleValue double_value = 5;\n  google.protobuf.BoolValue bool_value = 6;\n  google.protobuf.UInt32Value uint32_value = 7;\n  google.protobuf.UInt64Value uint64_value = 8;\n  google.protobuf.BytesValue bytes_value = 9;\n}\n\nservice WrappersService {\n  rpc Create(Wrappers) returns (Wrappers) {\n    option (google.api.http) = {\n      post: \"/v1/example/wrappers\"\n      body: \"*\"\n    };\n  }\n\n  rpc CreateStringValue(google.protobuf.StringValue) returns (google.protobuf.StringValue) {\n    option (google.api.http) = {\n      post: \"/v1/testString\"\n      body: \"*\"\n    };\n  }\n  rpc CreateInt32Value(google.protobuf.Int32Value) returns (google.protobuf.Int32Value) {\n    option (google.api.http) = {\n      post: \"/v1/testInt32\"\n      body: \"*\"\n    };\n  }\n  rpc CreateInt64Value(google.protobuf.Int64Value) returns (google.protobuf.Int64Value) {\n    option (google.api.http) = {\n      post: \"/v1/testInt64\"\n      body: \"*\"\n    };\n  }\n  rpc CreateFloatValue(google.protobuf.FloatValue) returns (google.protobuf.FloatValue) {\n    option (google.api.http) = {\n      post: \"/v1/testFloat\"\n      body: \"*\"\n    };\n  }\n  rpc CreateDoubleValue(google.protobuf.DoubleValue) returns (google.protobuf.DoubleValue) {\n    option (google.api.http) = {\n      post: \"/v1/testDouble\"\n      body: \"*\"\n    };\n  }\n  rpc CreateBoolValue(google.protobuf.BoolValue) returns (google.protobuf.BoolValue) {\n    option (google.api.http) = {\n      post: \"/v1/testBool\"\n      body: \"*\"\n    };\n  }\n  rpc CreateUInt32Value(google.protobuf.UInt32Value) returns (google.protobuf.UInt32Value) {\n    option (google.api.http) = {\n      post: \"/v1/testUint32\"\n      body: \"*\"\n    };\n  }\n  rpc CreateUInt64Value(google.protobuf.UInt64Value) returns (google.protobuf.UInt64Value) {\n    option (google.api.http) = {\n      post: \"/v1/testUint64\"\n      body: \"*\"\n    };\n  }\n  rpc CreateBytesValue(google.protobuf.BytesValue) returns (google.protobuf.BytesValue) {\n    option (google.api.http) = {\n      post: \"/v1/testBytes\"\n      body: \"*\"\n    };\n  }\n  rpc CreateEmpty(google.protobuf.Empty) returns (google.protobuf.Empty) {\n    option (google.api.http) = {\n      post: \"/v1/testEmpty\"\n      body: \"*\"\n    };\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/wrappers.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/examplepb/wrappers.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"WrappersService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/wrappers\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_Create\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbWrappers\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbWrappers\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testBool\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateBoolValue\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"boolean\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"boolean\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testBytes\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateBytesValue\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"byte\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"byte\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testDouble\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateDoubleValue\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"number\",\n              \"format\": \"double\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"number\",\n              \"format\": \"double\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testEmpty\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateEmpty\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {}\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testFloat\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateFloatValue\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"number\",\n              \"format\": \"float\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"number\",\n              \"format\": \"float\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testInt32\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateInt32Value\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testInt64\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateInt64Value\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"int64\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testString\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateStringValue\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testUint32\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateUInt32Value\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"integer\",\n              \"format\": \"int64\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    },\n    \"/v1/testUint64\": {\n      \"post\": {\n        \"operationId\": \"WrappersService_CreateUInt64Value\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"uint64\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/googleRpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"format\": \"uint64\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"WrappersService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbWrappers\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"stringValue\": {\n          \"type\": \"string\"\n        },\n        \"int32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"int64Value\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"floatValue\": {\n          \"type\": \"number\",\n          \"format\": \"float\"\n        },\n        \"doubleValue\": {\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"boolValue\": {\n          \"type\": \"boolean\"\n        },\n        \"uint32Value\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\"\n        },\n        \"uint64Value\": {\n          \"type\": \"string\",\n          \"format\": \"uint64\"\n        },\n        \"bytesValue\": {\n          \"type\": \"string\",\n          \"format\": \"byte\"\n        }\n      }\n    },\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"A developer-facing error message, which should be in English. Any\\nuser-facing error message should be localized and sent in the\\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          },\n          \"description\": \"A list of messages that carry the error details.  There is a common set of\\nmessage types for APIs to use.\"\n        }\n      },\n      \"description\": \"The `Status` type defines a logical error model that is suitable for\\ndifferent programming environments, including REST APIs and RPC APIs. It is\\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\\nthree pieces of data: error code, error message, and error details.\\n\\nYou can find out more about this error model and how to work with it in the\\n[API Design Guide](https://cloud.google.com/apis/design/errors).\"\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/examplepb/wrappers_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: examples/internal/proto/examplepb/wrappers.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n\twrapperspb \"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tWrappersService_Create_FullMethodName            = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create\"\n\tWrappersService_CreateStringValue_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue\"\n\tWrappersService_CreateInt32Value_FullMethodName  = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value\"\n\tWrappersService_CreateInt64Value_FullMethodName  = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value\"\n\tWrappersService_CreateFloatValue_FullMethodName  = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue\"\n\tWrappersService_CreateDoubleValue_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue\"\n\tWrappersService_CreateBoolValue_FullMethodName   = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue\"\n\tWrappersService_CreateUInt32Value_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value\"\n\tWrappersService_CreateUInt64Value_FullMethodName = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value\"\n\tWrappersService_CreateBytesValue_FullMethodName  = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue\"\n\tWrappersService_CreateEmpty_FullMethodName       = \"/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty\"\n)\n\n// WrappersServiceClient is the client API for WrappersService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\ntype WrappersServiceClient interface {\n\tCreate(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error)\n\tCreateStringValue(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*wrapperspb.StringValue, error)\n\tCreateInt32Value(ctx context.Context, in *wrapperspb.Int32Value, opts ...grpc.CallOption) (*wrapperspb.Int32Value, error)\n\tCreateInt64Value(ctx context.Context, in *wrapperspb.Int64Value, opts ...grpc.CallOption) (*wrapperspb.Int64Value, error)\n\tCreateFloatValue(ctx context.Context, in *wrapperspb.FloatValue, opts ...grpc.CallOption) (*wrapperspb.FloatValue, error)\n\tCreateDoubleValue(ctx context.Context, in *wrapperspb.DoubleValue, opts ...grpc.CallOption) (*wrapperspb.DoubleValue, error)\n\tCreateBoolValue(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error)\n\tCreateUInt32Value(ctx context.Context, in *wrapperspb.UInt32Value, opts ...grpc.CallOption) (*wrapperspb.UInt32Value, error)\n\tCreateUInt64Value(ctx context.Context, in *wrapperspb.UInt64Value, opts ...grpc.CallOption) (*wrapperspb.UInt64Value, error)\n\tCreateBytesValue(ctx context.Context, in *wrapperspb.BytesValue, opts ...grpc.CallOption) (*wrapperspb.BytesValue, error)\n\tCreateEmpty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)\n}\n\ntype wrappersServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewWrappersServiceClient(cc grpc.ClientConnInterface) WrappersServiceClient {\n\treturn &wrappersServiceClient{cc}\n}\n\nfunc (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(Wrappers)\n\terr := c.cc.Invoke(ctx, WrappersService_Create_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.StringValue)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateStringValue_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrapperspb.Int32Value, opts ...grpc.CallOption) (*wrapperspb.Int32Value, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.Int32Value)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateInt32Value_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrapperspb.Int64Value, opts ...grpc.CallOption) (*wrapperspb.Int64Value, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.Int64Value)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateInt64Value_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrapperspb.FloatValue, opts ...grpc.CallOption) (*wrapperspb.FloatValue, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.FloatValue)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateFloatValue_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrapperspb.DoubleValue, opts ...grpc.CallOption) (*wrapperspb.DoubleValue, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.DoubleValue)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateDoubleValue_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.BoolValue)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateBoolValue_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrapperspb.UInt32Value, opts ...grpc.CallOption) (*wrapperspb.UInt32Value, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.UInt32Value)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateUInt32Value_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrapperspb.UInt64Value, opts ...grpc.CallOption) (*wrapperspb.UInt64Value, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.UInt64Value)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateUInt64Value_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrapperspb.BytesValue, opts ...grpc.CallOption) (*wrapperspb.BytesValue, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(wrapperspb.BytesValue)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateBytesValue_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *wrappersServiceClient) CreateEmpty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(emptypb.Empty)\n\terr := c.cc.Invoke(ctx, WrappersService_CreateEmpty_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// WrappersServiceServer is the server API for WrappersService service.\n// All implementations should embed UnimplementedWrappersServiceServer\n// for forward compatibility.\ntype WrappersServiceServer interface {\n\tCreate(context.Context, *Wrappers) (*Wrappers, error)\n\tCreateStringValue(context.Context, *wrapperspb.StringValue) (*wrapperspb.StringValue, error)\n\tCreateInt32Value(context.Context, *wrapperspb.Int32Value) (*wrapperspb.Int32Value, error)\n\tCreateInt64Value(context.Context, *wrapperspb.Int64Value) (*wrapperspb.Int64Value, error)\n\tCreateFloatValue(context.Context, *wrapperspb.FloatValue) (*wrapperspb.FloatValue, error)\n\tCreateDoubleValue(context.Context, *wrapperspb.DoubleValue) (*wrapperspb.DoubleValue, error)\n\tCreateBoolValue(context.Context, *wrapperspb.BoolValue) (*wrapperspb.BoolValue, error)\n\tCreateUInt32Value(context.Context, *wrapperspb.UInt32Value) (*wrapperspb.UInt32Value, error)\n\tCreateUInt64Value(context.Context, *wrapperspb.UInt64Value) (*wrapperspb.UInt64Value, error)\n\tCreateBytesValue(context.Context, *wrapperspb.BytesValue) (*wrapperspb.BytesValue, error)\n\tCreateEmpty(context.Context, *emptypb.Empty) (*emptypb.Empty, error)\n}\n\n// UnimplementedWrappersServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedWrappersServiceServer struct{}\n\nfunc (UnimplementedWrappersServiceServer) Create(context.Context, *Wrappers) (*Wrappers, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Create not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateStringValue(context.Context, *wrapperspb.StringValue) (*wrapperspb.StringValue, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateStringValue not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateInt32Value(context.Context, *wrapperspb.Int32Value) (*wrapperspb.Int32Value, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateInt32Value not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateInt64Value(context.Context, *wrapperspb.Int64Value) (*wrapperspb.Int64Value, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateInt64Value not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateFloatValue(context.Context, *wrapperspb.FloatValue) (*wrapperspb.FloatValue, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateFloatValue not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateDoubleValue(context.Context, *wrapperspb.DoubleValue) (*wrapperspb.DoubleValue, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateDoubleValue not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateBoolValue(context.Context, *wrapperspb.BoolValue) (*wrapperspb.BoolValue, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateBoolValue not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateUInt32Value(context.Context, *wrapperspb.UInt32Value) (*wrapperspb.UInt32Value, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateUInt32Value not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateUInt64Value(context.Context, *wrapperspb.UInt64Value) (*wrapperspb.UInt64Value, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateUInt64Value not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateBytesValue(context.Context, *wrapperspb.BytesValue) (*wrapperspb.BytesValue, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateBytesValue not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) CreateEmpty(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateEmpty not implemented\")\n}\nfunc (UnimplementedWrappersServiceServer) testEmbeddedByValue() {}\n\n// UnsafeWrappersServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to WrappersServiceServer will\n// result in compilation errors.\ntype UnsafeWrappersServiceServer interface {\n\tmustEmbedUnimplementedWrappersServiceServer()\n}\n\nfunc RegisterWrappersServiceServer(s grpc.ServiceRegistrar, srv WrappersServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedWrappersServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&WrappersService_ServiceDesc, srv)\n}\n\nfunc _WrappersService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Wrappers)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).Create(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_Create_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).Create(ctx, req.(*Wrappers))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateStringValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.StringValue)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateStringValue(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateStringValue_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateStringValue(ctx, req.(*wrapperspb.StringValue))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateInt32Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.Int32Value)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateInt32Value(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateInt32Value_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateInt32Value(ctx, req.(*wrapperspb.Int32Value))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateInt64Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.Int64Value)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateInt64Value(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateInt64Value_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateInt64Value(ctx, req.(*wrapperspb.Int64Value))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateFloatValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.FloatValue)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateFloatValue(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateFloatValue_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateFloatValue(ctx, req.(*wrapperspb.FloatValue))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateDoubleValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.DoubleValue)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateDoubleValue(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateDoubleValue_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateDoubleValue(ctx, req.(*wrapperspb.DoubleValue))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateBoolValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.BoolValue)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateBoolValue(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateBoolValue_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateBoolValue(ctx, req.(*wrapperspb.BoolValue))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateUInt32Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.UInt32Value)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateUInt32Value(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateUInt32Value_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateUInt32Value(ctx, req.(*wrapperspb.UInt32Value))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateUInt64Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.UInt64Value)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateUInt64Value(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateUInt64Value_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateUInt64Value(ctx, req.(*wrapperspb.UInt64Value))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateBytesValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(wrapperspb.BytesValue)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateBytesValue(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateBytesValue_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateBytesValue(ctx, req.(*wrapperspb.BytesValue))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(emptypb.Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(WrappersServiceServer).CreateEmpty(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: WrappersService_CreateEmpty_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(WrappersServiceServer).CreateEmpty(ctx, req.(*emptypb.Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// WrappersService_ServiceDesc is the grpc.ServiceDesc for WrappersService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar WrappersService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.examples.internal.proto.examplepb.WrappersService\",\n\tHandlerType: (*WrappersServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Create\",\n\t\t\tHandler:    _WrappersService_Create_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateStringValue\",\n\t\t\tHandler:    _WrappersService_CreateStringValue_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateInt32Value\",\n\t\t\tHandler:    _WrappersService_CreateInt32Value_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateInt64Value\",\n\t\t\tHandler:    _WrappersService_CreateInt64Value_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateFloatValue\",\n\t\t\tHandler:    _WrappersService_CreateFloatValue_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateDoubleValue\",\n\t\t\tHandler:    _WrappersService_CreateDoubleValue_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateBoolValue\",\n\t\t\tHandler:    _WrappersService_CreateBoolValue_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateUInt32Value\",\n\t\t\tHandler:    _WrappersService_CreateUInt32Value_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateUInt64Value\",\n\t\t\tHandler:    _WrappersService_CreateUInt64Value_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateBytesValue\",\n\t\t\tHandler:    _WrappersService_CreateBytesValue_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"CreateEmpty\",\n\t\t\tHandler:    _WrappersService_CreateEmpty_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"examples/internal/proto/examplepb/wrappers.proto\",\n}\n"
  },
  {
    "path": "examples/internal/proto/oneofenum/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nproto_library(\n    name = \"oneofenum_proto\",\n    srcs = [\"oneof_enum.proto\"],\n)\n\ngo_proto_library(\n    name = \"oneofenum_go_proto\",\n    compilers = [\"//:go_apiv2\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum\",\n    proto = \":oneofenum_proto\",\n)\n\ngo_library(\n    name = \"oneofenum\",\n    embed = [\":oneofenum_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum\",\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":oneofenum\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/proto/oneofenum/oneof_enum.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/oneofenum/oneof_enum.proto\n\npackage oneofenum\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype ExampleEnum int32\n\nconst (\n\tExampleEnum_EXAMPLE_ENUM_UNSPECIFIED ExampleEnum = 0\n\tExampleEnum_EXAMPLE_ENUM_FIRST       ExampleEnum = 1\n)\n\n// Enum value maps for ExampleEnum.\nvar (\n\tExampleEnum_name = map[int32]string{\n\t\t0: \"EXAMPLE_ENUM_UNSPECIFIED\",\n\t\t1: \"EXAMPLE_ENUM_FIRST\",\n\t}\n\tExampleEnum_value = map[string]int32{\n\t\t\"EXAMPLE_ENUM_UNSPECIFIED\": 0,\n\t\t\"EXAMPLE_ENUM_FIRST\":       1,\n\t}\n)\n\nfunc (x ExampleEnum) Enum() *ExampleEnum {\n\tp := new(ExampleEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x ExampleEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (ExampleEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes[0].Descriptor()\n}\n\nfunc (ExampleEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes[0]\n}\n\nfunc (x ExampleEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use ExampleEnum.Descriptor instead.\nfunc (ExampleEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescGZIP(), []int{0}\n}\n\ntype OneofEnumMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Types that are assignable to One:\n\t//\n\t//\t*OneofEnumMessage_ExampleEnum\n\tOne isOneofEnumMessage_One `protobuf_oneof:\"one\"`\n}\n\nfunc (x *OneofEnumMessage) Reset() {\n\t*x = OneofEnumMessage{}\n\tmi := &file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OneofEnumMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OneofEnumMessage) ProtoMessage() {}\n\nfunc (x *OneofEnumMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OneofEnumMessage.ProtoReflect.Descriptor instead.\nfunc (*OneofEnumMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (m *OneofEnumMessage) GetOne() isOneofEnumMessage_One {\n\tif m != nil {\n\t\treturn m.One\n\t}\n\treturn nil\n}\n\nfunc (x *OneofEnumMessage) GetExampleEnum() ExampleEnum {\n\tif x, ok := x.GetOne().(*OneofEnumMessage_ExampleEnum); ok {\n\t\treturn x.ExampleEnum\n\t}\n\treturn ExampleEnum_EXAMPLE_ENUM_UNSPECIFIED\n}\n\ntype isOneofEnumMessage_One interface {\n\tisOneofEnumMessage_One()\n}\n\ntype OneofEnumMessage_ExampleEnum struct {\n\tExampleEnum ExampleEnum `protobuf:\"varint,1,opt,name=example_enum,json=exampleEnum,proto3,enum=grpc.gateway.examples.internal.proto.oneofenum.ExampleEnum,oneof\"`\n}\n\nfunc (*OneofEnumMessage_ExampleEnum) isOneofEnumMessage_One() {}\n\nvar File_examples_internal_proto_oneofenum_oneof_enum_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc = []byte{\n\t0x0a, 0x32, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65,\n\t0x6e, 0x75, 0x6d, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66,\n\t0x65, 0x6e, 0x75, 0x6d, 0x22, 0x7b, 0x0a, 0x10, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75,\n\t0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x60, 0x0a, 0x0c, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e,\n\t0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x0b, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x05, 0x0a, 0x03, 0x6f, 0x6e,\n\t0x65, 0x2a, 0x43, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d,\n\t0x12, 0x1c, 0x0a, 0x18, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d,\n\t0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16,\n\t0x0a, 0x12, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46,\n\t0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73,\n\t0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x6e, 0x65, 0x6f,\n\t0x66, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData = file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData\n}\n\nvar file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\nvar file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes = make([]protoimpl.MessageInfo, 1)\nvar file_examples_internal_proto_oneofenum_oneof_enum_proto_goTypes = []any{\n\t(ExampleEnum)(0),         // 0: grpc.gateway.examples.internal.proto.oneofenum.ExampleEnum\n\t(*OneofEnumMessage)(nil), // 1: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage\n}\nvar file_examples_internal_proto_oneofenum_oneof_enum_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage.example_enum:type_name -> grpc.gateway.examples.internal.proto.oneofenum.ExampleEnum\n\t1, // [1:1] is the sub-list for method output_type\n\t1, // [1:1] is the sub-list for method input_type\n\t1, // [1:1] is the sub-list for extension type_name\n\t1, // [1:1] is the sub-list for extension extendee\n\t0, // [0:1] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_oneofenum_oneof_enum_proto_init() }\nfunc file_examples_internal_proto_oneofenum_oneof_enum_proto_init() {\n\tif File_examples_internal_proto_oneofenum_oneof_enum_proto != nil {\n\t\treturn\n\t}\n\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes[0].OneofWrappers = []any{\n\t\t(*OneofEnumMessage_ExampleEnum)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc,\n\t\t\tNumEnums:      1,\n\t\t\tNumMessages:   1,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_oneofenum_oneof_enum_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_oneofenum_oneof_enum_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_oneofenum_oneof_enum_proto = out.File\n\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc = nil\n\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_goTypes = nil\n\tfile_examples_internal_proto_oneofenum_oneof_enum_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/oneofenum/oneof_enum.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.oneofenum;\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum\";\n\nenum ExampleEnum {\n  EXAMPLE_ENUM_UNSPECIFIED = 0;\n  EXAMPLE_ENUM_FIRST = 1;\n}\n\nmessage OneofEnumMessage {\n  oneof one {\n    ExampleEnum example_enum = 1;\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/oneofenum/oneof_enum.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/oneofenum/oneof_enum.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/pathenum/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nproto_library(\n    name = \"pathenum_proto\",\n    srcs = [\"path_enum.proto\"],\n)\n\ngo_proto_library(\n    name = \"pathenum_go_proto\",\n    compilers = [\"//:go_apiv2\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\",\n    proto = \":pathenum_proto\",\n)\n\ngo_library(\n    name = \"pathenum\",\n    embed = [\":pathenum_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\",\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":pathenum\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/proto/pathenum/path_enum.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/pathenum/path_enum.proto\n\npackage pathenum\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype PathEnum int32\n\nconst (\n\tPathEnum_ABC PathEnum = 0\n\tPathEnum_DEF PathEnum = 1\n)\n\n// Enum value maps for PathEnum.\nvar (\n\tPathEnum_name = map[int32]string{\n\t\t0: \"ABC\",\n\t\t1: \"DEF\",\n\t}\n\tPathEnum_value = map[string]int32{\n\t\t\"ABC\": 0,\n\t\t\"DEF\": 1,\n\t}\n)\n\nfunc (x PathEnum) Enum() *PathEnum {\n\tp := new(PathEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x PathEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (PathEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[0].Descriptor()\n}\n\nfunc (PathEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[0]\n}\n\nfunc (x PathEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use PathEnum.Descriptor instead.\nfunc (PathEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{0}\n}\n\n// Ignoring lint warnings as this enum type exist to validate proper functionality\n// for projects that don't follow these lint rules.\n// buf:lint:ignore ENUM_PASCAL_CASE\ntype SnakeCaseForImport int32\n\nconst (\n\t// buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n\tSnakeCaseForImport_value_x SnakeCaseForImport = 0\n\t// buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n\tSnakeCaseForImport_value_y SnakeCaseForImport = 1\n)\n\n// Enum value maps for SnakeCaseForImport.\nvar (\n\tSnakeCaseForImport_name = map[int32]string{\n\t\t0: \"value_x\",\n\t\t1: \"value_y\",\n\t}\n\tSnakeCaseForImport_value = map[string]int32{\n\t\t\"value_x\": 0,\n\t\t\"value_y\": 1,\n\t}\n)\n\nfunc (x SnakeCaseForImport) Enum() *SnakeCaseForImport {\n\tp := new(SnakeCaseForImport)\n\t*p = x\n\treturn p\n}\n\nfunc (x SnakeCaseForImport) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SnakeCaseForImport) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1].Descriptor()\n}\n\nfunc (SnakeCaseForImport) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1]\n}\n\nfunc (x SnakeCaseForImport) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use SnakeCaseForImport.Descriptor instead.\nfunc (SnakeCaseForImport) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{1}\n}\n\ntype MessagePathEnum_NestedPathEnum int32\n\nconst (\n\tMessagePathEnum_GHI MessagePathEnum_NestedPathEnum = 0\n\tMessagePathEnum_JKL MessagePathEnum_NestedPathEnum = 1\n)\n\n// Enum value maps for MessagePathEnum_NestedPathEnum.\nvar (\n\tMessagePathEnum_NestedPathEnum_name = map[int32]string{\n\t\t0: \"GHI\",\n\t\t1: \"JKL\",\n\t}\n\tMessagePathEnum_NestedPathEnum_value = map[string]int32{\n\t\t\"GHI\": 0,\n\t\t\"JKL\": 1,\n\t}\n)\n\nfunc (x MessagePathEnum_NestedPathEnum) Enum() *MessagePathEnum_NestedPathEnum {\n\tp := new(MessagePathEnum_NestedPathEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x MessagePathEnum_NestedPathEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (MessagePathEnum_NestedPathEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[2].Descriptor()\n}\n\nfunc (MessagePathEnum_NestedPathEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[2]\n}\n\nfunc (x MessagePathEnum_NestedPathEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use MessagePathEnum_NestedPathEnum.Descriptor instead.\nfunc (MessagePathEnum_NestedPathEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{0, 0}\n}\n\ntype MessagePathEnum struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n}\n\nfunc (x *MessagePathEnum) Reset() {\n\t*x = MessagePathEnum{}\n\tmi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *MessagePathEnum) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*MessagePathEnum) ProtoMessage() {}\n\nfunc (x *MessagePathEnum) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use MessagePathEnum.ProtoReflect.Descriptor instead.\nfunc (*MessagePathEnum) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{0}\n}\n\ntype MessageWithPathEnum struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tValue PathEnum `protobuf:\"varint,1,opt,name=value,proto3,enum=grpc.gateway.examples.internal.pathenum.PathEnum\" json:\"value,omitempty\"`\n}\n\nfunc (x *MessageWithPathEnum) Reset() {\n\t*x = MessageWithPathEnum{}\n\tmi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *MessageWithPathEnum) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*MessageWithPathEnum) ProtoMessage() {}\n\nfunc (x *MessageWithPathEnum) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use MessageWithPathEnum.ProtoReflect.Descriptor instead.\nfunc (*MessageWithPathEnum) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *MessageWithPathEnum) GetValue() PathEnum {\n\tif x != nil {\n\t\treturn x.Value\n\t}\n\treturn PathEnum_ABC\n}\n\ntype MessageWithNestedPathEnum struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tValue MessagePathEnum_NestedPathEnum `protobuf:\"varint,1,opt,name=value,proto3,enum=grpc.gateway.examples.internal.pathenum.MessagePathEnum_NestedPathEnum\" json:\"value,omitempty\"`\n}\n\nfunc (x *MessageWithNestedPathEnum) Reset() {\n\t*x = MessageWithNestedPathEnum{}\n\tmi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *MessageWithNestedPathEnum) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*MessageWithNestedPathEnum) ProtoMessage() {}\n\nfunc (x *MessageWithNestedPathEnum) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use MessageWithNestedPathEnum.ProtoReflect.Descriptor instead.\nfunc (*MessageWithNestedPathEnum) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *MessageWithNestedPathEnum) GetValue() MessagePathEnum_NestedPathEnum {\n\tif x != nil {\n\t\treturn x.Value\n\t}\n\treturn MessagePathEnum_GHI\n}\n\nvar File_examples_internal_proto_pathenum_path_enum_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_pathenum_path_enum_proto_rawDesc = []byte{\n\t0x0a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e,\n\t0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x35, 0x0a, 0x0f, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0x22,\n\t0x0a, 0x0e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d,\n\t0x12, 0x07, 0x0a, 0x03, 0x47, 0x48, 0x49, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4a, 0x4b, 0x4c,\n\t0x10, 0x01, 0x22, 0x5e, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74,\n\t0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e,\n\t0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x22, 0x7a, 0x0a, 0x19, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74,\n\t0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12,\n\t0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50,\n\t0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x1c,\n\t0x0a, 0x08, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x42,\n\t0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x46, 0x10, 0x01, 0x2a, 0x31, 0x0a, 0x15,\n\t0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69,\n\t0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x78,\n\t0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x79, 0x10, 0x01, 0x42,\n\t0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72,\n\t0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70,\n\t0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x06, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_pathenum_path_enum_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_pathenum_path_enum_proto_rawDescData = file_examples_internal_proto_pathenum_path_enum_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_pathenum_path_enum_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_pathenum_path_enum_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_pathenum_path_enum_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_pathenum_path_enum_proto_rawDescData\n}\n\nvar file_examples_internal_proto_pathenum_path_enum_proto_enumTypes = make([]protoimpl.EnumInfo, 3)\nvar file_examples_internal_proto_pathenum_path_enum_proto_msgTypes = make([]protoimpl.MessageInfo, 3)\nvar file_examples_internal_proto_pathenum_path_enum_proto_goTypes = []any{\n\t(PathEnum)(0),                       // 0: grpc.gateway.examples.internal.pathenum.PathEnum\n\t(SnakeCaseForImport)(0),             // 1: grpc.gateway.examples.internal.pathenum.snake_case_for_import\n\t(MessagePathEnum_NestedPathEnum)(0), // 2: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum\n\t(*MessagePathEnum)(nil),             // 3: grpc.gateway.examples.internal.pathenum.MessagePathEnum\n\t(*MessageWithPathEnum)(nil),         // 4: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum\n\t(*MessageWithNestedPathEnum)(nil),   // 5: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum\n}\nvar file_examples_internal_proto_pathenum_path_enum_proto_depIdxs = []int32{\n\t0, // 0: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum.value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum\n\t2, // 1: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum.value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum\n\t2, // [2:2] is the sub-list for method output_type\n\t2, // [2:2] is the sub-list for method input_type\n\t2, // [2:2] is the sub-list for extension type_name\n\t2, // [2:2] is the sub-list for extension extendee\n\t0, // [0:2] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_pathenum_path_enum_proto_init() }\nfunc file_examples_internal_proto_pathenum_path_enum_proto_init() {\n\tif File_examples_internal_proto_pathenum_path_enum_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_pathenum_path_enum_proto_rawDesc,\n\t\t\tNumEnums:      3,\n\t\t\tNumMessages:   3,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_pathenum_path_enum_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_pathenum_path_enum_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_pathenum_path_enum_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_pathenum_path_enum_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_pathenum_path_enum_proto = out.File\n\tfile_examples_internal_proto_pathenum_path_enum_proto_rawDesc = nil\n\tfile_examples_internal_proto_pathenum_path_enum_proto_goTypes = nil\n\tfile_examples_internal_proto_pathenum_path_enum_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/pathenum/path_enum.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.pathenum;\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\";\n\nenum PathEnum {\n  ABC = 0;\n  DEF = 1;\n}\n\nmessage MessagePathEnum {\n  enum NestedPathEnum {\n    GHI = 0;\n    JKL = 1;\n  }\n}\n\nmessage MessageWithPathEnum {\n  PathEnum value = 1;\n}\n\nmessage MessageWithNestedPathEnum {\n  MessagePathEnum.NestedPathEnum value = 1;\n}\n\n// Ignoring lint warnings as this enum type exist to validate proper functionality\n// for projects that don't follow these lint rules.\n// buf:lint:ignore ENUM_PASCAL_CASE\nenum snake_case_for_import {\n  // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n  value_x = 0;\n  // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n  value_y = 1;\n}\n"
  },
  {
    "path": "examples/internal/proto/pathenum/path_enum.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/pathenum/path_enum.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/standalone/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\ngo_library(\n    name = \"standalone\",\n    srcs = [\"unannotated_echo_service.pb.gw.go\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone\",\n    visibility = [\"//examples:__subpackages__\"],\n    deps = [\n        \"//examples/internal/proto/examplepb\",\n        \"//runtime\",\n        \"//utilities\",\n        \"@org_golang_google_grpc//:grpc\",\n        \"@org_golang_google_grpc//codes\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_grpc//metadata\",\n        \"@org_golang_google_grpc//status\",\n        \"@org_golang_google_protobuf//proto\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":standalone\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: examples/internal/proto/examplepb/unannotated_echo_service.proto\n\n/*\nPackage examplepb is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage examplepb\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\textExamplepb \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n\nvar filter_UnannotatedEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_UnannotatedEchoService_Echo_1 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0, \"num\": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}\n\nfunc request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_UnannotatedEchoService_Echo_2 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0, \"num\": 1, \"lang\": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}}\n\nfunc request_UnannotatedEchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tval, ok = pathParams[\"lang\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"lang\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &extExamplepb.UnannotatedSimpleMessage_Lang{}\n\t} else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang).Lang, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"lang\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"num\")\n\t}\n\tprotoReq.Num, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"num\", err)\n\t}\n\tval, ok = pathParams[\"lang\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"lang\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &extExamplepb.UnannotatedSimpleMessage_Lang{}\n\t} else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang).Lang, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"lang\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_2); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_UnannotatedEchoService_Echo_3 = &utilities.DoubleArray{Encoding: map[string]int{\"id\": 0, \"line_num\": 1, \"status\": 2, \"note\": 3}, Base: []int{1, 1, 2, 1, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 4, 2, 3, 5}}\n\nfunc request_UnannotatedEchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"line_num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"line_num\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &extExamplepb.UnannotatedSimpleMessage_LineNum{}\n\t} else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum).LineNum, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"line_num\", err)\n\t}\n\tval, ok = pathParams[\"status.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"status.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"status.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"status.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_3); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"id\")\n\t}\n\tprotoReq.Id, err = runtime.String(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"id\", err)\n\t}\n\tval, ok = pathParams[\"line_num\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"line_num\")\n\t}\n\tif protoReq.Code == nil {\n\t\tprotoReq.Code = &extExamplepb.UnannotatedSimpleMessage_LineNum{}\n\t} else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum); !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\\n\", protoReq.Code)\n\t}\n\tprotoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum).LineNum, err = runtime.Int64(val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"line_num\", err)\n\t}\n\tval, ok = pathParams[\"status.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"status.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"status.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"status.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_3); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_UnannotatedEchoService_Echo_4 = &utilities.DoubleArray{Encoding: map[string]int{\"no\": 0, \"note\": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}}\n\nfunc request_UnannotatedEchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tval, ok := pathParams[\"no.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"no.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"no.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"no.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t\terr      error\n\t)\n\tval, ok := pathParams[\"no.note\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"no.note\")\n\t}\n\terr = runtime.PopulateFieldFromPath(&protoReq, \"no.note\", val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"no.note\", err)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_4); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.Echo(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoBody(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_UnannotatedEchoService_EchoDelete_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := client.EchoDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoDelete(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_UnannotatedEchoService_EchoNested_0(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif req.Body != nil {\n\t\t_, _ = io.Copy(io.Discard, req.Body)\n\t}\n\tmsg, err := client.EchoNested(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_UnannotatedEchoService_EchoNested_0(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar (\n\t\tprotoReq extExamplepb.UnannotatedSimpleMessage\n\t\tmetadata runtime.ServerMetadata\n\t)\n\tif err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tmsg, err := server.EchoNested(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterUnannotatedEchoServiceHandlerServer registers the http handlers for service UnannotatedEchoService to \"mux\".\n// UnaryRPC     :call UnannotatedEchoServiceServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterUnannotatedEchoServiceHandlerFromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server extExamplepb.UnannotatedEchoServiceServer) error {\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo/{id}/{num}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo/{id}/{num}/{lang}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_Echo_2(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo1/{id}/{line_num}/{status.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_Echo_3(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo2/{no.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_Echo_4(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v2/example/echo_body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/v2/example/echo_delete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_UnannotatedEchoService_EchoNested_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoNested\", runtime.WithHTTPPathPattern(\"/v1/example/echo_nested\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_UnannotatedEchoService_EchoNested_0(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoNested_0(annotatedContext, mux, outboundMarshaler, w, req, response_UnannotatedEchoService_EchoNested_0{resp.(*extExamplepb.UnannotatedSimpleMessage)}, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterUnannotatedEchoServiceHandlerFromEndpoint is same as RegisterUnannotatedEchoServiceHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn RegisterUnannotatedEchoServiceHandler(ctx, mux, conn)\n}\n\n// RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, extExamplepb.NewUnannotatedEchoServiceClient(conn))\n}\n\n// RegisterUnannotatedEchoServiceHandlerClient registers the http handlers for service UnannotatedEchoService\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"extExamplepb.UnannotatedEchoServiceClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"extExamplepb.UnannotatedEchoServiceClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"extExamplepb.UnannotatedEchoServiceClient\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client extExamplepb.UnannotatedEchoServiceClient) error {\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo/{id}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo/{id}/{num}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo/{id}/{num}/{lang}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_Echo_2(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo1/{id}/{line_num}/{status.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_Echo_3(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodGet, pattern_UnannotatedEchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo\", runtime.WithHTTPPathPattern(\"/v2/example/echo2/{no.note}\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_Echo_4(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPost, pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody\", runtime.WithHTTPPathPattern(\"/v2/example/echo_body\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodDelete, pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete\", runtime.WithHTTPPathPattern(\"/v2/example/echo_delete\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\tmux.Handle(http.MethodPut, pattern_UnannotatedEchoService_EchoNested_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoNested\", runtime.WithHTTPPathPattern(\"/v1/example/echo_nested\"))\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_UnannotatedEchoService_EchoNested_0(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tforward_UnannotatedEchoService_EchoNested_0(annotatedContext, mux, outboundMarshaler, w, req, response_UnannotatedEchoService_EchoNested_0{resp.(*extExamplepb.UnannotatedSimpleMessage)}, mux.GetForwardResponseOptions()...)\n\t})\n\treturn nil\n}\n\ntype response_UnannotatedEchoService_EchoNested_0 struct {\n\t*extExamplepb.UnannotatedSimpleMessage\n}\n\nfunc (m response_UnannotatedEchoService_EchoNested_0) XXX_ResponseBody() interface{} {\n\tresponse := m.UnannotatedSimpleMessage\n\treturn response.NId\n}\n\nvar (\n\tpattern_UnannotatedEchoService_Echo_0       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v2\", \"example\", \"echo\", \"id\"}, \"\"))\n\tpattern_UnannotatedEchoService_Echo_1       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{\"v2\", \"example\", \"echo\", \"id\", \"num\"}, \"\"))\n\tpattern_UnannotatedEchoService_Echo_2       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{\"v2\", \"example\", \"echo\", \"id\", \"num\", \"lang\"}, \"\"))\n\tpattern_UnannotatedEchoService_Echo_3       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{\"v2\", \"example\", \"echo1\", \"id\", \"line_num\", \"status.note\"}, \"\"))\n\tpattern_UnannotatedEchoService_Echo_4       = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{\"v2\", \"example\", \"echo2\", \"no.note\"}, \"\"))\n\tpattern_UnannotatedEchoService_EchoBody_0   = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"echo_body\"}, \"\"))\n\tpattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v2\", \"example\", \"echo_delete\"}, \"\"))\n\tpattern_UnannotatedEchoService_EchoNested_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{\"v1\", \"example\", \"echo_nested\"}, \"\"))\n)\n\nvar (\n\tforward_UnannotatedEchoService_Echo_0       = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_Echo_1       = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_Echo_2       = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_Echo_3       = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_Echo_4       = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_EchoBody_0   = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_EchoDelete_0 = runtime.ForwardResponseMessage\n\tforward_UnannotatedEchoService_EchoNested_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "examples/internal/proto/sub/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nproto_library(\n    name = \"sub_proto\",\n    srcs = [\n        \"camel_case_message.proto\",\n        \"message.proto\",\n    ],\n)\n\ngo_proto_library(\n    name = \"sub_go_proto\",\n    compilers = [\"//:go_apiv2\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\",\n    proto = \":sub_proto\",\n)\n\ngo_library(\n    name = \"sub\",\n    embed = [\":sub_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\",\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":sub\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/proto/sub/camel_case_message.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/sub/camel_case_message.proto\n\npackage sub\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype StatusEnum int32\n\nconst (\n\tStatusEnum_STATUS_ENUM_UNSPECIFIED StatusEnum = 0\n\tStatusEnum_STATUS_ENUM_AVAILABLE   StatusEnum = 1\n)\n\n// Enum value maps for StatusEnum.\nvar (\n\tStatusEnum_name = map[int32]string{\n\t\t0: \"STATUS_ENUM_UNSPECIFIED\",\n\t\t1: \"STATUS_ENUM_AVAILABLE\",\n\t}\n\tStatusEnum_value = map[string]int32{\n\t\t\"STATUS_ENUM_UNSPECIFIED\": 0,\n\t\t\"STATUS_ENUM_AVAILABLE\":   1,\n\t}\n)\n\nfunc (x StatusEnum) Enum() *StatusEnum {\n\tp := new(StatusEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x StatusEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (StatusEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_examples_internal_proto_sub_camel_case_message_proto_enumTypes[0].Descriptor()\n}\n\nfunc (StatusEnum) Type() protoreflect.EnumType {\n\treturn &file_examples_internal_proto_sub_camel_case_message_proto_enumTypes[0]\n}\n\nfunc (x StatusEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use StatusEnum.Descriptor instead.\nfunc (StatusEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_sub_camel_case_message_proto_rawDescGZIP(), []int{0}\n}\n\n// Create_book and Status_enum demonstrate snake_case identifiers that need to\n// be resolved to Go camel case when referenced by other packages.\ntype CreateBook struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tTitle  string `protobuf:\"bytes,1,opt,name=title,proto3\" json:\"title,omitempty\"`\n\tAuthor string `protobuf:\"bytes,2,opt,name=author,proto3\" json:\"author,omitempty\"`\n}\n\nfunc (x *CreateBook) Reset() {\n\t*x = CreateBook{}\n\tmi := &file_examples_internal_proto_sub_camel_case_message_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *CreateBook) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CreateBook) ProtoMessage() {}\n\nfunc (x *CreateBook) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_sub_camel_case_message_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CreateBook.ProtoReflect.Descriptor instead.\nfunc (*CreateBook) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_sub_camel_case_message_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *CreateBook) GetTitle() string {\n\tif x != nil {\n\t\treturn x.Title\n\t}\n\treturn \"\"\n}\n\nfunc (x *CreateBook) GetAuthor() string {\n\tif x != nil {\n\t\treturn x.Author\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_proto_sub_camel_case_message_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_sub_camel_case_message_proto_rawDesc = []byte{\n\t0x0a, 0x34, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x63, 0x61,\n\t0x6d, 0x65, 0x6c, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62,\n\t0x22, 0x3b, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6b, 0x12,\n\t0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,\n\t0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x2a, 0x45, 0x0a,\n\t0x0b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x17,\n\t0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50,\n\t0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x41,\n\t0x54, 0x55, 0x53, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42,\n\t0x4c, 0x45, 0x10, 0x01, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,\n\t0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65,\n\t0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76,\n\t0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x62, 0x06, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_sub_camel_case_message_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_sub_camel_case_message_proto_rawDescData = file_examples_internal_proto_sub_camel_case_message_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_sub_camel_case_message_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_sub_camel_case_message_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_sub_camel_case_message_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_sub_camel_case_message_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_sub_camel_case_message_proto_rawDescData\n}\n\nvar file_examples_internal_proto_sub_camel_case_message_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\nvar file_examples_internal_proto_sub_camel_case_message_proto_msgTypes = make([]protoimpl.MessageInfo, 1)\nvar file_examples_internal_proto_sub_camel_case_message_proto_goTypes = []any{\n\t(StatusEnum)(0),    // 0: grpc.gateway.examples.internal.proto.sub.Status_enum\n\t(*CreateBook)(nil), // 1: grpc.gateway.examples.internal.proto.sub.Create_book\n}\nvar file_examples_internal_proto_sub_camel_case_message_proto_depIdxs = []int32{\n\t0, // [0:0] is the sub-list for method output_type\n\t0, // [0:0] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_sub_camel_case_message_proto_init() }\nfunc file_examples_internal_proto_sub_camel_case_message_proto_init() {\n\tif File_examples_internal_proto_sub_camel_case_message_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_sub_camel_case_message_proto_rawDesc,\n\t\t\tNumEnums:      1,\n\t\t\tNumMessages:   1,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_sub_camel_case_message_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_sub_camel_case_message_proto_depIdxs,\n\t\tEnumInfos:         file_examples_internal_proto_sub_camel_case_message_proto_enumTypes,\n\t\tMessageInfos:      file_examples_internal_proto_sub_camel_case_message_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_sub_camel_case_message_proto = out.File\n\tfile_examples_internal_proto_sub_camel_case_message_proto_rawDesc = nil\n\tfile_examples_internal_proto_sub_camel_case_message_proto_goTypes = nil\n\tfile_examples_internal_proto_sub_camel_case_message_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/sub/camel_case_message.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.sub;\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\";\n\n// Create_book and Status_enum demonstrate snake_case identifiers that need to\n// be resolved to Go camel case when referenced by other packages.\nmessage Create_book {\n  string title = 1;\n  string author = 2;\n}\n\nenum Status_enum {\n  STATUS_ENUM_UNSPECIFIED = 0;\n  STATUS_ENUM_AVAILABLE = 1;\n}\n"
  },
  {
    "path": "examples/internal/proto/sub/camel_case_message.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/sub/camel_case_message.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/sub/message.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/sub/message.proto\n\npackage sub\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype StringMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tValue *string `protobuf:\"bytes,1,req,name=value\" json:\"value,omitempty\"`\n}\n\nfunc (x *StringMessage) Reset() {\n\t*x = StringMessage{}\n\tmi := &file_examples_internal_proto_sub_message_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *StringMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*StringMessage) ProtoMessage() {}\n\nfunc (x *StringMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_sub_message_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use StringMessage.ProtoReflect.Descriptor instead.\nfunc (*StringMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_sub_message_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *StringMessage) GetValue() string {\n\tif x != nil && x.Value != nil {\n\t\treturn *x.Value\n\t}\n\treturn \"\"\n}\n\n// Status message in sub package\ntype Status struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tCode    *int32  `protobuf:\"varint,1,req,name=code\" json:\"code,omitempty\"`\n\tMessage *string `protobuf:\"bytes,2,opt,name=message\" json:\"message,omitempty\"`\n}\n\nfunc (x *Status) Reset() {\n\t*x = Status{}\n\tmi := &file_examples_internal_proto_sub_message_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Status) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Status) ProtoMessage() {}\n\nfunc (x *Status) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_sub_message_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Status.ProtoReflect.Descriptor instead.\nfunc (*Status) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_sub_message_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *Status) GetCode() int32 {\n\tif x != nil && x.Code != nil {\n\t\treturn *x.Code\n\t}\n\treturn 0\n}\n\nfunc (x *Status) GetMessage() string {\n\tif x != nil && x.Message != nil {\n\t\treturn *x.Message\n\t}\n\treturn \"\"\n}\n\nvar File_examples_internal_proto_sub_message_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_sub_message_proto_rawDesc = []byte{\n\t0x0a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65,\n\t0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x2e, 0x73, 0x75, 0x62, 0x22, 0x25, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x36, 0x0a, 0x06,\n\t0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,\n\t0x20, 0x02, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65,\n\t0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,\n\t0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65,\n\t0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76,\n\t0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62,\n}\n\nvar (\n\tfile_examples_internal_proto_sub_message_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_sub_message_proto_rawDescData = file_examples_internal_proto_sub_message_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_sub_message_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_sub_message_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_sub_message_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_sub_message_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_sub_message_proto_rawDescData\n}\n\nvar file_examples_internal_proto_sub_message_proto_msgTypes = make([]protoimpl.MessageInfo, 2)\nvar file_examples_internal_proto_sub_message_proto_goTypes = []any{\n\t(*StringMessage)(nil), // 0: grpc.gateway.examples.internal.proto.sub.StringMessage\n\t(*Status)(nil),        // 1: grpc.gateway.examples.internal.proto.sub.Status\n}\nvar file_examples_internal_proto_sub_message_proto_depIdxs = []int32{\n\t0, // [0:0] is the sub-list for method output_type\n\t0, // [0:0] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_sub_message_proto_init() }\nfunc file_examples_internal_proto_sub_message_proto_init() {\n\tif File_examples_internal_proto_sub_message_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_sub_message_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   2,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_sub_message_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_sub_message_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_sub_message_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_sub_message_proto = out.File\n\tfile_examples_internal_proto_sub_message_proto_rawDesc = nil\n\tfile_examples_internal_proto_sub_message_proto_goTypes = nil\n\tfile_examples_internal_proto_sub_message_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/sub/message.proto",
    "content": "syntax = \"proto2\";\n\npackage grpc.gateway.examples.internal.proto.sub;\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\";\n\nmessage StringMessage {\n  required string value = 1;\n}\n\n// Status message in sub package\nmessage Status {\n  required int32 code = 1;\n  optional string message = 2;\n}\n"
  },
  {
    "path": "examples/internal/proto/sub/message.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/sub/message.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/proto/sub2/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nproto_library(\n    name = \"sub2_proto\",\n    srcs = [\"message.proto\"],\n)\n\ngo_proto_library(\n    name = \"sub2_go_proto\",\n    compilers = [\"//:go_apiv2\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\",\n    proto = \":sub2_proto\",\n)\n\ngo_library(\n    name = \"sub2\",\n    embed = [\":sub2_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\",\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":sub2\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/proto/sub2/message.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: examples/internal/proto/sub2/message.proto\n\npackage sub2\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype IdMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tUuid string `protobuf:\"bytes,1,opt,name=uuid,proto3\" json:\"uuid,omitempty\"`\n}\n\nfunc (x *IdMessage) Reset() {\n\t*x = IdMessage{}\n\tmi := &file_examples_internal_proto_sub2_message_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *IdMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*IdMessage) ProtoMessage() {}\n\nfunc (x *IdMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_sub2_message_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use IdMessage.ProtoReflect.Descriptor instead.\nfunc (*IdMessage) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_sub2_message_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *IdMessage) GetUuid() string {\n\tif x != nil {\n\t\treturn x.Uuid\n\t}\n\treturn \"\"\n}\n\n// Status message in sub2 package (different structure from sub.Status)\ntype Status struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tErrorCode    string `protobuf:\"bytes,1,opt,name=error_code,json=errorCode,proto3\" json:\"error_code,omitempty\"`\n\tErrorMessage string `protobuf:\"bytes,2,opt,name=error_message,json=errorMessage,proto3\" json:\"error_message,omitempty\"`\n\tSeverity     int32  `protobuf:\"varint,3,opt,name=severity,proto3\" json:\"severity,omitempty\"`\n}\n\nfunc (x *Status) Reset() {\n\t*x = Status{}\n\tmi := &file_examples_internal_proto_sub2_message_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Status) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Status) ProtoMessage() {}\n\nfunc (x *Status) ProtoReflect() protoreflect.Message {\n\tmi := &file_examples_internal_proto_sub2_message_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Status.ProtoReflect.Descriptor instead.\nfunc (*Status) Descriptor() ([]byte, []int) {\n\treturn file_examples_internal_proto_sub2_message_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *Status) GetErrorCode() string {\n\tif x != nil {\n\t\treturn x.ErrorCode\n\t}\n\treturn \"\"\n}\n\nfunc (x *Status) GetErrorMessage() string {\n\tif x != nil {\n\t\treturn x.ErrorMessage\n\t}\n\treturn \"\"\n}\n\nfunc (x *Status) GetSeverity() int32 {\n\tif x != nil {\n\t\treturn x.Severity\n\t}\n\treturn 0\n}\n\nvar File_examples_internal_proto_sub2_message_proto protoreflect.FileDescriptor\n\nvar file_examples_internal_proto_sub2_message_proto_rawDesc = []byte{\n\t0x0a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x22, 0x1f, 0x0a, 0x09, 0x49, 0x64, 0x4d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x68, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74,\n\t0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64,\n\t0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69,\n\t0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69,\n\t0x74, 0x79, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,\n\t0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f,\n\t0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x62, 0x06, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_examples_internal_proto_sub2_message_proto_rawDescOnce sync.Once\n\tfile_examples_internal_proto_sub2_message_proto_rawDescData = file_examples_internal_proto_sub2_message_proto_rawDesc\n)\n\nfunc file_examples_internal_proto_sub2_message_proto_rawDescGZIP() []byte {\n\tfile_examples_internal_proto_sub2_message_proto_rawDescOnce.Do(func() {\n\t\tfile_examples_internal_proto_sub2_message_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_sub2_message_proto_rawDescData)\n\t})\n\treturn file_examples_internal_proto_sub2_message_proto_rawDescData\n}\n\nvar file_examples_internal_proto_sub2_message_proto_msgTypes = make([]protoimpl.MessageInfo, 2)\nvar file_examples_internal_proto_sub2_message_proto_goTypes = []any{\n\t(*IdMessage)(nil), // 0: grpc.gateway.examples.internal.proto.sub2.IdMessage\n\t(*Status)(nil),    // 1: grpc.gateway.examples.internal.proto.sub2.Status\n}\nvar file_examples_internal_proto_sub2_message_proto_depIdxs = []int32{\n\t0, // [0:0] is the sub-list for method output_type\n\t0, // [0:0] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_examples_internal_proto_sub2_message_proto_init() }\nfunc file_examples_internal_proto_sub2_message_proto_init() {\n\tif File_examples_internal_proto_sub2_message_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_examples_internal_proto_sub2_message_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   2,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_examples_internal_proto_sub2_message_proto_goTypes,\n\t\tDependencyIndexes: file_examples_internal_proto_sub2_message_proto_depIdxs,\n\t\tMessageInfos:      file_examples_internal_proto_sub2_message_proto_msgTypes,\n\t}.Build()\n\tFile_examples_internal_proto_sub2_message_proto = out.File\n\tfile_examples_internal_proto_sub2_message_proto_rawDesc = nil\n\tfile_examples_internal_proto_sub2_message_proto_goTypes = nil\n\tfile_examples_internal_proto_sub2_message_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "examples/internal/proto/sub2/message.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.examples.internal.proto.sub2;\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\";\n\nmessage IdMessage {\n  string uuid = 1;\n}\n\n// Status message in sub2 package (different structure from sub.Status)\nmessage Status {\n  string error_code = 1;\n  string error_message = 2;\n  int32 severity = 3;\n}\n"
  },
  {
    "path": "examples/internal/proto/sub2/message.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"examples/internal/proto/sub2/message.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"googleRpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    }\n  }\n}\n"
  },
  {
    "path": "examples/internal/server/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"server\",\n    srcs = [\n        \"a_bit_of_everything.go\",\n        \"echo.go\",\n        \"excess_body.go\",\n        \"fieldmask_helper.go\",\n        \"flow_combination.go\",\n        \"main.go\",\n        \"non_standard_names.go\",\n        \"responsebody.go\",\n        \"unannotatedecho.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server\",\n    deps = [\n        \"//examples/internal/proto/examplepb\",\n        \"//examples/internal/proto/oneofenum\",\n        \"//examples/internal/proto/pathenum\",\n        \"//examples/internal/proto/standalone\",\n        \"//examples/internal/proto/sub\",\n        \"//examples/internal/proto/sub2\",\n        \"//runtime\",\n        \"@com_github_rogpeppe_fastuuid//:fastuuid\",\n        \"@org_golang_google_genproto_googleapis_api//httpbody\",\n        \"@org_golang_google_genproto_googleapis_rpc//errdetails\",\n        \"@org_golang_google_genproto_googleapis_rpc//status\",\n        \"@org_golang_google_grpc//:grpc\",\n        \"@org_golang_google_grpc//codes\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_grpc//metadata\",\n        \"@org_golang_google_grpc//status\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//reflect/protoreflect\",\n        \"@org_golang_google_protobuf//types/known/durationpb\",\n        \"@org_golang_google_protobuf//types/known/emptypb\",\n        \"@org_golang_google_protobuf//types/known/fieldmaskpb\",\n        \"@org_golang_google_protobuf//types/known/wrapperspb\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":server\",\n    visibility = [\"//examples:__subpackages__\"],\n)\n"
  },
  {
    "path": "examples/internal/server/a_bit_of_everything.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n\t\"time\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2\"\n\t\"github.com/rogpeppe/fastuuid\"\n\t\"google.golang.org/genproto/googleapis/api/httpbody\"\n\t\"google.golang.org/genproto/googleapis/rpc/errdetails\"\n\tstatuspb \"google.golang.org/genproto/googleapis/rpc/status\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\n// Implements of ABitOfEverythingServiceServer\n\nvar uuidgen = fastuuid.MustNewGenerator()\n\ntype _ABitOfEverythingServer struct {\n\tv map[string]*examples.ABitOfEverything\n\tm sync.Mutex\n}\n\ntype ABitOfEverythingServer interface {\n\texamples.ABitOfEverythingServiceServer\n\texamples.StreamServiceServer\n}\n\nfunc newABitOfEverythingServer() ABitOfEverythingServer {\n\treturn &_ABitOfEverythingServer{\n\t\tv: make(map[string]*examples.ABitOfEverything),\n\t}\n}\n\nfunc (s *_ABitOfEverythingServer) Create(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\tvar uuid string\n\tfor {\n\t\tuuid = fmt.Sprintf(\"%x\", uuidgen.Next())\n\t\tif _, ok := s.v[uuid]; !ok {\n\t\t\tbreak\n\t\t}\n\t}\n\ts.v[uuid] = msg\n\ts.v[uuid].Uuid = uuid\n\tgrpclog.Infof(\"%v\", s.v[uuid])\n\treturn s.v[uuid], nil\n}\n\nfunc (s *_ABitOfEverythingServer) CreateBody(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\treturn s.Create(ctx, msg)\n}\n\nfunc (s *_ABitOfEverythingServer) CreateBook(ctx context.Context, req *examples.CreateBookRequest) (*examples.Book, error) {\n\treturn &examples.Book{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) UpdateBook(ctx context.Context, req *examples.UpdateBookRequest) (*examples.Book, error) {\n\treturn &examples.Book{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) BulkCreate(stream examples.StreamService_BulkCreateServer) error {\n\tctx := stream.Context()\n\n\tif header, ok := metadata.FromIncomingContext(ctx); ok {\n\t\tif v, ok := header[\"error\"]; ok {\n\t\t\treturn status.Errorf(codes.InvalidArgument, \"error metadata: %v\", v)\n\t\t}\n\t}\n\n\tcount := 0\n\tfor {\n\t\tmsg, err := stream.Recv()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcount++\n\t\tgrpclog.Info(msg)\n\t\tif _, err = s.Create(ctx, msg); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr := stream.SendHeader(metadata.New(map[string]string{\n\t\t\"count\": fmt.Sprintf(\"%d\", count),\n\t}))\n\tif err != nil {\n\t\treturn nil\n\t}\n\n\tstream.SetTrailer(metadata.New(map[string]string{\n\t\t\"foo\": \"foo2\",\n\t\t\"bar\": \"bar2\",\n\t}))\n\treturn stream.SendAndClose(new(emptypb.Empty))\n}\n\nfunc (s *_ABitOfEverythingServer) Lookup(ctx context.Context, msg *sub2.IdMessage) (*examples.ABitOfEverything, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\tgrpclog.Info(msg)\n\n\terr := grpc.SendHeader(ctx, metadata.New(map[string]string{\n\t\t\"uuid\": msg.Uuid,\n\t}))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif a, ok := s.v[msg.Uuid]; ok {\n\t\treturn a, nil\n\t}\n\n\tgrpc.SetTrailer(ctx, metadata.New(map[string]string{\n\t\t\"foo\": \"foo2\",\n\t\t\"bar\": \"bar2\",\n\t}))\n\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n}\n\nfunc (s *_ABitOfEverythingServer) List(opt *examples.Options, stream examples.StreamService_ListServer) error {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\terr := stream.SendHeader(metadata.New(map[string]string{\n\t\t\"count\": fmt.Sprintf(\"%d\", len(s.v)),\n\t}))\n\tif err != nil {\n\t\treturn nil\n\t}\n\n\tfor _, msg := range s.v {\n\t\tif err := stream.Send(msg); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif opt.Error {\n\t\tstream.SetTrailer(metadata.New(map[string]string{\n\t\t\t\"foo\": \"foo2\",\n\t\t\t\"bar\": \"bar2\",\n\t\t}))\n\t\treturn status.Error(codes.InvalidArgument, \"error\")\n\t}\n\treturn nil\n}\n\nfunc (s *_ABitOfEverythingServer) Download(opt *examples.Options, stream examples.StreamService_DownloadServer) error {\n\tmsgs := []*httpbody.HttpBody{{\n\t\tContentType: \"text/html\",\n\t\tData:        []byte(\"Hello 1\"),\n\t}, {\n\t\tContentType: \"text/html\",\n\t\tData:        []byte(\"Hello 2\"),\n\t}}\n\n\tfor _, msg := range msgs {\n\t\tif err := stream.Send(msg); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ttime.Sleep(5 * time.Millisecond)\n\t}\n\n\tif opt.Error {\n\t\tstream.SetTrailer(metadata.New(map[string]string{\n\t\t\t\"foo\": \"foo2\",\n\t\t\t\"bar\": \"bar2\",\n\t\t}))\n\t\treturn status.Error(codes.InvalidArgument, \"error\")\n\t}\n\treturn nil\n}\n\nfunc (s *_ABitOfEverythingServer) Custom(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\tif _, ok := s.v[msg.Uuid]; ok {\n\t\ts.v[msg.Uuid] = msg\n\t} else {\n\t\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n\t}\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) DoubleColon(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\tif _, ok := s.v[msg.Uuid]; ok {\n\t\ts.v[msg.Uuid] = msg\n\t} else {\n\t\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n\t}\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\tif _, ok := s.v[msg.Uuid]; ok {\n\t\ts.v[msg.Uuid] = msg\n\t} else {\n\t\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n\t}\n\treturn new(emptypb.Empty), nil\n}\n\nfunc (s *_ABitOfEverythingServer) UpdateV2(ctx context.Context, msg *examples.UpdateV2Request) (*emptypb.Empty, error) {\n\tgrpclog.Info(msg)\n\t// If there is no update mask do a regular update\n\tif msg.UpdateMask == nil || len(msg.UpdateMask.GetPaths()) == 0 {\n\t\treturn s.Update(ctx, msg.Abe)\n\t}\n\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\tif a, ok := s.v[msg.Abe.Uuid]; ok {\n\t\tapplyFieldMask(a, msg.Abe, msg.UpdateMask)\n\t} else {\n\t\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n\t}\n\treturn new(emptypb.Empty), nil\n}\n\nfunc (s *_ABitOfEverythingServer) Delete(ctx context.Context, msg *sub2.IdMessage) (*emptypb.Empty, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\tif _, ok := s.v[msg.Uuid]; ok {\n\t\tdelete(s.v, msg.Uuid)\n\t} else {\n\t\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n\t}\n\treturn new(emptypb.Empty), nil\n}\n\nfunc (s *_ABitOfEverythingServer) GetQuery(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\tif _, ok := s.v[msg.Uuid]; ok {\n\t\ts.v[msg.Uuid] = msg\n\t} else {\n\t\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n\t}\n\treturn new(emptypb.Empty), nil\n}\n\nfunc (s *_ABitOfEverythingServer) GetRepeatedQuery(ctx context.Context, msg *examples.ABitOfEverythingRepeated) (*examples.ABitOfEverythingRepeated, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) Echo(ctx context.Context, msg *sub.StringMessage) (*sub.StringMessage, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) BulkEcho(stream examples.StreamService_BulkEchoServer) error {\n\tvar msgs []*sub.StringMessage\n\tfor {\n\t\tmsg, err := stream.Recv()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsgs = append(msgs, msg)\n\t}\n\n\thmd := metadata.New(map[string]string{\n\t\t\"foo\": \"foo1\",\n\t\t\"bar\": \"bar1\",\n\t})\n\tif err := stream.SendHeader(hmd); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, msg := range msgs {\n\t\tgrpclog.Info(msg)\n\t\tif err := stream.Send(msg); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tstream.SetTrailer(metadata.New(map[string]string{\n\t\t\"foo\": \"foo2\",\n\t\t\"bar\": \"bar2\",\n\t}))\n\treturn nil\n}\n\nfunc (s *_ABitOfEverythingServer) BulkEchoDuration(stream examples.StreamService_BulkEchoDurationServer) error {\n\thmd := metadata.New(map[string]string{\n\t\t\"foo\": \"foo1\",\n\t\t\"bar\": \"bar1\",\n\t})\n\tif err := stream.SendHeader(hmd); err != nil {\n\t\treturn err\n\t}\n\n\t// Channel to coordinate between read and write goroutines\n\tmsgChan := make(chan *durationpb.Duration)\n\terrChan := make(chan error)\n\n\tgo func() {\n\t\tdefer close(msgChan)\n\t\tfor {\n\t\t\tmsg, err := stream.Recv()\n\t\t\tif err == io.EOF {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\terrChan <- err\n\t\t\t\treturn\n\t\t\t}\n\t\t\tmsgChan <- msg\n\t\t}\n\t}()\n\n\tgo func() {\n\t\tfor msg := range msgChan {\n\t\t\tgrpclog.Info(msg)\n\t\t\tif err := stream.Send(msg); err != nil {\n\t\t\t\terrChan <- err\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\t// Sleep to mock the delay in receiving the request close.\n\t\t// Accommodates the integration test client which is not a true\n\t\t// bidirectional streaming client that supports request streaming.\n\t\ttime.Sleep(1 * time.Second)\n\t\tclose(errChan)\n\t}()\n\n\terr := <-errChan\n\n\tstream.SetTrailer(metadata.New(map[string]string{\n\t\t\"foo\": \"foo2\",\n\t\t\"bar\": \"bar2\",\n\t}))\n\treturn err\n}\n\nfunc (s *_ABitOfEverythingServer) DeepPathEcho(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\ts.m.Lock()\n\tdefer s.m.Unlock()\n\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) NoBindings(ctx context.Context, msg *durationpb.Duration) (*emptypb.Empty, error) {\n\treturn nil, nil\n}\n\nfunc (s *_ABitOfEverythingServer) Timeout(ctx context.Context, msg *emptypb.Empty) (*emptypb.Empty, error) {\n\t<-ctx.Done()\n\treturn nil, status.FromContextError(ctx.Err()).Err()\n}\n\nfunc (s *_ABitOfEverythingServer) ErrorWithDetails(ctx context.Context, msg *emptypb.Empty) (*emptypb.Empty, error) {\n\tstat, err := status.New(codes.Unknown, \"with details\").\n\t\tWithDetails(&errdetails.DebugInfo{\n\t\t\tStackEntries: []string{\"foo:1\"},\n\t\t\tDetail:       \"error debug details\",\n\t\t})\n\tif err != nil {\n\t\treturn nil, status.Errorf(codes.Internal, \"unexpected error adding details: %s\", err)\n\t}\n\treturn nil, stat.Err()\n}\n\nfunc (s *_ABitOfEverythingServer) GetMessageWithBody(ctx context.Context, msg *examples.MessageWithBody) (*emptypb.Empty, error) {\n\treturn &emptypb.Empty{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) PostWithEmptyBody(ctx context.Context, msg *examples.Body) (*emptypb.Empty, error) {\n\treturn &emptypb.Empty{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) CheckGetQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) CheckNestedEnumGetQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) CheckPostQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) OverwriteRequestContentType(ctx context.Context, msg *examples.Body) (*emptypb.Empty, error) {\n\treturn &emptypb.Empty{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) OverwriteResponseContentType(ctx context.Context, msg *emptypb.Empty) (*wrapperspb.StringValue, error) {\n\treturn &wrapperspb.StringValue{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) CheckExternalPathEnum(ctx context.Context, msg *pathenum.MessageWithPathEnum) (*emptypb.Empty, error) {\n\treturn &emptypb.Empty{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) CheckExternalNestedPathEnum(ctx context.Context, msg *pathenum.MessageWithNestedPathEnum) (*emptypb.Empty, error) {\n\treturn &emptypb.Empty{}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) CheckStatus(ctx context.Context, empty *emptypb.Empty) (*examples.CheckStatusResponse, error) {\n\treturn &examples.CheckStatusResponse{Status: &statuspb.Status{}}, nil\n}\n\nfunc (s *_ABitOfEverythingServer) Exists(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) {\n\tif _, ok := s.v[msg.Uuid]; ok {\n\t\treturn new(emptypb.Empty), nil\n\t}\n\n\treturn nil, status.Errorf(codes.NotFound, \"not found\")\n}\n\nfunc (s *_ABitOfEverythingServer) CustomOptionsRequest(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) {\n\terr := grpc.SendHeader(ctx, metadata.New(map[string]string{\n\t\t\"Allow\": \"OPTIONS, GET, HEAD, POST, PUT, TRACE\",\n\t}))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn new(emptypb.Empty), nil\n}\n\nfunc (s *_ABitOfEverythingServer) TraceRequest(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) {\n\treturn msg, nil\n}\n\nfunc (s *_ABitOfEverythingServer) PostOneofEnum(ctx context.Context, msg *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) {\n\treturn new(emptypb.Empty), nil\n}\n\nfunc (s *_ABitOfEverythingServer) PostRequiredMessageType(ctx context.Context, req *examples.RequiredMessageTypeRequest) (*emptypb.Empty, error) {\n\treturn new(emptypb.Empty), nil\n}\n"
  },
  {
    "path": "examples/internal/server/echo.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Implements of EchoServiceServer\n\ntype echoServer struct{}\n\nfunc newEchoServer() examples.EchoServiceServer {\n\treturn new(echoServer)\n}\n\nfunc (s *echoServer) Echo(ctx context.Context, msg *examples.SimpleMessage) (*examples.SimpleMessage, error) {\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *echoServer) EchoBody(ctx context.Context, msg *examples.SimpleMessage) (*examples.SimpleMessage, error) {\n\tgrpclog.Info(msg)\n\tgrpc.SendHeader(ctx, metadata.New(map[string]string{\n\t\t\"foo\": \"foo1\",\n\t\t\"bar\": \"bar1\",\n\t}))\n\tgrpc.SetTrailer(ctx, metadata.New(map[string]string{\n\t\t\"foo\": \"foo2\",\n\t\t\"bar\": \"bar2\",\n\t}))\n\treturn msg, nil\n}\n\nfunc (s *echoServer) EchoDelete(ctx context.Context, msg *examples.SimpleMessage) (*examples.SimpleMessage, error) {\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *echoServer) EchoPatch(ctx context.Context, msg *examples.DynamicMessageUpdate) (*examples.DynamicMessageUpdate, error) {\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *echoServer) EchoUnauthorized(ctx context.Context, msg *examples.SimpleMessage) (*examples.SimpleMessage, error) {\n\tgrpclog.Info(msg)\n\treturn nil, status.Error(codes.Unauthenticated, \"unauthorized err\")\n}\n\n// EchoStatus demonstrates handling of two Status messages with the same name from different packages.\nfunc (s *echoServer) EchoStatus(ctx context.Context, req *examples.StatusCheckRequest) (*examples.StatusCheckResponse, error) {\n\tgrpclog.Info(req)\n\treturn &examples.StatusCheckResponse{\n\t\tResult:     \"ok\",\n\t\tSubStatus:  req.GetSubStatus(),\n\t\tSub2Status: req.GetSub2Status(),\n\t}, nil\n}\n"
  },
  {
    "path": "examples/internal/server/excess_body.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n)\n\nvar (\n\texcessBody_contextChRPC    = make(chan context.Context)\n\texcessBody_contextChStream = make(chan context.Context)\n)\n\nfunc ExcessBodyServer_RetrieveContextRPC() context.Context {\n\treturn <-excessBody_contextChRPC\n}\n\nfunc ExcessBodyServer_RetrieveContextStream() context.Context {\n\treturn <-excessBody_contextChStream\n}\n\ntype excessBodyServer struct{}\n\nfunc newExcessBodyServer() examples.ExcessBodyServiceServer {\n\treturn &excessBodyServer{}\n}\n\nfunc (s excessBodyServer) NoBodyRpc(ctx context.Context, req *emptypb.Empty) (*emptypb.Empty, error) {\n\texcessBody_contextChRPC <- ctx\n\t<-ctx.Done()\n\treturn nil, status.Error(codes.Canceled, \"context canceled\")\n}\n\nfunc (s excessBodyServer) NoBodyServerStream(req *emptypb.Empty, stream grpc.ServerStreamingServer[emptypb.Empty]) error {\n\texcessBody_contextChStream <- stream.Context()\n\t<-stream.Context().Done()\n\treturn status.Error(codes.Canceled, \"context canceled\")\n}\n\nfunc (s excessBodyServer) WithBodyRpc(ctx context.Context, req *emptypb.Empty) (*emptypb.Empty, error) {\n\texcessBody_contextChRPC <- ctx\n\t<-ctx.Done()\n\treturn nil, status.Error(codes.Canceled, \"context canceled\")\n}\n\nfunc (s excessBodyServer) WithBodyServerStream(req *emptypb.Empty, stream grpc.ServerStreamingServer[emptypb.Empty]) error {\n\texcessBody_contextChStream <- stream.Context()\n\t<-stream.Context().Done()\n\treturn status.Error(codes.Canceled, \"context canceled\")\n}\n"
  },
  {
    "path": "examples/internal/server/fieldmask_helper.go",
    "content": "package server\n\nimport (\n\t\"strings\"\n\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\tfield_mask \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n)\n\nfunc applyFieldMask(patchee, patcher proto.Message, mask *field_mask.FieldMask) {\n\tif mask == nil {\n\t\treturn\n\t}\n\tif patchee.ProtoReflect().Descriptor().FullName() != patcher.ProtoReflect().Descriptor().FullName() {\n\t\tpanic(\"patchee and patcher must be same type\")\n\t}\n\n\tfor _, path := range mask.GetPaths() {\n\t\tpatcherField, patcherParent := getField(patcher.ProtoReflect(), path)\n\t\tpatcheeField, patcheeParent := getField(patchee.ProtoReflect(), path)\n\t\tpatcheeParent.Set(patcheeField, patcherParent.Get(patcherField))\n\t}\n}\n\nfunc getField(msg protoreflect.Message, path string) (field protoreflect.FieldDescriptor, parent protoreflect.Message) {\n\tfields := msg.Descriptor().Fields()\n\tparent = msg\n\tnames := strings.Split(path, \".\")\n\tfor i, name := range names {\n\t\tfield = fields.ByName(protoreflect.Name(name))\n\n\t\tif i < len(names)-1 {\n\t\t\tparent = parent.Get(field).Message()\n\t\t\tfields = field.Message().Fields()\n\t\t}\n\t}\n\n\treturn field, parent\n}\n"
  },
  {
    "path": "examples/internal/server/flow_combination.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\t\"io\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n)\n\ntype flowCombinationServer struct{}\n\nfunc newFlowCombinationServer() examples.FlowCombinationServer {\n\treturn &flowCombinationServer{}\n}\n\nfunc (s flowCombinationServer) RpcEmptyRpc(ctx context.Context, req *examples.EmptyProto) (*examples.EmptyProto, error) {\n\treturn req, nil\n}\n\nfunc (s flowCombinationServer) RpcEmptyStream(req *examples.EmptyProto, stream examples.FlowCombination_RpcEmptyStreamServer) error {\n\treturn stream.Send(req)\n}\n\nfunc (s flowCombinationServer) StreamEmptyRpc(stream examples.FlowCombination_StreamEmptyRpcServer) error {\n\tfor {\n\t\t_, err := stream.Recv()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn stream.SendAndClose(new(examples.EmptyProto))\n}\n\nfunc (s flowCombinationServer) StreamEmptyStream(stream examples.FlowCombination_StreamEmptyStreamServer) error {\n\tfor {\n\t\t_, err := stream.Recv()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn stream.Send(new(examples.EmptyProto))\n}\n\nfunc (s flowCombinationServer) RpcBodyRpc(ctx context.Context, req *examples.NonEmptyProto) (*examples.EmptyProto, error) {\n\treturn new(examples.EmptyProto), nil\n}\n\nfunc (s flowCombinationServer) RpcPathSingleNestedRpc(ctx context.Context, req *examples.SingleNestedProto) (*examples.EmptyProto, error) {\n\treturn new(examples.EmptyProto), nil\n}\n\nfunc (s flowCombinationServer) RpcPathNestedRpc(ctx context.Context, req *examples.NestedProto) (*examples.EmptyProto, error) {\n\treturn new(examples.EmptyProto), nil\n}\n\nfunc (s flowCombinationServer) RpcBodyStream(req *examples.NonEmptyProto, stream examples.FlowCombination_RpcBodyStreamServer) error {\n\treturn stream.Send(new(examples.EmptyProto))\n}\n\nfunc (s flowCombinationServer) RpcPathSingleNestedStream(req *examples.SingleNestedProto, stream examples.FlowCombination_RpcPathSingleNestedStreamServer) error {\n\treturn stream.Send(new(examples.EmptyProto))\n}\n\nfunc (s flowCombinationServer) RpcPathNestedStream(req *examples.NestedProto, stream examples.FlowCombination_RpcPathNestedStreamServer) error {\n\treturn stream.Send(new(examples.EmptyProto))\n}\n"
  },
  {
    "path": "examples/internal/server/main.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"net/http\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\tstandalone \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// Run starts the example gRPC service.\n// \"network\" and \"address\" are passed to net.Listen.\nfunc Run(ctx context.Context, network, address string) error {\n\tl, err := net.Listen(network, address)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err := l.Close(); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to close %s %s: %v\", network, address, err)\n\t\t}\n\t}()\n\n\ts := grpc.NewServer()\n\texamples.RegisterEchoServiceServer(s, newEchoServer())\n\texamples.RegisterFlowCombinationServer(s, newFlowCombinationServer())\n\texamples.RegisterExcessBodyServiceServer(s, newExcessBodyServer())\n\texamples.RegisterNonStandardServiceServer(s, newNonStandardServer())\n\texamples.RegisterUnannotatedEchoServiceServer(s, newUnannotatedEchoServer())\n\n\tabe := newABitOfEverythingServer()\n\texamples.RegisterABitOfEverythingServiceServer(s, abe)\n\texamples.RegisterStreamServiceServer(s, abe)\n\texamples.RegisterResponseBodyServiceServer(s, newResponseBodyServer())\n\n\tgo func() {\n\t\tdefer s.GracefulStop()\n\t\t<-ctx.Done()\n\t}()\n\treturn s.Serve(l)\n}\n\n// RunInProcessGateway starts the invoke in process http gateway.\nfunc RunInProcessGateway(ctx context.Context, addr string, opts ...runtime.ServeMuxOption) error {\n\tmux := runtime.NewServeMux(opts...)\n\n\texamples.RegisterEchoServiceHandlerServer(ctx, mux, newEchoServer())\n\texamples.RegisterFlowCombinationHandlerServer(ctx, mux, newFlowCombinationServer())\n\texamples.RegisterExcessBodyServiceHandlerServer(ctx, mux, newExcessBodyServer())\n\texamples.RegisterNonStandardServiceHandlerServer(ctx, mux, newNonStandardServer())\n\tstandalone.RegisterUnannotatedEchoServiceHandlerServer(ctx, mux, newUnannotatedEchoServer())\n\n\tabe := newABitOfEverythingServer()\n\texamples.RegisterABitOfEverythingServiceHandlerServer(ctx, mux, abe)\n\texamples.RegisterStreamServiceHandlerServer(ctx, mux, abe)\n\texamples.RegisterResponseBodyServiceHandlerServer(ctx, mux, newResponseBodyServer())\n\n\ts := &http.Server{\n\t\tAddr:    addr,\n\t\tHandler: mux,\n\t}\n\n\tgo func() {\n\t\t<-ctx.Done()\n\t\tgrpclog.Infof(\"Shutting down the http gateway server\")\n\t\tif err := s.Shutdown(context.Background()); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to shutdown http gateway server: %v\", err)\n\t\t}\n\t}()\n\n\tif err := s.ListenAndServe(); err != http.ErrServerClosed {\n\t\tgrpclog.Errorf(\"Failed to listen and serve: %v\", err)\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "examples/internal/server/non_standard_names.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// Implements NonStandardServiceServer\n\ntype nonStandardServer struct{}\n\nfunc newNonStandardServer() examples.NonStandardServiceServer {\n\treturn new(nonStandardServer)\n}\n\nfunc (s *nonStandardServer) Update(ctx context.Context, msg *examples.NonStandardUpdateRequest) (*examples.NonStandardMessage, error) {\n\tgrpclog.Info(msg)\n\n\tnewMsg := &examples.NonStandardMessage{\n\t\tThing: &examples.NonStandardMessage_Thing{SubThing: &examples.NonStandardMessage_Thing_SubThing{}}, // The fieldmask_helper doesn't generate nested structs if they are nil\n\t}\n\tapplyFieldMask(newMsg, msg.Body, msg.UpdateMask)\n\n\tgrpclog.Info(newMsg)\n\treturn newMsg, nil\n}\n\nfunc (s *nonStandardServer) UpdateWithJSONNames(ctx context.Context, msg *examples.NonStandardWithJSONNamesUpdateRequest) (*examples.NonStandardMessageWithJSONNames, error) {\n\tgrpclog.Info(msg)\n\n\tnewMsg := &examples.NonStandardMessageWithJSONNames{\n\t\tThing: &examples.NonStandardMessageWithJSONNames_Thing{SubThing: &examples.NonStandardMessageWithJSONNames_Thing_SubThing{}}, // The fieldmask_helper doesn't generate nested structs if they are nil\n\t}\n\tapplyFieldMask(newMsg, msg.Body, msg.UpdateMask)\n\n\tgrpclog.Info(newMsg)\n\treturn newMsg, nil\n}\n"
  },
  {
    "path": "examples/internal/server/responsebody.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n)\n\n// Implements of ResponseBodyServiceServer\n\ntype responseBodyServer struct{}\n\nfunc newResponseBodyServer() examples.ResponseBodyServiceServer {\n\treturn new(responseBodyServer)\n}\n\nfunc (s *responseBodyServer) GetResponseBody(ctx context.Context, req *examples.ResponseBodyIn) (*examples.ResponseBodyOut, error) {\n\treturn &examples.ResponseBodyOut{\n\t\tResponse: &examples.ResponseBodyOut_Response{\n\t\t\tData: req.Data,\n\t\t},\n\t}, nil\n}\n\nfunc (s *responseBodyServer) ListResponseBodies(ctx context.Context, req *examples.ResponseBodyIn) (*examples.RepeatedResponseBodyOut, error) {\n\treturn &examples.RepeatedResponseBodyOut{\n\t\tResponse: []*examples.RepeatedResponseBodyOut_Response{\n\t\t\t{\n\t\t\t\tData: req.Data,\n\t\t\t},\n\t\t},\n\t}, nil\n}\n\nfunc (s *responseBodyServer) ListResponseStrings(ctx context.Context, req *examples.ResponseBodyIn) (*examples.RepeatedResponseStrings, error) {\n\tif req.Data == \"empty\" {\n\t\treturn &examples.RepeatedResponseStrings{\n\t\t\tValues: []string{},\n\t\t}, nil\n\t}\n\treturn &examples.RepeatedResponseStrings{\n\t\tValues: []string{\"hello\", req.Data},\n\t}, nil\n}\n\nfunc (s *responseBodyServer) GetResponseBodyStream(req *examples.ResponseBodyIn, stream examples.ResponseBodyService_GetResponseBodyStreamServer) error {\n\tif err := stream.Send(&examples.ResponseBodyOut{\n\t\tResponse: &examples.ResponseBodyOut_Response{\n\t\t\tData: fmt.Sprintf(\"first %s\", req.Data),\n\t\t},\n\t}); err != nil {\n\t\treturn err\n\t}\n\n\treturn stream.Send(&examples.ResponseBodyOut{\n\t\tResponse: &examples.ResponseBodyOut_Response{\n\t\t\tData: fmt.Sprintf(\"second %s\", req.Data),\n\t\t},\n\t})\n}\n\nfunc (s *responseBodyServer) GetResponseBodySameName(ctx context.Context, req *examples.ResponseBodyIn) (*examples.ResponseBodyValue, error) {\n\treturn &examples.ResponseBodyValue{\n\t\tResponseBodyValue: req.Data,\n\t}, nil\n}\n"
  },
  {
    "path": "examples/internal/server/unannotatedecho.go",
    "content": "package server\n\nimport (\n\t\"context\"\n\n\texamples \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n)\n\n// Implements of UnannotatedEchoServiceServer\n\ntype unannotatedEchoServer struct{}\n\nfunc newUnannotatedEchoServer() examples.UnannotatedEchoServiceServer {\n\treturn new(unannotatedEchoServer)\n}\n\nfunc (s *unannotatedEchoServer) Echo(ctx context.Context, msg *examples.UnannotatedSimpleMessage) (*examples.UnannotatedSimpleMessage, error) {\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *unannotatedEchoServer) EchoBody(ctx context.Context, msg *examples.UnannotatedSimpleMessage) (*examples.UnannotatedSimpleMessage, error) {\n\tgrpclog.Info(msg)\n\tgrpc.SendHeader(ctx, metadata.New(map[string]string{\n\t\t\"foo\": \"foo1\",\n\t\t\"bar\": \"bar1\",\n\t}))\n\tgrpc.SetTrailer(ctx, metadata.New(map[string]string{\n\t\t\"foo\": \"foo2\",\n\t\t\"bar\": \"bar2\",\n\t}))\n\treturn msg, nil\n}\n\nfunc (s *unannotatedEchoServer) EchoDelete(ctx context.Context, msg *examples.UnannotatedSimpleMessage) (*examples.UnannotatedSimpleMessage, error) {\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n\nfunc (s *unannotatedEchoServer) EchoNested(ctx context.Context, msg *examples.UnannotatedSimpleMessage) (*examples.UnannotatedSimpleMessage, error) {\n\tgrpclog.Info(msg)\n\treturn msg, nil\n}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/grpc-ecosystem/grpc-gateway/v2\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/antihax/optional v1.0.0\n\tgithub.com/google/go-cmp v0.7.0\n\tgithub.com/rogpeppe/fastuuid v1.2.0\n\tgo.yaml.in/yaml/v3 v3.0.4\n\tgolang.org/x/oauth2 v0.36.0\n\tgolang.org/x/text v0.35.0\n\tgoogle.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7\n\tgoogle.golang.org/grpc v1.79.3\n\tgoogle.golang.org/protobuf v1.36.11\n)\n\nrequire (\n\tgithub.com/kr/pretty v0.3.1 // indirect\n\tgolang.org/x/net v0.48.0 // indirect\n\tgolang.org/x/sys v0.39.0 // indirect\n\tgopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=\ngithub.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=\ngithub.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=\ngithub.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\ngithub.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=\ngithub.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=\ngithub.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=\ngithub.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=\ngithub.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=\ngithub.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=\ngithub.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=\ngithub.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=\ngo.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=\ngo.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=\ngo.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=\ngo.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=\ngo.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=\ngo.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=\ngo.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=\ngo.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=\ngo.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=\ngo.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=\ngo.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=\ngo.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=\ngo.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=\ngo.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=\ngolang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=\ngolang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=\ngolang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=\ngolang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=\ngolang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=\ngolang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=\ngolang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=\ngolang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=\ngonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=\ngonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7 h1:41r6JMbpzBMen0R/4TZeeAmGXSJC7DftGINUodzTkPI=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:EIQZ5bFCfRQDV4MhRle7+OgjNtZ6P1PiZBgAKuxXu/Y=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 h1:ndE4FoJqsIceKP2oYSnUZqhTdYufCYYkqwtFzfrhI7w=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=\ngoogle.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=\ngoogle.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=\ngoogle.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=\ngoogle.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\n"
  },
  {
    "path": "internal/casing/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\ngo_library(\n    name = \"casing\",\n    srcs = [\"camel.go\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing\",\n    visibility = [\"//:__subpackages__\"],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":casing\",\n    visibility = [\"//:__subpackages__\"],\n)\n\ngo_test(\n    name = \"casing_test\",\n    srcs = [\"camel_test.go\"],\n    embed = [\":casing\"],\n)\n"
  },
  {
    "path": "internal/casing/LICENSE.md",
    "content": "Copyright 2010, 2019 The Go Authors.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n"
  },
  {
    "path": "internal/casing/README.md",
    "content": "# Case conversion\n\nThis package contains two functions:\n- `Camel` copied from the `github.com/golang/protobuf/protoc-gen-go/generator` package.\n- `JSONCamelCase` copied from the `github.com/protocolbuffers/protobuf-go/internal/strs` package.\n\nBoth these modules are licensed by The Go Authors, as reflected in this package's [LICENSE.md].\n"
  },
  {
    "path": "internal/casing/camel.go",
    "content": "package casing\n\nimport (\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// Camel returns the CamelCased name.\n//\n// This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package\n//\n// If there is an interior underscore followed by a lower case letter,\n// drop the underscore and convert the letter to upper case.\n// There is a remote possibility of this rewrite causing a name collision,\n// but it's so remote we're prepared to pretend it's nonexistent - since the\n// C++ generator lowercases names, it's extremely unlikely to have two fields\n// with different capitalizations.\n// In short, _my_field_name_2 becomes XMyFieldName_2.\nfunc Camel(s string) string {\n\tif s == \"\" {\n\t\treturn \"\"\n\t}\n\tt := make([]byte, 0, 32)\n\ti := 0\n\tif s[0] == '_' {\n\t\t// Need a capital letter; drop the '_'.\n\t\tt = append(t, 'X')\n\t\ti++\n\t}\n\t// Invariant: if the next letter is lower case, it must be converted\n\t// to upper case.\n\t// That is, we process a word at a time, where words are marked by _ or\n\t// upper case letter. Digits are treated as words.\n\tfor ; i < len(s); i++ {\n\t\tc := s[i]\n\t\tif c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) {\n\t\t\tcontinue // Skip the underscore in s.\n\t\t}\n\t\tif isASCIIDigit(c) {\n\t\t\tt = append(t, c)\n\t\t\tcontinue\n\t\t}\n\t\t// Assume we have a letter now - if not, it's a bogus identifier.\n\t\t// The next word is a sequence of characters that must start upper case.\n\t\tif isASCIILower(c) {\n\t\t\tc ^= ' ' // Make it a capital letter.\n\t\t}\n\t\tt = append(t, c) // Guaranteed not lower case.\n\t\t// Accept lower case sequence that follows.\n\t\tfor i+1 < len(s) && isASCIILower(s[i+1]) {\n\t\t\ti++\n\t\t\tt = append(t, s[i])\n\t\t}\n\t}\n\treturn string(t)\n}\n\n// CamelIdentifier returns the CamelCased identifier without affecting the package name/path if any.\nfunc CamelIdentifier(s string) string {\n\tconst dot = \".\"\n\tif !strings.Contains(s, dot) {\n\t\treturn Camel(s)\n\t}\n\tidentifier := filepath.Ext(s)\n\tpath := strings.TrimSuffix(s, identifier)\n\tidentifier = strings.TrimPrefix(identifier, dot)\n\treturn path + dot + Camel(identifier)\n}\n\n// JSONCamelCase converts a snake_case identifier to a camelCase identifier,\n// according to the protobuf JSON specification.\nfunc JSONCamelCase(s string) string {\n\tvar b []byte\n\tvar wasUnderscore bool\n\tfor i := 0; i < len(s); i++ { // proto identifiers are always ASCII\n\t\tc := s[i]\n\t\tif c != '_' {\n\t\t\tif wasUnderscore && isASCIILower(c) {\n\t\t\t\tc -= 'a' - 'A' // convert to uppercase\n\t\t\t}\n\t\t\tb = append(b, c)\n\t\t}\n\t\twasUnderscore = c == '_'\n\t}\n\treturn string(b)\n}\n\n// And now lots of helper functions.\n\n// Is c an ASCII lower-case letter?\nfunc isASCIILower(c byte) bool {\n\treturn 'a' <= c && c <= 'z'\n}\n\n// Is c an ASCII digit?\nfunc isASCIIDigit(c byte) bool {\n\treturn '0' <= c && c <= '9'\n}\n"
  },
  {
    "path": "internal/casing/camel_test.go",
    "content": "package casing\n\nimport \"testing\"\n\nfunc TestCamelIdentifier(t *testing.T) {\n\tcasingTests := []struct {\n\t\tname  string\n\t\tinput string\n\t\twant  string\n\t}{\n\t\t{\n\t\t\t\"regular snake case identifier\",\n\t\t\t\"snake_case\",\n\t\t\t\"SnakeCase\",\n\t\t},\n\t\t{\n\t\t\t\"snake case identifier with digit\",\n\t\t\t\"snake_case_0_enum\",\n\t\t\t\"SnakeCase_0Enum\",\n\t\t},\n\t\t{\n\t\t\t\"regular snake case identifier with package\",\n\t\t\t\"pathenum.snake_case\",\n\t\t\t\"pathenum.SnakeCase\",\n\t\t},\n\t\t{\n\t\t\t\"snake case identifier with digit and package\",\n\t\t\t\"pathenum.snake_case_0_enum\",\n\t\t\t\"pathenum.SnakeCase_0Enum\",\n\t\t},\n\t\t{\n\t\t\t\"snake case identifier with digit and multiple dots\",\n\t\t\t\"path.pathenum.snake_case_0_enum\",\n\t\t\t\"path.pathenum.SnakeCase_0Enum\",\n\t\t},\n\t}\n\n\tfor _, ct := range casingTests {\n\t\tt.Run(ct.name, func(t *testing.T) {\n\t\t\tgot := CamelIdentifier(ct.input)\n\t\t\tif ct.want != got {\n\t\t\t\tt.Errorf(\"want: %s, got: %s\", ct.want, got)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "internal/codegenerator/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"codegenerator\",\n    srcs = [\n        \"doc.go\",\n        \"parse_req.go\",\n        \"supported_features.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator\",\n    deps = [\n        \"@org_golang_google_protobuf//compiler/protogen\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//types/descriptorpb\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n    ],\n)\n\ngo_test(\n    name = \"codegenerator_test\",\n    srcs = [\"parse_req_test.go\"],\n    deps = [\n        \":codegenerator\",\n        \"@com_github_google_go_cmp//cmp\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//testing/protocmp\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":codegenerator\",\n    visibility = [\"//:__subpackages__\"],\n)\n"
  },
  {
    "path": "internal/codegenerator/doc.go",
    "content": "/*\nPackage codegenerator contains reusable functions used by the code generators.\n*/\npackage codegenerator\n"
  },
  {
    "path": "internal/codegenerator/parse_req.go",
    "content": "package codegenerator\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\n// ParseRequest parses a code generator request from a proto Message.\nfunc ParseRequest(r io.Reader) (*pluginpb.CodeGeneratorRequest, error) {\n\tinput, err := io.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read code generator request: %w\", err)\n\t}\n\treq := new(pluginpb.CodeGeneratorRequest)\n\tif err := proto.Unmarshal(input, req); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to unmarshal code generator request: %w\", err)\n\t}\n\treturn req, nil\n}\n"
  },
  {
    "path": "internal/codegenerator/parse_req_test.go",
    "content": "package codegenerator_test\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/testing/protocmp\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nvar parseReqTests = []struct {\n\tname      string\n\tin        io.Reader\n\tout       *pluginpb.CodeGeneratorRequest\n\texpectErr bool\n}{\n\t{\n\t\t\"Empty input should produce empty output\",\n\t\tmustGetReader(&pluginpb.CodeGeneratorRequest{}),\n\t\t&pluginpb.CodeGeneratorRequest{},\n\t\tfalse,\n\t},\n\t{\n\t\t\"Invalid reader should produce error\",\n\t\t&invalidReader{},\n\t\tnil,\n\t\ttrue,\n\t},\n\t{\n\t\t\"Invalid proto message should produce error\",\n\t\tstrings.NewReader(\"{}\"),\n\t\tnil,\n\t\ttrue,\n\t},\n}\n\nfunc TestParseRequest(t *testing.T) {\n\tfor _, tt := range parseReqTests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tout, err := codegenerator.ParseRequest(tt.in)\n\t\t\tif tt.expectErr && err == nil {\n\t\t\t\tt.Error(\"did not error as expected\")\n\t\t\t}\n\t\t\tif diff := cmp.Diff(out, tt.out, protocmp.Transform()); diff != \"\" {\n\t\t\t\tt.Error(diff)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc mustGetReader(pb proto.Message) io.Reader {\n\tb, err := proto.Marshal(pb)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn bytes.NewBuffer(b)\n}\n\ntype invalidReader struct {\n}\n\nfunc (*invalidReader) Read(p []byte) (int, error) {\n\treturn 0, errors.New(\"invalid reader\")\n}\n"
  },
  {
    "path": "internal/codegenerator/supported_features.go",
    "content": "package codegenerator\n\nimport (\n\t\"google.golang.org/protobuf/compiler/protogen\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nfunc supportedCodeGeneratorFeatures() uint64 {\n\t// Enable support for Protobuf Editions\n\treturn uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL | pluginpb.CodeGeneratorResponse_FEATURE_SUPPORTS_EDITIONS)\n}\n\nfunc supportedEditions() (descriptorpb.Edition, descriptorpb.Edition) {\n\t// Declare support for edition 2023 only\n\treturn descriptorpb.Edition_EDITION_2023, descriptorpb.Edition_EDITION_2023\n}\n\n// SetSupportedFeaturesOnPluginGen sets supported proto3 features\n// on protogen.Plugin.\nfunc SetSupportedFeaturesOnPluginGen(gen *protogen.Plugin) {\n\tgen.SupportedFeatures = supportedCodeGeneratorFeatures()\n\tgen.SupportedEditionsMinimum, gen.SupportedEditionsMaximum = supportedEditions()\n}\n\n// SetSupportedFeaturesOnCodeGeneratorResponse sets supported proto3 features\n// on pluginpb.CodeGeneratorResponse.\nfunc SetSupportedFeaturesOnCodeGeneratorResponse(resp *pluginpb.CodeGeneratorResponse) {\n\tsf := supportedCodeGeneratorFeatures()\n\tresp.SupportedFeatures = &sf\n\tminE, maxE := supportedEditions()\n\tminEN, maxEN := int32(minE.Number()), int32(maxE.Number())\n\tresp.MinimumEdition, resp.MaximumEdition = &minEN, &maxEN\n}\n"
  },
  {
    "path": "internal/descriptor/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"descriptor\",\n    srcs = [\n        \"grpc_api_configuration.go\",\n        \"openapi_configuration.go\",\n        \"registry.go\",\n        \"services.go\",\n        \"types.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\",\n    deps = [\n        \"//internal/casing\",\n        \"//internal/codegenerator\",\n        \"//internal/descriptor/apiconfig\",\n        \"//internal/descriptor/openapiconfig\",\n        \"//internal/httprule\",\n        \"//protoc-gen-openapiv2/options\",\n        \"@in_yaml_go_yaml_v3//:yaml\",\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_protobuf//compiler/protogen\",\n        \"@org_golang_google_protobuf//encoding/protojson\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//types/descriptorpb\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n        \"@org_golang_x_text//cases\",\n        \"@org_golang_x_text//language\",\n    ],\n)\n\ngo_test(\n    name = \"descriptor_test\",\n    size = \"small\",\n    srcs = [\n        \"grpc_api_configuration_test.go\",\n        \"openapi_configuration_test.go\",\n        \"registry_test.go\",\n        \"services_test.go\",\n        \"types_test.go\",\n    ],\n    embed = [\":descriptor\"],\n    deps = [\n        \"//internal/descriptor/openapiconfig\",\n        \"//internal/httprule\",\n        \"//protoc-gen-openapiv2/options\",\n        \"@org_golang_google_protobuf//compiler/protogen\",\n        \"@org_golang_google_protobuf//encoding/prototext\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//types/descriptorpb\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":descriptor\",\n    visibility = [\"//:__subpackages__\"],\n)\n"
  },
  {
    "path": "internal/descriptor/apiconfig/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nproto_library(\n    name = \"apiconfig_proto\",\n    srcs = [\n        \"apiconfig.proto\",\n    ],\n    deps = [\"@googleapis//google/api:http_proto\"],\n)\n\ngo_proto_library(\n    name = \"apiconfig_go_proto\",\n    compilers = [\"//:go_apiv2\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig\",\n    proto = \":apiconfig_proto\",\n    deps = [\"@org_golang_google_genproto_googleapis_api//annotations\"],\n)\n\ngo_library(\n    name = \"apiconfig\",\n    embed = [\":apiconfig_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig\",\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":apiconfig\",\n    visibility = [\"//:__subpackages__\"],\n)\n"
  },
  {
    "path": "internal/descriptor/apiconfig/apiconfig.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: internal/descriptor/apiconfig/apiconfig.proto\n\npackage apiconfig\n\nimport (\n\tannotations \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// GrpcAPIService represents a stripped down version of google.api.Service .\n// Compare to https://github.com/googleapis/googleapis/blob/master/google/api/service.proto\n// The original imports 23 other protobuf files we are not interested in. If a significant\n// subset (>50%) of these start being reproduced in this file we should swap to using the\n// full generated version instead.\n//\n// For the purposes of the gateway generator we only consider a small subset of all\n// available features google supports in their service descriptions. Thanks to backwards\n// compatibility guarantees by protobuf it is safe for us to remove the other fields.\ntype GrpcAPIService struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Http Rule.\n\tHttp *annotations.Http `protobuf:\"bytes,1,opt,name=http,proto3\" json:\"http,omitempty\"`\n}\n\nfunc (x *GrpcAPIService) Reset() {\n\t*x = GrpcAPIService{}\n\tmi := &file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *GrpcAPIService) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*GrpcAPIService) ProtoMessage() {}\n\nfunc (x *GrpcAPIService) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use GrpcAPIService.ProtoReflect.Descriptor instead.\nfunc (*GrpcAPIService) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_apiconfig_apiconfig_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *GrpcAPIService) GetHttp() *annotations.Http {\n\tif x != nil {\n\t\treturn x.Http\n\t}\n\treturn nil\n}\n\nvar File_internal_descriptor_apiconfig_apiconfig_proto protoreflect.FileDescriptor\n\nvar file_internal_descriptor_apiconfig_apiconfig_proto_rawDesc = []byte{\n\t0x0a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72,\n\t0x69, 0x70, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f,\n\t0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,\n\t0x2a, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,\n\t0x72, 0x2e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x15, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x22, 0x36, 0x0a, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x41, 0x50, 0x49, 0x53, 0x65, 0x72,\n\t0x76, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,\n\t0x48, 0x74, 0x74, 0x70, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x42, 0x49, 0x5a, 0x47, 0x67, 0x69,\n\t0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63,\n\t0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x63,\n\t0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_internal_descriptor_apiconfig_apiconfig_proto_rawDescOnce sync.Once\n\tfile_internal_descriptor_apiconfig_apiconfig_proto_rawDescData = file_internal_descriptor_apiconfig_apiconfig_proto_rawDesc\n)\n\nfunc file_internal_descriptor_apiconfig_apiconfig_proto_rawDescGZIP() []byte {\n\tfile_internal_descriptor_apiconfig_apiconfig_proto_rawDescOnce.Do(func() {\n\t\tfile_internal_descriptor_apiconfig_apiconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_descriptor_apiconfig_apiconfig_proto_rawDescData)\n\t})\n\treturn file_internal_descriptor_apiconfig_apiconfig_proto_rawDescData\n}\n\nvar file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 1)\nvar file_internal_descriptor_apiconfig_apiconfig_proto_goTypes = []any{\n\t(*GrpcAPIService)(nil),   // 0: grpc.gateway.internal.descriptor.apiconfig.GrpcAPIService\n\t(*annotations.Http)(nil), // 1: google.api.Http\n}\nvar file_internal_descriptor_apiconfig_apiconfig_proto_depIdxs = []int32{\n\t1, // 0: grpc.gateway.internal.descriptor.apiconfig.GrpcAPIService.http:type_name -> google.api.Http\n\t1, // [1:1] is the sub-list for method output_type\n\t1, // [1:1] is the sub-list for method input_type\n\t1, // [1:1] is the sub-list for extension type_name\n\t1, // [1:1] is the sub-list for extension extendee\n\t0, // [0:1] is the sub-list for field type_name\n}\n\nfunc init() { file_internal_descriptor_apiconfig_apiconfig_proto_init() }\nfunc file_internal_descriptor_apiconfig_apiconfig_proto_init() {\n\tif File_internal_descriptor_apiconfig_apiconfig_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_internal_descriptor_apiconfig_apiconfig_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   1,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_internal_descriptor_apiconfig_apiconfig_proto_goTypes,\n\t\tDependencyIndexes: file_internal_descriptor_apiconfig_apiconfig_proto_depIdxs,\n\t\tMessageInfos:      file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes,\n\t}.Build()\n\tFile_internal_descriptor_apiconfig_apiconfig_proto = out.File\n\tfile_internal_descriptor_apiconfig_apiconfig_proto_rawDesc = nil\n\tfile_internal_descriptor_apiconfig_apiconfig_proto_goTypes = nil\n\tfile_internal_descriptor_apiconfig_apiconfig_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "internal/descriptor/apiconfig/apiconfig.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.internal.descriptor.apiconfig;\n\nimport \"google/api/http.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig\";\n\n// GrpcAPIService represents a stripped down version of google.api.Service .\n// Compare to https://github.com/googleapis/googleapis/blob/master/google/api/service.proto\n// The original imports 23 other protobuf files we are not interested in. If a significant\n// subset (>50%) of these start being reproduced in this file we should swap to using the\n// full generated version instead.\n//\n// For the purposes of the gateway generator we only consider a small subset of all\n// available features google supports in their service descriptions. Thanks to backwards\n// compatibility guarantees by protobuf it is safe for us to remove the other fields.\nmessage GrpcAPIService {\n  // Http Rule.\n  google.api.Http http = 1;\n}\n"
  },
  {
    "path": "internal/descriptor/apiconfig/apiconfig.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"internal/descriptor/apiconfig/apiconfig.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "internal/descriptor/grpc_api_configuration.go",
    "content": "package descriptor\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig\"\n\t\"go.yaml.in/yaml/v3\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n)\n\nfunc loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*apiconfig.GrpcAPIService, error) {\n\tvar yamlContents interface{}\n\tif err := yaml.Unmarshal(yamlFileContents, &yamlContents); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse gRPC API Configuration from YAML in %q: %w\", yamlSourceLogName, err)\n\t}\n\n\tjsonContents, err := json.Marshal(yamlContents)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// As our GrpcAPIService is incomplete, accept unknown fields.\n\tunmarshaler := protojson.UnmarshalOptions{\n\t\tDiscardUnknown: true,\n\t}\n\n\tserviceConfiguration := apiconfig.GrpcAPIService{}\n\tif err := unmarshaler.Unmarshal(jsonContents, &serviceConfiguration); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse gRPC API Configuration from YAML in %q: %w\", yamlSourceLogName, err)\n\t}\n\n\treturn &serviceConfiguration, nil\n}\n\nfunc registerHTTPRulesFromGrpcAPIService(registry *Registry, service *apiconfig.GrpcAPIService, sourceLogName string) error {\n\tif service.Http == nil {\n\t\t// Nothing to do\n\t\treturn nil\n\t}\n\n\tfor _, rule := range service.Http.GetRules() {\n\t\tselector := \".\" + strings.Trim(rule.GetSelector(), \" \")\n\t\tif strings.ContainsAny(selector, \"*, \") {\n\t\t\treturn fmt.Errorf(\"selector %q in %v must specify a single service method without wildcards\", rule.GetSelector(), sourceLogName)\n\t\t}\n\n\t\tregistry.AddExternalHTTPRule(selector, rule)\n\t}\n\n\treturn nil\n}\n\n// LoadGrpcAPIServiceFromYAML loads a gRPC API Configuration from the given YAML file\n// and registers the HttpRule descriptions contained in it as externalHTTPRules in\n// the given registry. This must be done before loading the proto file.\n//\n// You can learn more about gRPC API Service descriptions from Google's documentation\n// at https://cloud.google.com/endpoints/docs/grpc/grpc-service-config\n//\n// Note that for the purposes of the gateway generator we only consider a subset of all\n// available features google supports in their service descriptions.\nfunc (r *Registry) LoadGrpcAPIServiceFromYAML(yamlFile string) error {\n\tyamlFileContents, err := os.ReadFile(yamlFile)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read gRPC API Configuration description from %q: %w\", yamlFile, err)\n\t}\n\n\tservice, err := loadGrpcAPIServiceFromYAML(yamlFileContents, yamlFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn registerHTTPRulesFromGrpcAPIService(r, service, yamlFile)\n}\n"
  },
  {
    "path": "internal/descriptor/grpc_api_configuration_test.go",
    "content": "package descriptor\n\nimport (\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestLoadGrpcAPIServiceFromYAMLInvalidType(t *testing.T) {\n\t// Ideally this would fail but for now this test documents that it doesn't\n\tservice, err := loadGrpcAPIServiceFromYAML([]byte(`type: not.the.right.type`), \"invalidtype\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif service == nil {\n\t\tt.Fatal(\"No service returned\")\n\t}\n}\n\nfunc TestLoadGrpcAPIServiceFromYAMLSingleRule(t *testing.T) {\n\tservice, err := loadGrpcAPIServiceFromYAML([]byte(`\ntype: google.api.Service\nconfig_version: 3\n\nhttp:\n rules:\n - selector: grpctest.YourService.Echo\n   post: /v1/myecho\n   body: \"*\"\n`), \"example\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif service.Http == nil {\n\t\tt.Fatal(\"HTTP is empty\")\n\t}\n\n\tif len(service.Http.GetRules()) != 1 {\n\t\tt.Fatalf(\"Have %v rules instead of one. Got: %v\", len(service.Http.GetRules()), service.Http.GetRules())\n\t}\n\n\trule := service.Http.GetRules()[0]\n\tif rule.GetSelector() != \"grpctest.YourService.Echo\" {\n\t\tt.Errorf(\"Rule has unexpected selector '%v'\", rule.GetSelector())\n\t}\n\tif rule.GetPost() != \"/v1/myecho\" {\n\t\tt.Errorf(\"Rule has unexpected post '%v'\", rule.GetPost())\n\t}\n\tif rule.GetBody() != \"*\" {\n\t\tt.Errorf(\"Rule has unexpected body '%v'\", rule.GetBody())\n\t}\n}\n\nfunc TestLoadGrpcAPIServiceFromYAMLRejectInvalidYAML(t *testing.T) {\n\tservice, err := loadGrpcAPIServiceFromYAML([]byte(`\ntype: google.api.Service\nconfig_version: 3\n\nhttp:\n rules:\n - selector: grpctest.YourService.Echo\n   - post: thislinebreakstheselectorblockabovewiththeleadingdash\n   body: \"*\"\n`), \"invalidyaml\")\n\tif err == nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif !strings.Contains(err.Error(), \"line 6\") {\n\t\tt.Errorf(\"Expected yaml error to be detected in line 6. Got other error: %v\", err)\n\t}\n\n\tif service != nil {\n\t\tt.Fatal(\"Service returned\")\n\t}\n}\n\nfunc TestLoadGrpcAPIServiceFromYAMLMultipleWithAdditionalBindings(t *testing.T) {\n\tservice, err := loadGrpcAPIServiceFromYAML([]byte(`\ntype: google.api.Service\nconfig_version: 3\n\nhttp:\n rules:\n - selector: first.selector\n   post: /my/post/path\n   body: \"*\"\n   additional_bindings:\n   - post: /additional/post/path\n   - put: /additional/put/{value}/path\n   - delete: \"{value}\"\n   - patch: \"/additional/patch/{value}\"\n - selector: some.other.service\n   delete: foo\n`), \"example\")\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to load service description from YAML: %v\", err)\n\t}\n\n\tif service == nil {\n\t\tt.Fatal(\"No service returned\")\n\t}\n\n\tif service.Http == nil {\n\t\tt.Fatal(\"HTTP is empty\")\n\t}\n\n\tif len(service.Http.GetRules()) != 2 {\n\t\tt.Fatalf(\"%v service(s) returned when two were expected. Got: %v\", len(service.Http.GetRules()), service.Http)\n\t}\n\n\tfirst := service.Http.GetRules()[0]\n\tif first.GetSelector() != \"first.selector\" {\n\t\tt.Errorf(\"first.selector has unexpected selector '%v'\", first.GetSelector())\n\t}\n\tif first.GetBody() != \"*\" {\n\t\tt.Errorf(\"first.selector has unexpected body '%v'\", first.GetBody())\n\t}\n\tif first.GetPost() != \"/my/post/path\" {\n\t\tt.Errorf(\"first.selector has unexpected post '%v'\", first.GetPost())\n\t}\n\tif len(first.GetAdditionalBindings()) != 4 {\n\t\tt.Fatalf(\"first.selector has unexpected number of bindings %v instead of four. Got: %v\", len(first.GetAdditionalBindings()), first.GetAdditionalBindings())\n\t}\n\tif first.GetAdditionalBindings()[0].GetPost() != \"/additional/post/path\" {\n\t\tt.Errorf(\"first.selector additional binding 0 has unexpected post '%v'\", first.GetAdditionalBindings()[0].GetPost())\n\t}\n\tif first.GetAdditionalBindings()[1].GetPut() != \"/additional/put/{value}/path\" {\n\t\tt.Errorf(\"first.selector additional binding 1 has unexpected put '%v'\", first.GetAdditionalBindings()[0].GetPost())\n\t}\n\tif first.GetAdditionalBindings()[2].GetDelete() != \"{value}\" {\n\t\tt.Errorf(\"first.selector additional binding 2 has unexpected delete '%v'\", first.GetAdditionalBindings()[0].GetPost())\n\t}\n\tif first.GetAdditionalBindings()[3].GetPatch() != \"/additional/patch/{value}\" {\n\t\tt.Errorf(\"first.selector additional binding 3 has unexpected patch '%v'\", first.GetAdditionalBindings()[0].GetPost())\n\t}\n\n\tsecond := service.Http.GetRules()[1]\n\tif second.GetSelector() != \"some.other.service\" {\n\t\tt.Errorf(\"some.other.service has unexpected selector '%v'\", second.GetSelector())\n\t}\n\tif second.GetDelete() != \"foo\" {\n\t\tt.Errorf(\"some.other.service has unexpected delete '%v'\", second.GetDelete())\n\t}\n\tif len(second.GetAdditionalBindings()) != 0 {\n\t\tt.Errorf(\"some.other.service has %v additional bindings when it should not have any. Got: %v\", len(second.GetAdditionalBindings()), second.GetAdditionalBindings())\n\t}\n}\n\nfunc TestLoadGrpcAPIServiceFromYAMLUnknownKeys(t *testing.T) {\n\tservice, err := loadGrpcAPIServiceFromYAML([]byte(`\ntype: google.api.Service\nconfig_version: 3\n\nvery: key\nmuch: 1\n\nhttp:\n rules:\n - selector: some.other.service\n   delete: foo\n   invalidkey: yes\n`), \"example\")\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to load service description from YAML: %v\", err)\n\t}\n\n\tif service == nil {\n\t\tt.Fatal(\"No service returned\")\n\t}\n\n\tif service.Http == nil {\n\t\tt.Fatal(\"HTTP is empty\")\n\t}\n\n\tif len(service.Http.GetRules()) != 1 {\n\t\tt.Fatalf(\"%v service(s) returned when two were expected. Got: %v\", len(service.Http.GetRules()), service.Http)\n\t}\n\n\tfirst := service.Http.GetRules()[0]\n\tif first.GetSelector() != \"some.other.service\" {\n\t\tt.Errorf(\"first.selector has unexpected selector '%v'\", first.GetSelector())\n\t}\n\tif first.GetDelete() != \"foo\" {\n\t\tt.Errorf(\"first.selector has unexpected delete '%v'\", first.GetPost())\n\t}\n}\n"
  },
  {
    "path": "internal/descriptor/openapi_configuration.go",
    "content": "package descriptor\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig\"\n\t\"go.yaml.in/yaml/v3\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n)\n\nfunc loadOpenAPIConfigFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*openapiconfig.OpenAPIConfig, error) {\n\tvar yamlContents interface{}\n\tif err := yaml.Unmarshal(yamlFileContents, &yamlContents); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse gRPC API Configuration from YAML in %q: %w\", yamlSourceLogName, err)\n\t}\n\n\tjsonContents, err := json.Marshal(yamlContents)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Reject unknown fields because OpenAPIConfig is only used here\n\tunmarshaler := protojson.UnmarshalOptions{\n\t\tDiscardUnknown: false,\n\t}\n\n\topenapiConfiguration := openapiconfig.OpenAPIConfig{}\n\tif err := unmarshaler.Unmarshal(jsonContents, &openapiConfiguration); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse OpenAPI Configuration from YAML in %q: %w\", yamlSourceLogName, err)\n\t}\n\n\treturn &openapiConfiguration, nil\n}\n\nfunc registerOpenAPIOptions(registry *Registry, openAPIConfig *openapiconfig.OpenAPIConfig, yamlSourceLogName string) error {\n\tif openAPIConfig.OpenapiOptions == nil {\n\t\t// Nothing to do\n\t\treturn nil\n\t}\n\n\tif err := registry.RegisterOpenAPIOptions(openAPIConfig.OpenapiOptions); err != nil {\n\t\treturn fmt.Errorf(\"failed to register option in %s: %w\", yamlSourceLogName, err)\n\t}\n\treturn nil\n}\n\n// LoadOpenAPIConfigFromYAML loads an  OpenAPI Configuration from the given YAML file\n// and registers the OpenAPI options the given registry.\n// This must be done after loading the proto file.\nfunc (r *Registry) LoadOpenAPIConfigFromYAML(yamlFile string) error {\n\tyamlFileContents, err := os.ReadFile(yamlFile)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read OpenAPI Configuration description from %q: %w\", yamlFile, err)\n\t}\n\n\tconfig, err := loadOpenAPIConfigFromYAML(yamlFileContents, yamlFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn registerOpenAPIOptions(r, config, yamlFile)\n}\n"
  },
  {
    "path": "internal/descriptor/openapi_configuration_test.go",
    "content": "package descriptor\n\nimport (\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n)\n\nfunc TestLoadOpenAPIConfigFromYAMLRejectInvalidYAML(t *testing.T) {\n\tconfig, err := loadOpenAPIConfigFromYAML([]byte(`\nopenapiOptions:\nfile:\n- file: test.proto\n  - option:\n      schemes:\n        - HTTP\n        - HTTPS\n        - WSS\n      securityDefinitions:\n        security:\n          ApiKeyAuth:\n            type: TYPE_API_KEY\n            in: IN_HEADER\n            name: \"X-API-Key\"\n`), \"invalidyaml\")\n\tif err == nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif !strings.Contains(err.Error(), \"line 3\") {\n\t\tt.Errorf(\"Expected yaml error to be detected in line 3. Got other error: %v\", err)\n\t}\n\n\tif config != nil {\n\t\tt.Fatal(\"Config returned\")\n\t}\n}\n\nfunc TestLoadOpenAPIConfigFromYAML(t *testing.T) {\n\tconfig, err := loadOpenAPIConfigFromYAML([]byte(`\nopenapiOptions:\n  file:\n  - file: test.proto\n    option:\n      schemes:\n      - HTTP\n      - HTTPS\n      - WSS\n      securityDefinitions:\n        security:\n          ApiKeyAuth:\n            type: TYPE_API_KEY\n            in: IN_HEADER\n            name: \"X-API-Key\"\n`), \"openapi_options\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif config.OpenapiOptions == nil {\n\t\tt.Fatal(\"OpenAPIOptions is empty\")\n\t}\n\n\topts := config.OpenapiOptions\n\tif numFileOpts := len(opts.File); numFileOpts != 1 {\n\t\tt.Fatalf(\"expected 1 file option but got %d\", numFileOpts)\n\t}\n\n\tfileOpt := opts.File[0]\n\n\tif fileOpt.File != \"test.proto\" {\n\t\tt.Fatalf(\"file option has unexpected binding %s\", fileOpt.File)\n\t}\n\n\tswaggerOpt := fileOpt.Option\n\n\tif swaggerOpt == nil {\n\t\tt.Fatal(\"expected option to be set\")\n\t}\n\n\tif numSchemes := len(swaggerOpt.Schemes); numSchemes != 3 {\n\t\tt.Fatalf(\"expected 3 schemes but got %d\", numSchemes)\n\t}\n\tif swaggerOpt.Schemes[0] != options.Scheme_HTTP {\n\t\tt.Fatalf(\"expected first scheme to be HTTP but got %s\", swaggerOpt.Schemes[0])\n\t}\n\tif swaggerOpt.Schemes[1] != options.Scheme_HTTPS {\n\t\tt.Fatalf(\"expected second scheme to be HTTPS but got %s\", swaggerOpt.Schemes[1])\n\t}\n\tif swaggerOpt.Schemes[2] != options.Scheme_WSS {\n\t\tt.Fatalf(\"expected third scheme to be WSS but got %s\", swaggerOpt.Schemes[2])\n\t}\n\n\tif swaggerOpt.SecurityDefinitions == nil {\n\t\tt.Fatal(\"expected securityDefinitions to be set\")\n\t}\n\tif numSecOpts := len(swaggerOpt.SecurityDefinitions.Security); numSecOpts != 1 {\n\t\tt.Fatalf(\"expected 1 security option but got %d\", numSecOpts)\n\t}\n\tsecOpt, ok := swaggerOpt.SecurityDefinitions.Security[\"ApiKeyAuth\"]\n\tif !ok {\n\t\tt.Fatal(\"no SecurityScheme for key \\\"ApiKeyAuth\\\"\")\n\t}\n\tif secOpt.Type != options.SecurityScheme_TYPE_API_KEY {\n\t\tt.Fatalf(\"expected scheme type to be TYPE_API_KEY but got %s\", secOpt.Type)\n\t}\n\tif secOpt.In != options.SecurityScheme_IN_HEADER {\n\t\tt.Fatalf(\"expected scheme  in to be IN_HEADER but got %s\", secOpt.In)\n\t}\n\tif secOpt.Name != \"X-API-Key\" {\n\t\tt.Fatalf(\"expected name to be X-API-Key but got %s\", secOpt.Name)\n\t}\n}\n\nfunc TestLoadOpenAPIConfigFromYAMLUnknownKeys(t *testing.T) {\n\t_, err := loadOpenAPIConfigFromYAML([]byte(`\nclosedapiOptions:\n  get: it?\nopenapiOptions:\n  file:\n  - file: test.proto\n    option:\n      schemes:\n      - HTTP\n`), \"openapi_options\")\n\tif err == nil {\n\t\tt.Errorf(\"Expected invalid key error\")\n\t}\n\n}\n"
  },
  {
    "path": "internal/descriptor/openapiconfig/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\nproto_library(\n    name = \"openapiconfig_proto\",\n    srcs = [\"openapiconfig.proto\"],\n    visibility = [\"//:__subpackages__\"],\n    deps = [\"//protoc-gen-openapiv2/options:options_proto\"],\n)\n\ngo_proto_library(\n    name = \"openapiconfig_go_proto\",\n    compilers = [\"//:go_apiv2\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig\",\n    proto = \":openapiconfig_proto\",\n    visibility = [\"//:__subpackages__\"],\n    deps = [\"//protoc-gen-openapiv2/options\"],\n)\n\ngo_library(\n    name = \"openapiconfig\",\n    embed = [\":openapiconfig_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig\",\n    visibility = [\"//:__subpackages__\"],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":openapiconfig\",\n    visibility = [\"//:__subpackages__\"],\n)\n"
  },
  {
    "path": "internal/descriptor/openapiconfig/openapiconfig.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: internal/descriptor/openapiconfig/openapiconfig.proto\n\npackage openapiconfig\n\nimport (\n\toptions \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// OpenAPIFileOption represents OpenAPI options on a file\ntype OpenAPIFileOption struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tFile   string           `protobuf:\"bytes,1,opt,name=file,proto3\" json:\"file,omitempty\"`\n\tOption *options.Swagger `protobuf:\"bytes,2,opt,name=option,proto3\" json:\"option,omitempty\"`\n}\n\nfunc (x *OpenAPIFileOption) Reset() {\n\t*x = OpenAPIFileOption{}\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpenAPIFileOption) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpenAPIFileOption) ProtoMessage() {}\n\nfunc (x *OpenAPIFileOption) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OpenAPIFileOption.ProtoReflect.Descriptor instead.\nfunc (*OpenAPIFileOption) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *OpenAPIFileOption) GetFile() string {\n\tif x != nil {\n\t\treturn x.File\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpenAPIFileOption) GetOption() *options.Swagger {\n\tif x != nil {\n\t\treturn x.Option\n\t}\n\treturn nil\n}\n\n// OpenAPIMethodOption represents OpenAPI options on a method\ntype OpenAPIMethodOption struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tMethod string             `protobuf:\"bytes,1,opt,name=method,proto3\" json:\"method,omitempty\"`\n\tOption *options.Operation `protobuf:\"bytes,2,opt,name=option,proto3\" json:\"option,omitempty\"`\n}\n\nfunc (x *OpenAPIMethodOption) Reset() {\n\t*x = OpenAPIMethodOption{}\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpenAPIMethodOption) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpenAPIMethodOption) ProtoMessage() {}\n\nfunc (x *OpenAPIMethodOption) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OpenAPIMethodOption.ProtoReflect.Descriptor instead.\nfunc (*OpenAPIMethodOption) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *OpenAPIMethodOption) GetMethod() string {\n\tif x != nil {\n\t\treturn x.Method\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpenAPIMethodOption) GetOption() *options.Operation {\n\tif x != nil {\n\t\treturn x.Option\n\t}\n\treturn nil\n}\n\n// OpenAPIMessageOption represents OpenAPI options on a message\ntype OpenAPIMessageOption struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tMessage string          `protobuf:\"bytes,1,opt,name=message,proto3\" json:\"message,omitempty\"`\n\tOption  *options.Schema `protobuf:\"bytes,2,opt,name=option,proto3\" json:\"option,omitempty\"`\n}\n\nfunc (x *OpenAPIMessageOption) Reset() {\n\t*x = OpenAPIMessageOption{}\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpenAPIMessageOption) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpenAPIMessageOption) ProtoMessage() {}\n\nfunc (x *OpenAPIMessageOption) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OpenAPIMessageOption.ProtoReflect.Descriptor instead.\nfunc (*OpenAPIMessageOption) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *OpenAPIMessageOption) GetMessage() string {\n\tif x != nil {\n\t\treturn x.Message\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpenAPIMessageOption) GetOption() *options.Schema {\n\tif x != nil {\n\t\treturn x.Option\n\t}\n\treturn nil\n}\n\n// OpenAPIServiceOption represents OpenAPI options on a service\ntype OpenAPIServiceOption struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tService string       `protobuf:\"bytes,1,opt,name=service,proto3\" json:\"service,omitempty\"` // ex: Service\n\tOption  *options.Tag `protobuf:\"bytes,2,opt,name=option,proto3\" json:\"option,omitempty\"`\n}\n\nfunc (x *OpenAPIServiceOption) Reset() {\n\t*x = OpenAPIServiceOption{}\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpenAPIServiceOption) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpenAPIServiceOption) ProtoMessage() {}\n\nfunc (x *OpenAPIServiceOption) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OpenAPIServiceOption.ProtoReflect.Descriptor instead.\nfunc (*OpenAPIServiceOption) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *OpenAPIServiceOption) GetService() string {\n\tif x != nil {\n\t\treturn x.Service\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpenAPIServiceOption) GetOption() *options.Tag {\n\tif x != nil {\n\t\treturn x.Option\n\t}\n\treturn nil\n}\n\n// OpenAPIFieldOption represents OpenAPI options on a field\ntype OpenAPIFieldOption struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tField  string              `protobuf:\"bytes,1,opt,name=field,proto3\" json:\"field,omitempty\"`\n\tOption *options.JSONSchema `protobuf:\"bytes,2,opt,name=option,proto3\" json:\"option,omitempty\"`\n}\n\nfunc (x *OpenAPIFieldOption) Reset() {\n\t*x = OpenAPIFieldOption{}\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpenAPIFieldOption) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpenAPIFieldOption) ProtoMessage() {}\n\nfunc (x *OpenAPIFieldOption) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OpenAPIFieldOption.ProtoReflect.Descriptor instead.\nfunc (*OpenAPIFieldOption) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *OpenAPIFieldOption) GetField() string {\n\tif x != nil {\n\t\treturn x.Field\n\t}\n\treturn \"\"\n}\n\nfunc (x *OpenAPIFieldOption) GetOption() *options.JSONSchema {\n\tif x != nil {\n\t\treturn x.Option\n\t}\n\treturn nil\n}\n\n// OpenAPIOptions represents OpenAPI protobuf options\ntype OpenAPIOptions struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tFile    []*OpenAPIFileOption    `protobuf:\"bytes,1,rep,name=file,proto3\" json:\"file,omitempty\"`\n\tMethod  []*OpenAPIMethodOption  `protobuf:\"bytes,2,rep,name=method,proto3\" json:\"method,omitempty\"`\n\tMessage []*OpenAPIMessageOption `protobuf:\"bytes,3,rep,name=message,proto3\" json:\"message,omitempty\"`\n\tService []*OpenAPIServiceOption `protobuf:\"bytes,4,rep,name=service,proto3\" json:\"service,omitempty\"`\n\tField   []*OpenAPIFieldOption   `protobuf:\"bytes,5,rep,name=field,proto3\" json:\"field,omitempty\"`\n}\n\nfunc (x *OpenAPIOptions) Reset() {\n\t*x = OpenAPIOptions{}\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpenAPIOptions) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpenAPIOptions) ProtoMessage() {}\n\nfunc (x *OpenAPIOptions) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OpenAPIOptions.ProtoReflect.Descriptor instead.\nfunc (*OpenAPIOptions) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP(), []int{5}\n}\n\nfunc (x *OpenAPIOptions) GetFile() []*OpenAPIFileOption {\n\tif x != nil {\n\t\treturn x.File\n\t}\n\treturn nil\n}\n\nfunc (x *OpenAPIOptions) GetMethod() []*OpenAPIMethodOption {\n\tif x != nil {\n\t\treturn x.Method\n\t}\n\treturn nil\n}\n\nfunc (x *OpenAPIOptions) GetMessage() []*OpenAPIMessageOption {\n\tif x != nil {\n\t\treturn x.Message\n\t}\n\treturn nil\n}\n\nfunc (x *OpenAPIOptions) GetService() []*OpenAPIServiceOption {\n\tif x != nil {\n\t\treturn x.Service\n\t}\n\treturn nil\n}\n\nfunc (x *OpenAPIOptions) GetField() []*OpenAPIFieldOption {\n\tif x != nil {\n\t\treturn x.Field\n\t}\n\treturn nil\n}\n\n// OpenAPIConfig represents a set of OpenAPI options\ntype OpenAPIConfig struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tOpenapiOptions *OpenAPIOptions `protobuf:\"bytes,1,opt,name=openapi_options,json=openapiOptions,proto3\" json:\"openapi_options,omitempty\"`\n}\n\nfunc (x *OpenAPIConfig) Reset() {\n\t*x = OpenAPIConfig{}\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *OpenAPIConfig) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*OpenAPIConfig) ProtoMessage() {}\n\nfunc (x *OpenAPIConfig) ProtoReflect() protoreflect.Message {\n\tmi := &file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use OpenAPIConfig.ProtoReflect.Descriptor instead.\nfunc (*OpenAPIConfig) Descriptor() ([]byte, []int) {\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP(), []int{6}\n}\n\nfunc (x *OpenAPIConfig) GetOpenapiOptions() *OpenAPIOptions {\n\tif x != nil {\n\t\treturn x.OpenapiOptions\n\t}\n\treturn nil\n}\n\nvar File_internal_descriptor_openapiconfig_openapiconfig_proto protoreflect.FileDescriptor\n\nvar file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDesc = []byte{\n\t0x0a, 0x35, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72,\n\t0x69, 0x70, 0x74, 0x6f, 0x72, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e,\n\t0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69,\n\t0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64,\n\t0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d,\n\t0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49,\n\t0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69,\n\t0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x4a,\n\t0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69,\n\t0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67,\n\t0x65, 0x72, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7b, 0x0a, 0x13, 0x4f, 0x70,\n\t0x65, 0x6e, 0x41, 0x50, 0x49, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x4c, 0x0a, 0x06, 0x6f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f,\n\t0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,\n\t0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7b, 0x0a, 0x14, 0x4f, 0x70, 0x65, 0x6e, 0x41,\n\t0x50, 0x49, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,\n\t0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x6f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f,\n\t0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x22, 0x78, 0x0a, 0x14, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x53,\n\t0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07,\n\t0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73,\n\t0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x79,\n\t0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x61, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x03, 0x0a, 0x0e, 0x4f, 0x70,\n\t0x65, 0x6e, 0x41, 0x50, 0x49, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x04,\n\t0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x6e,\n\t0x41, 0x50, 0x49, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66,\n\t0x69, 0x6c, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73, 0x63,\n\t0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f,\n\t0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x4d, 0x65, 0x74, 0x68,\n\t0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,\n\t0x12, 0x5e, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,\n\t0x70, 0x74, 0x6f, 0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66,\n\t0x69, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x12, 0x5e, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,\n\t0x70, 0x74, 0x6f, 0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66,\n\t0x69, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,\n\t0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,\n\t0x12, 0x58, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,\n\t0x6f, 0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,\n\t0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x78, 0x0a, 0x0d, 0x4f, 0x70,\n\t0x65, 0x6e, 0x41, 0x50, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x67, 0x0a, 0x0f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73,\n\t0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63,\n\t0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x4f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x4f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,\n\t0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65,\n\t0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76,\n\t0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72,\n\t0x69, 0x70, 0x74, 0x6f, 0x72, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e,\n\t0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescOnce sync.Once\n\tfile_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescData = file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDesc\n)\n\nfunc file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescGZIP() []byte {\n\tfile_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescOnce.Do(func() {\n\t\tfile_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescData)\n\t})\n\treturn file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDescData\n}\n\nvar file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 7)\nvar file_internal_descriptor_openapiconfig_openapiconfig_proto_goTypes = []any{\n\t(*OpenAPIFileOption)(nil),    // 0: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIFileOption\n\t(*OpenAPIMethodOption)(nil),  // 1: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIMethodOption\n\t(*OpenAPIMessageOption)(nil), // 2: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIMessageOption\n\t(*OpenAPIServiceOption)(nil), // 3: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIServiceOption\n\t(*OpenAPIFieldOption)(nil),   // 4: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIFieldOption\n\t(*OpenAPIOptions)(nil),       // 5: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIOptions\n\t(*OpenAPIConfig)(nil),        // 6: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIConfig\n\t(*options.Swagger)(nil),      // 7: grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t(*options.Operation)(nil),    // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t(*options.Schema)(nil),       // 9: grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t(*options.Tag)(nil),          // 10: grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t(*options.JSONSchema)(nil),   // 11: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n}\nvar file_internal_descriptor_openapiconfig_openapiconfig_proto_depIdxs = []int32{\n\t7,  // 0: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIFileOption.option:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t8,  // 1: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIMethodOption.option:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t9,  // 2: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIMessageOption.option:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t10, // 3: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIServiceOption.option:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t11, // 4: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIFieldOption.option:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n\t0,  // 5: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIOptions.file:type_name -> grpc.gateway.internal.descriptor.openapiconfig.OpenAPIFileOption\n\t1,  // 6: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIOptions.method:type_name -> grpc.gateway.internal.descriptor.openapiconfig.OpenAPIMethodOption\n\t2,  // 7: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIOptions.message:type_name -> grpc.gateway.internal.descriptor.openapiconfig.OpenAPIMessageOption\n\t3,  // 8: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIOptions.service:type_name -> grpc.gateway.internal.descriptor.openapiconfig.OpenAPIServiceOption\n\t4,  // 9: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIOptions.field:type_name -> grpc.gateway.internal.descriptor.openapiconfig.OpenAPIFieldOption\n\t5,  // 10: grpc.gateway.internal.descriptor.openapiconfig.OpenAPIConfig.openapi_options:type_name -> grpc.gateway.internal.descriptor.openapiconfig.OpenAPIOptions\n\t11, // [11:11] is the sub-list for method output_type\n\t11, // [11:11] is the sub-list for method input_type\n\t11, // [11:11] is the sub-list for extension type_name\n\t11, // [11:11] is the sub-list for extension extendee\n\t0,  // [0:11] is the sub-list for field type_name\n}\n\nfunc init() { file_internal_descriptor_openapiconfig_openapiconfig_proto_init() }\nfunc file_internal_descriptor_openapiconfig_openapiconfig_proto_init() {\n\tif File_internal_descriptor_openapiconfig_openapiconfig_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_internal_descriptor_openapiconfig_openapiconfig_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   7,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_internal_descriptor_openapiconfig_openapiconfig_proto_goTypes,\n\t\tDependencyIndexes: file_internal_descriptor_openapiconfig_openapiconfig_proto_depIdxs,\n\t\tMessageInfos:      file_internal_descriptor_openapiconfig_openapiconfig_proto_msgTypes,\n\t}.Build()\n\tFile_internal_descriptor_openapiconfig_openapiconfig_proto = out.File\n\tfile_internal_descriptor_openapiconfig_openapiconfig_proto_rawDesc = nil\n\tfile_internal_descriptor_openapiconfig_openapiconfig_proto_goTypes = nil\n\tfile_internal_descriptor_openapiconfig_openapiconfig_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "internal/descriptor/openapiconfig/openapiconfig.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.internal.descriptor.openapiconfig;\n\nimport \"protoc-gen-openapiv2/options/openapiv2.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig\";\n\n// OpenAPIFileOption represents OpenAPI options on a file\nmessage OpenAPIFileOption {\n  string file = 1;\n  grpc.gateway.protoc_gen_openapiv2.options.Swagger option = 2;\n}\n\n// OpenAPIMethodOption represents OpenAPI options on a method\nmessage OpenAPIMethodOption {\n  string method = 1;\n  grpc.gateway.protoc_gen_openapiv2.options.Operation option = 2;\n}\n\n// OpenAPIMessageOption represents OpenAPI options on a message\nmessage OpenAPIMessageOption {\n  string message = 1;\n  grpc.gateway.protoc_gen_openapiv2.options.Schema option = 2;\n}\n\n// OpenAPIServiceOption represents OpenAPI options on a service\nmessage OpenAPIServiceOption {\n  string service = 1; // ex: Service\n  grpc.gateway.protoc_gen_openapiv2.options.Tag option = 2;\n}\n\n// OpenAPIFieldOption represents OpenAPI options on a field\nmessage OpenAPIFieldOption {\n  string field = 1;\n  grpc.gateway.protoc_gen_openapiv2.options.JSONSchema option = 2;\n}\n\n// OpenAPIOptions represents OpenAPI protobuf options\nmessage OpenAPIOptions {\n  repeated OpenAPIFileOption file = 1;\n  repeated OpenAPIMethodOption method = 2;\n  repeated OpenAPIMessageOption message = 3;\n  repeated OpenAPIServiceOption service = 4;\n  repeated OpenAPIFieldOption field = 5;\n}\n\n// OpenAPIConfig represents a set of OpenAPI options\nmessage OpenAPIConfig {\n  OpenAPIOptions openapi_options = 1;\n}\n"
  },
  {
    "path": "internal/descriptor/openapiconfig/openapiconfig.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"internal/descriptor/openapiconfig/openapiconfig.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\"\n        }\n      },\n      \"additionalProperties\": {}\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "internal/descriptor/registry.go",
    "content": "package descriptor\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n\t\"google.golang.org/genproto/googleapis/api/annotations\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/compiler/protogen\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\n// Registry is a registry of information extracted from pluginpb.CodeGeneratorRequest.\ntype Registry struct {\n\t// msgs is a mapping from fully-qualified message name to descriptor\n\tmsgs map[string]*Message\n\n\t// enums is a mapping from fully-qualified enum name to descriptor\n\tenums map[string]*Enum\n\n\t// files is a mapping from file path to descriptor\n\tfiles map[string]*File\n\n\t// meths is a mapping from fully-qualified method name to descriptor\n\tmeths map[string]*Method\n\n\t// prefix is a prefix to be inserted to golang package paths generated from proto package names.\n\tprefix string\n\n\t// pkgMap is a user-specified mapping from file path to proto package.\n\tpkgMap map[string]string\n\n\t// pkgAliases is a mapping from package aliases to package paths in go which are already taken.\n\tpkgAliases map[string]string\n\n\t// allowDeleteBody permits http delete methods to have a body\n\tallowDeleteBody bool\n\n\t// externalHttpRules is a mapping from fully qualified service method names to additional HttpRules applicable besides the ones found in annotations.\n\texternalHTTPRules map[string][]*annotations.HttpRule\n\n\t// allowMerge generation one OpenAPI file out of multiple protos\n\tallowMerge bool\n\n\t// mergeFileName target OpenAPI file name after merge\n\tmergeFileName string\n\n\t// includePackageInTags controls whether the package name defined in the `package` directive\n\t// in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation.\n\tincludePackageInTags bool\n\n\t// repeatedPathParamSeparator specifies how path parameter repeated fields are separated\n\trepeatedPathParamSeparator repeatedFieldSeparator\n\n\t// useJSONNamesForFields if true json tag name is used for generating fields in OpenAPI definitions,\n\t// otherwise the original proto name is used. It's helpful for synchronizing the OpenAPI definition\n\t// with gRPC-Gateway response, if it uses json tags for marshaling.\n\tuseJSONNamesForFields bool\n\n\t// useProto3FieldSemantics if true proto3 field semantics are used for generating fields in OpenAPI definitions.\n\tuseProto3FieldSemantics bool\n\n\t// openAPINamingStrategy is the naming strategy to use for assigning OpenAPI field and parameter names. This can be one of the following:\n\t// - `legacy`: use the legacy naming strategy from protoc-gen-swagger, that generates unique but not necessarily\n\t//             maximally concise names. Components are concatenated directly, e.g., `MyOuterMessageMyNestedMessage`.\n\t// - `simple`: use a simple heuristic for generating unique and concise names. Components are concatenated using\n\t//             dots as a separator, e.g., `MyOuterMessage.MyNestedMessage` (if `MyNestedMessage` alone is unique,\n\t//             `MyNestedMessage` will be used as the OpenAPI name).\n\t// - `fqn`:    always use the fully-qualified name of the proto message (leading dot removed) as the OpenAPI\n\t//             name.\n\topenAPINamingStrategy string\n\n\t// visibilityRestrictionSelectors is a map of selectors for `google.api.VisibilityRule`s that will be included in the OpenAPI output.\n\tvisibilityRestrictionSelectors map[string]bool\n\n\t// useGoTemplate determines whether you want to use GO templates\n\t// in your protofile comments\n\tuseGoTemplate bool\n\n\t// goTemplateArgs specifies a list of key value pair inputs to be displayed in Go templates\n\tgoTemplateArgs map[string]string\n\n\t// ignoreComments determines whether all protofile comments should be excluded from output\n\tignoreComments bool\n\n\t// removeInternalComments determines whether to remove substrings in comments that begin with\n\t// `(--` and end with `--)` as specified in https://google.aip.dev/192#internal-comments.\n\tremoveInternalComments bool\n\n\t// enumsAsInts render enum as integer, as opposed to string\n\tenumsAsInts bool\n\n\t// omitEnumDefaultValue omits default value of enum\n\tomitEnumDefaultValue bool\n\n\t// disableDefaultErrors disables the generation of the default error types.\n\t// This is useful for users who have defined custom error handling.\n\tdisableDefaultErrors bool\n\n\t// simpleOperationIDs removes the service prefix from the generated\n\t// operationIDs. This risks generating duplicate operationIDs.\n\tsimpleOperationIDs bool\n\n\tstandalone bool\n\t// warnOnUnboundMethods causes the registry to emit warning logs if an RPC method\n\t// has no HttpRule annotation.\n\twarnOnUnboundMethods bool\n\n\t// proto3OptionalNullable specifies whether Proto3 Optional fields should be marked as x-nullable.\n\tproto3OptionalNullable bool\n\n\t// fileOptions is a mapping of file name to additional OpenAPI file options\n\tfileOptions map[string]*options.Swagger\n\n\t// methodOptions is a mapping of fully-qualified method name to additional OpenAPI method options\n\tmethodOptions map[string]*options.Operation\n\n\t// messageOptions is a mapping of fully-qualified message name to additional OpenAPI message options\n\tmessageOptions map[string]*options.Schema\n\n\t//serviceOptions is a mapping of fully-qualified service name to additional OpenAPI service options\n\tserviceOptions map[string]*options.Tag\n\n\t// fieldOptions is a mapping of the fully-qualified name of the parent message concat\n\t// field name and a period to additional OpenAPI field options\n\tfieldOptions map[string]*options.JSONSchema\n\n\t// generateUnboundMethods causes the registry to generate proxy methods even for\n\t// RPC methods that have no HttpRule annotation.\n\tgenerateUnboundMethods bool\n\n\t// omitPackageDoc, if false, causes a package comment to be included in the generated code.\n\tomitPackageDoc bool\n\n\t// recursiveDepth sets the maximum depth of a field parameter\n\trecursiveDepth int\n\n\t// annotationMap is used to check for duplicate HTTP annotations\n\tannotationMap map[annotationIdentifier]struct{}\n\n\t// disableServiceTags disables the generation of service tags.\n\t// This is useful if you do not want to expose the names of your backend grpc services.\n\tdisableServiceTags bool\n\n\t// disableDefaultResponses disables the generation of default responses.\n\t// Useful if you have to support custom response codes that are not 200.\n\tdisableDefaultResponses bool\n\n\t// useAllOfForRefs, if set, will use allOf as container for $ref to preserve same-level\n\t// properties\n\tuseAllOfForRefs bool\n\n\t// omitArrayItemTypeWhenRefSibling, if set, will omit 'type: object' in array items when $ref is present\n\t// to avoid no-$ref-siblings violations in OpenAPI v2\n\tomitArrayItemTypeWhenRefSibling bool\n\n\t// allowPatchFeature determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).\n\tallowPatchFeature bool\n\n\t// preserveRPCOrder, if true, will ensure the order of paths emitted in openapi swagger files mirror\n\t// the order of RPC methods found in proto files. If false, emitted paths will be ordered alphabetically.\n\tpreserveRPCOrder bool\n\n\t// enableRpcDeprecation whether to process grpc method's deprecated option\n\tenableRpcDeprecation bool\n\n\t// enableFieldDeprecation whether to process proto field's deprecated option\n\tenableFieldDeprecation bool\n\n\t// expandSlashedPathPatterns, if true, for a path parameter carrying a sub-path, described via parameter pattern (i.e.\n\t// the pattern contains forward slashes), this will expand the _pattern_ into the URI and will _replace_ the parameter\n\t// with new path parameters inferred from patterns wildcards.\n\t//\n\t// Example: a Google AIP style path \"/v1/{name=projects/*/locations/*}/datasets/{dataset}\" with a \"name\" parameter\n\t// containing sub-path will generate \"/v1/projects/{project}/locations/{location}/datasets/{dataset}\" path in OpenAPI.\n\t// Note that the original \"name\" parameter is replaced with \"project\" and \"location\" parameters.\n\t//\n\t// This leads to more compliant and readable OpenAPI suitable for documentation, but may complicate client\n\t// implementation if you want to pass the original \"name\" parameter.\n\texpandSlashedPathPatterns bool\n\n\t// generateXGoType is a global generator option for generating x-go-type annotations\n\tgenerateXGoType bool\n}\n\ntype repeatedFieldSeparator struct {\n\tname string\n\tsep  rune\n}\n\ntype annotationIdentifier struct {\n\tmethod       string\n\tpathTemplate string\n\tservice      *Service\n}\n\n// NewRegistry returns a new Registry.\nfunc NewRegistry() *Registry {\n\treturn &Registry{\n\t\tmsgs:                           make(map[string]*Message),\n\t\tenums:                          make(map[string]*Enum),\n\t\tmeths:                          make(map[string]*Method),\n\t\tfiles:                          make(map[string]*File),\n\t\tpkgMap:                         make(map[string]string),\n\t\tpkgAliases:                     make(map[string]string),\n\t\texternalHTTPRules:              make(map[string][]*annotations.HttpRule),\n\t\topenAPINamingStrategy:          \"legacy\",\n\t\tvisibilityRestrictionSelectors: make(map[string]bool),\n\t\trepeatedPathParamSeparator: repeatedFieldSeparator{\n\t\t\tname: \"csv\",\n\t\t\tsep:  ',',\n\t\t},\n\t\tfileOptions:    make(map[string]*options.Swagger),\n\t\tmethodOptions:  make(map[string]*options.Operation),\n\t\tmessageOptions: make(map[string]*options.Schema),\n\t\tserviceOptions: make(map[string]*options.Tag),\n\t\tfieldOptions:   make(map[string]*options.JSONSchema),\n\t\tannotationMap:  make(map[annotationIdentifier]struct{}),\n\t\trecursiveDepth: 1000,\n\t}\n}\n\n// Load loads definitions of services, methods, messages, enumerations and fields from \"req\".\nfunc (r *Registry) Load(req *pluginpb.CodeGeneratorRequest) error {\n\tgen, err := protogen.Options{}.New(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Note: keep in mind that this might be not enough because\n\t// protogen.Plugin is used only to load files here.\n\t// The support for features must be set on the pluginpb.CodeGeneratorResponse.\n\tcodegenerator.SetSupportedFeaturesOnPluginGen(gen)\n\treturn r.load(gen)\n}\n\nfunc (r *Registry) LoadFromPlugin(gen *protogen.Plugin) error {\n\treturn r.load(gen)\n}\n\nfunc (r *Registry) load(gen *protogen.Plugin) error {\n\tfilePaths := make([]string, 0, len(gen.FilesByPath))\n\tfor filePath := range gen.FilesByPath {\n\t\tfilePaths = append(filePaths, filePath)\n\t}\n\tsort.Strings(filePaths)\n\n\tfor _, filePath := range filePaths {\n\t\tr.loadFile(filePath, gen.FilesByPath[filePath])\n\t}\n\n\tfor _, filePath := range filePaths {\n\t\tif !gen.FilesByPath[filePath].Generate {\n\t\t\tcontinue\n\t\t}\n\t\tfile := r.files[filePath]\n\t\tif err := r.loadServices(file); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// loadFile loads messages, enumerations and fields from \"file\".\n// It does not load services and methods in \"file\".  You need to call\n// loadServices after loadFiles is called for all files to load services and methods.\nfunc (r *Registry) loadFile(filePath string, file *protogen.File) {\n\tpkg := GoPackage{\n\t\tPath: string(file.GoImportPath),\n\t\tName: string(file.GoPackageName),\n\t}\n\tif r.standalone {\n\t\tpkg.Alias = \"ext\" + cases.Title(language.AmericanEnglish).String(pkg.Name)\n\t}\n\n\tif err := r.ReserveGoPackageAlias(pkg.Name, pkg.Path); err != nil {\n\t\tfor i := 0; ; i++ {\n\t\t\talias := fmt.Sprintf(\"%s_%d\", pkg.Name, i)\n\t\t\tif err := r.ReserveGoPackageAlias(alias, pkg.Path); err == nil {\n\t\t\t\tpkg.Alias = alias\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tf := &File{\n\t\tFileDescriptorProto:     file.Proto,\n\t\tGoPkg:                   pkg,\n\t\tGeneratedFilenamePrefix: file.GeneratedFilenamePrefix,\n\t}\n\n\tr.files[filePath] = f\n\tr.registerMsg(f, nil, file.Proto.MessageType)\n\tr.registerEnum(f, nil, file.Proto.EnumType)\n}\n\nfunc (r *Registry) registerMsg(file *File, outerPath []string, msgs []*descriptorpb.DescriptorProto) {\n\tfor i, md := range msgs {\n\t\tm := &Message{\n\t\t\tFile:              file,\n\t\t\tOuters:            outerPath,\n\t\t\tDescriptorProto:   md,\n\t\t\tIndex:             i,\n\t\t\tForcePrefixedName: r.standalone,\n\t\t}\n\t\tfor _, fd := range md.GetField() {\n\t\t\tm.Fields = append(m.Fields, &Field{\n\t\t\t\tMessage:              m,\n\t\t\t\tFieldDescriptorProto: fd,\n\t\t\t\tForcePrefixedName:    r.standalone,\n\t\t\t})\n\t\t}\n\t\tfile.Messages = append(file.Messages, m)\n\t\tr.msgs[m.FQMN()] = m\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Infof(\"Register name: %s\", m.FQMN())\n\t\t}\n\n\t\tvar outers []string\n\t\touters = append(outers, outerPath...)\n\t\touters = append(outers, m.GetName())\n\t\tr.registerMsg(file, outers, m.GetNestedType())\n\t\tr.registerEnum(file, outers, m.GetEnumType())\n\t}\n}\n\nfunc (r *Registry) registerEnum(file *File, outerPath []string, enums []*descriptorpb.EnumDescriptorProto) {\n\tfor i, ed := range enums {\n\t\te := &Enum{\n\t\t\tFile:                file,\n\t\t\tOuters:              outerPath,\n\t\t\tEnumDescriptorProto: ed,\n\t\t\tIndex:               i,\n\t\t\tForcePrefixedName:   r.standalone,\n\t\t}\n\t\tfile.Enums = append(file.Enums, e)\n\t\tr.enums[e.FQEN()] = e\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Infof(\"Register enum name: %s\", e.FQEN())\n\t\t}\n\t}\n}\n\n// LookupMsg looks up a message type by \"name\".\n// It tries to resolve \"name\" from \"location\" if \"name\" is a relative message name.\nfunc (r *Registry) LookupMsg(location, name string) (*Message, error) {\n\tif grpclog.V(1) {\n\t\tgrpclog.Infof(\"Lookup %s from %s\", name, location)\n\t}\n\tif strings.HasPrefix(name, \".\") {\n\t\tm, ok := r.msgs[name]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"no message found: %s\", name)\n\t\t}\n\t\treturn m, nil\n\t}\n\n\tif !strings.HasPrefix(location, \".\") {\n\t\tlocation = fmt.Sprintf(\".%s\", location)\n\t}\n\tcomponents := strings.Split(location, \".\")\n\tfor len(components) > 0 {\n\t\tfqmn := strings.Join(append(components, name), \".\")\n\t\tif m, ok := r.msgs[fqmn]; ok {\n\t\t\treturn m, nil\n\t\t}\n\t\tcomponents = components[:len(components)-1]\n\t}\n\treturn nil, fmt.Errorf(\"no message found: %s\", name)\n}\n\n// LookupEnum looks up an enum type by \"name\".\n// It tries to resolve \"name\" from \"location\" if \"name\" is a relative enum name.\nfunc (r *Registry) LookupEnum(location, name string) (*Enum, error) {\n\tif grpclog.V(1) {\n\t\tgrpclog.Infof(\"Lookup enum %s from %s\", name, location)\n\t}\n\tif strings.HasPrefix(name, \".\") {\n\t\te, ok := r.enums[name]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"no enum found: %s\", name)\n\t\t}\n\t\treturn e, nil\n\t}\n\n\tif !strings.HasPrefix(location, \".\") {\n\t\tlocation = fmt.Sprintf(\".%s\", location)\n\t}\n\tcomponents := strings.Split(location, \".\")\n\tfor len(components) > 0 {\n\t\tfqen := strings.Join(append(components, name), \".\")\n\t\tif e, ok := r.enums[fqen]; ok {\n\t\t\treturn e, nil\n\t\t}\n\t\tcomponents = components[:len(components)-1]\n\t}\n\treturn nil, fmt.Errorf(\"no enum found: %s\", name)\n}\n\n// LookupFile looks up a file by name.\nfunc (r *Registry) LookupFile(name string) (*File, error) {\n\tf, ok := r.files[name]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"no such file given: %s\", name)\n\t}\n\treturn f, nil\n}\n\nfunc (r *Registry) GetUseProto3FieldSemantics() bool {\n\treturn r.useProto3FieldSemantics\n}\n\nfunc (r *Registry) SetUseProto3FieldSemantics(useProto3FieldSemantics bool) {\n\tr.useProto3FieldSemantics = useProto3FieldSemantics\n}\n\n// LookupExternalHTTPRules looks up external http rules by fully qualified service method name\nfunc (r *Registry) LookupExternalHTTPRules(qualifiedMethodName string) []*annotations.HttpRule {\n\treturn r.externalHTTPRules[qualifiedMethodName]\n}\n\n// AddExternalHTTPRule adds an external http rule for the given fully qualified service method name\nfunc (r *Registry) AddExternalHTTPRule(qualifiedMethodName string, rule *annotations.HttpRule) {\n\tr.externalHTTPRules[qualifiedMethodName] = append(r.externalHTTPRules[qualifiedMethodName], rule)\n}\n\n// UnboundExternalHTTPRules returns the list of External HTTPRules\n// which does not have a matching method in the registry\nfunc (r *Registry) UnboundExternalHTTPRules() []string {\n\tallServiceMethods := make(map[string]struct{})\n\tfor _, f := range r.files {\n\t\tfor _, s := range f.GetService() {\n\t\t\tsvc := &Service{File: f, ServiceDescriptorProto: s}\n\t\t\tfor _, m := range s.GetMethod() {\n\t\t\t\tmethod := &Method{Service: svc, MethodDescriptorProto: m}\n\t\t\t\tallServiceMethods[method.FQMN()] = struct{}{}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar missingMethods []string\n\tfor httpRuleMethod := range r.externalHTTPRules {\n\t\tif _, ok := allServiceMethods[httpRuleMethod]; !ok {\n\t\t\tmissingMethods = append(missingMethods, httpRuleMethod)\n\t\t}\n\t}\n\treturn missingMethods\n}\n\n// AddPkgMap adds a mapping from a .proto file to proto package name.\nfunc (r *Registry) AddPkgMap(file, protoPkg string) {\n\tr.pkgMap[file] = protoPkg\n}\n\n// SetPrefix registers the prefix to be added to go package paths generated from proto package names.\nfunc (r *Registry) SetPrefix(prefix string) {\n\tr.prefix = prefix\n}\n\n// SetStandalone registers standalone flag to control package prefix\nfunc (r *Registry) SetStandalone(standalone bool) {\n\tr.standalone = standalone\n}\n\n// SetRecursiveDepth records the max recursion count\nfunc (r *Registry) SetRecursiveDepth(count int) {\n\tr.recursiveDepth = count\n}\n\n// GetRecursiveDepth returns the max recursion count\nfunc (r *Registry) GetRecursiveDepth() int {\n\treturn r.recursiveDepth\n}\n\n// ReserveGoPackageAlias reserves the unique alias of go package.\n// If succeeded, the alias will be never used for other packages in generated go files.\n// If failed, the alias is already taken by another package, so you need to use another\n// alias for the package in your go files.\nfunc (r *Registry) ReserveGoPackageAlias(alias, pkgpath string) error {\n\tif taken, ok := r.pkgAliases[alias]; ok {\n\t\tif taken == pkgpath {\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"package name %s is already taken. Use another alias\", alias)\n\t}\n\tr.pkgAliases[alias] = pkgpath\n\treturn nil\n}\n\n// GetAllFQMNs returns a list of all FQMNs\nfunc (r *Registry) GetAllFQMNs() []string {\n\tkeys := make([]string, 0, len(r.msgs))\n\tfor k := range r.msgs {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n\n// GetAllFQENs returns a list of all FQENs\nfunc (r *Registry) GetAllFQENs() []string {\n\tkeys := make([]string, 0, len(r.enums))\n\tfor k := range r.enums {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n\nfunc (r *Registry) GetAllFQMethNs() []string {\n\tkeys := make([]string, 0, len(r.meths))\n\tfor k := range r.meths {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n\n// SetAllowDeleteBody controls whether http delete methods may have a\n// body or fail loading if encountered.\nfunc (r *Registry) SetAllowDeleteBody(allow bool) {\n\tr.allowDeleteBody = allow\n}\n\n// SetAllowMerge controls whether generation one OpenAPI file out of multiple protos\nfunc (r *Registry) SetAllowMerge(allow bool) {\n\tr.allowMerge = allow\n}\n\n// IsAllowMerge whether generation one OpenAPI file out of multiple protos\nfunc (r *Registry) IsAllowMerge() bool {\n\treturn r.allowMerge\n}\n\n// SetMergeFileName controls the target OpenAPI file name out of multiple protos\nfunc (r *Registry) SetMergeFileName(mergeFileName string) {\n\tr.mergeFileName = mergeFileName\n}\n\n// SetIncludePackageInTags controls whether the package name defined in the `package` directive\n// in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation.\nfunc (r *Registry) SetIncludePackageInTags(allow bool) {\n\tr.includePackageInTags = allow\n}\n\n// IsIncludePackageInTags checks whether the package name defined in the `package` directive\n// in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation.\nfunc (r *Registry) IsIncludePackageInTags() bool {\n\treturn r.includePackageInTags\n}\n\n// GetRepeatedPathParamSeparator returns a rune specifying how\n// path parameter repeated fields are separated.\nfunc (r *Registry) GetRepeatedPathParamSeparator() rune {\n\treturn r.repeatedPathParamSeparator.sep\n}\n\n// GetRepeatedPathParamSeparatorName returns the name path parameter repeated\n// fields repeatedFieldSeparator. I.e. 'csv', 'pipe', 'ssv' or 'tsv'\nfunc (r *Registry) GetRepeatedPathParamSeparatorName() string {\n\treturn r.repeatedPathParamSeparator.name\n}\n\n// SetRepeatedPathParamSeparator sets how path parameter repeated fields are\n// separated. Allowed names are 'csv', 'pipe', 'ssv' and 'tsv'.\nfunc (r *Registry) SetRepeatedPathParamSeparator(name string) error {\n\tvar sep rune\n\tswitch name {\n\tcase \"csv\":\n\t\tsep = ','\n\tcase \"pipes\":\n\t\tsep = '|'\n\tcase \"ssv\":\n\t\tsep = ' '\n\tcase \"tsv\":\n\t\tsep = '\\t'\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown repeated path parameter separator: %s\", name)\n\t}\n\tr.repeatedPathParamSeparator = repeatedFieldSeparator{\n\t\tname: name,\n\t\tsep:  sep,\n\t}\n\treturn nil\n}\n\n// SetUseJSONNamesForFields sets useJSONNamesForFields\nfunc (r *Registry) SetUseJSONNamesForFields(use bool) {\n\tr.useJSONNamesForFields = use\n}\n\n// GetUseJSONNamesForFields returns useJSONNamesForFields\nfunc (r *Registry) GetUseJSONNamesForFields() bool {\n\treturn r.useJSONNamesForFields\n}\n\n// SetUseFQNForOpenAPIName sets useFQNForOpenAPIName\n// Deprecated: use SetOpenAPINamingStrategy instead.\nfunc (r *Registry) SetUseFQNForOpenAPIName(use bool) {\n\tr.openAPINamingStrategy = \"fqn\"\n}\n\n// GetUseFQNForOpenAPIName returns useFQNForOpenAPIName\n// Deprecated: Use GetOpenAPINamingStrategy().\nfunc (r *Registry) GetUseFQNForOpenAPIName() bool {\n\treturn r.openAPINamingStrategy == \"fqn\"\n}\n\n// GetMergeFileName return the target merge OpenAPI file name\nfunc (r *Registry) GetMergeFileName() string {\n\treturn r.mergeFileName\n}\n\n// SetOpenAPINamingStrategy sets the naming strategy to be used.\nfunc (r *Registry) SetOpenAPINamingStrategy(strategy string) {\n\tr.openAPINamingStrategy = strategy\n}\n\n// GetOpenAPINamingStrategy retrieves the naming strategy that is in use.\nfunc (r *Registry) GetOpenAPINamingStrategy() string {\n\treturn r.openAPINamingStrategy\n}\n\n// SetUseGoTemplate sets useGoTemplate\nfunc (r *Registry) SetUseGoTemplate(use bool) {\n\tr.useGoTemplate = use\n}\n\n// GetUseGoTemplate returns useGoTemplate\nfunc (r *Registry) GetUseGoTemplate() bool {\n\treturn r.useGoTemplate\n}\n\nfunc (r *Registry) SetGoTemplateArgs(kvs []string) {\n\tr.goTemplateArgs = make(map[string]string)\n\tfor _, kv := range kvs {\n\t\tif key, value, found := strings.Cut(kv, \"=\"); found {\n\t\t\tr.goTemplateArgs[key] = value\n\t\t}\n\t}\n}\n\nfunc (r *Registry) GetGoTemplateArgs() map[string]string {\n\treturn r.goTemplateArgs\n}\n\n// SetIgnoreComments sets ignoreComments\nfunc (r *Registry) SetIgnoreComments(ignore bool) {\n\tr.ignoreComments = ignore\n}\n\n// GetIgnoreComments returns ignoreComments\nfunc (r *Registry) GetIgnoreComments() bool {\n\treturn r.ignoreComments\n}\n\n// SetRemoveInternalComments sets removeInternalComments\nfunc (r *Registry) SetRemoveInternalComments(remove bool) {\n\tr.removeInternalComments = remove\n}\n\n// GetRemoveInternalComments returns removeInternalComments\nfunc (r *Registry) GetRemoveInternalComments() bool {\n\treturn r.removeInternalComments\n}\n\n// SetEnumsAsInts set enumsAsInts\nfunc (r *Registry) SetEnumsAsInts(enumsAsInts bool) {\n\tr.enumsAsInts = enumsAsInts\n}\n\n// GetEnumsAsInts returns enumsAsInts\nfunc (r *Registry) GetEnumsAsInts() bool {\n\treturn r.enumsAsInts\n}\n\n// SetOmitEnumDefaultValue sets omitEnumDefaultValue\nfunc (r *Registry) SetOmitEnumDefaultValue(omit bool) {\n\tr.omitEnumDefaultValue = omit\n}\n\n// GetOmitEnumDefaultValue returns omitEnumDefaultValue\nfunc (r *Registry) GetOmitEnumDefaultValue() bool {\n\treturn r.omitEnumDefaultValue\n}\n\n// SetVisibilityRestrictionSelectors sets the visibility restriction selectors.\nfunc (r *Registry) SetVisibilityRestrictionSelectors(selectors []string) {\n\tr.visibilityRestrictionSelectors = make(map[string]bool)\n\tfor _, selector := range selectors {\n\t\tr.visibilityRestrictionSelectors[strings.TrimSpace(selector)] = true\n\t}\n}\n\n// GetVisibilityRestrictionSelectors retrieves the visibility restriction selectors.\nfunc (r *Registry) GetVisibilityRestrictionSelectors() map[string]bool {\n\treturn r.visibilityRestrictionSelectors\n}\n\n// SetDisableDefaultErrors sets disableDefaultErrors\nfunc (r *Registry) SetDisableDefaultErrors(use bool) {\n\tr.disableDefaultErrors = use\n}\n\n// GetDisableDefaultErrors returns disableDefaultErrors\nfunc (r *Registry) GetDisableDefaultErrors() bool {\n\treturn r.disableDefaultErrors\n}\n\n// SetSimpleOperationIDs sets simpleOperationIDs\nfunc (r *Registry) SetSimpleOperationIDs(use bool) {\n\tr.simpleOperationIDs = use\n}\n\n// GetSimpleOperationIDs returns simpleOperationIDs\nfunc (r *Registry) GetSimpleOperationIDs() bool {\n\treturn r.simpleOperationIDs\n}\n\n// SetWarnOnUnboundMethods sets warnOnUnboundMethods\nfunc (r *Registry) SetWarnOnUnboundMethods(warn bool) {\n\tr.warnOnUnboundMethods = warn\n}\n\n// SetGenerateUnboundMethods sets generateUnboundMethods\nfunc (r *Registry) SetGenerateUnboundMethods(generate bool) {\n\tr.generateUnboundMethods = generate\n}\n\n// SetOmitPackageDoc controls whether the generated code contains a package comment (if set to false, it will contain one)\nfunc (r *Registry) SetOmitPackageDoc(omit bool) {\n\tr.omitPackageDoc = omit\n}\n\n// GetOmitPackageDoc returns whether a package comment will be omitted from the generated code\nfunc (r *Registry) GetOmitPackageDoc() bool {\n\treturn r.omitPackageDoc\n}\n\n// SetProto3OptionalNullable set proto3OptionalNullable\nfunc (r *Registry) SetProto3OptionalNullable(proto3OptionalNullable bool) {\n\tr.proto3OptionalNullable = proto3OptionalNullable\n}\n\n// GetProto3OptionalNullable returns proto3OptionalNullable\nfunc (r *Registry) GetProto3OptionalNullable() bool {\n\treturn r.proto3OptionalNullable\n}\n\n// RegisterOpenAPIOptions registers OpenAPI options\nfunc (r *Registry) RegisterOpenAPIOptions(opts *openapiconfig.OpenAPIOptions) error {\n\tif opts == nil {\n\t\treturn nil\n\t}\n\n\tfor _, opt := range opts.File {\n\t\tif _, ok := r.files[opt.File]; !ok {\n\t\t\treturn fmt.Errorf(\"no file %s found\", opt.File)\n\t\t}\n\t\tr.fileOptions[opt.File] = opt.Option\n\t}\n\n\t// build map of all registered methods\n\tmethods := make(map[string]struct{})\n\tservices := make(map[string]struct{})\n\tfor _, f := range r.files {\n\t\tfor _, s := range f.Services {\n\t\t\tservices[s.FQSN()] = struct{}{}\n\t\t\tfor _, m := range s.Methods {\n\t\t\t\tmethods[m.FQMN()] = struct{}{}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, opt := range opts.Method {\n\t\tqualifiedMethod := \".\" + opt.Method\n\t\tif _, ok := methods[qualifiedMethod]; !ok {\n\t\t\treturn fmt.Errorf(\"no method %s found\", opt.Method)\n\t\t}\n\t\tr.methodOptions[qualifiedMethod] = opt.Option\n\t}\n\n\tfor _, opt := range opts.Message {\n\t\tqualifiedMessage := \".\" + opt.Message\n\t\tif _, ok := r.msgs[qualifiedMessage]; !ok {\n\t\t\treturn fmt.Errorf(\"no message %s found\", opt.Message)\n\t\t}\n\t\tr.messageOptions[qualifiedMessage] = opt.Option\n\t}\n\n\tfor _, opt := range opts.Service {\n\t\tqualifiedService := \".\" + opt.Service\n\t\tif _, ok := services[qualifiedService]; !ok {\n\t\t\treturn fmt.Errorf(\"no service %s found\", opt.Service)\n\t\t}\n\t\tr.serviceOptions[qualifiedService] = opt.Option\n\t}\n\n\t// build map of all registered fields\n\tfields := make(map[string]struct{})\n\tfor _, m := range r.msgs {\n\t\tfor _, f := range m.Fields {\n\t\t\tfields[f.FQFN()] = struct{}{}\n\t\t}\n\t}\n\tfor _, opt := range opts.Field {\n\t\tqualifiedField := \".\" + opt.Field\n\t\tif _, ok := fields[qualifiedField]; !ok {\n\t\t\treturn fmt.Errorf(\"no field %s found\", opt.Field)\n\t\t}\n\t\tr.fieldOptions[qualifiedField] = opt.Option\n\t}\n\treturn nil\n}\n\n// GetOpenAPIFileOption returns a registered OpenAPI option for a file\nfunc (r *Registry) GetOpenAPIFileOption(file string) (*options.Swagger, bool) {\n\topt, ok := r.fileOptions[file]\n\treturn opt, ok\n}\n\n// GetOpenAPIMethodOption returns a registered OpenAPI option for a method\nfunc (r *Registry) GetOpenAPIMethodOption(qualifiedMethod string) (*options.Operation, bool) {\n\topt, ok := r.methodOptions[qualifiedMethod]\n\treturn opt, ok\n}\n\n// GetOpenAPIMessageOption returns a registered OpenAPI option for a message\nfunc (r *Registry) GetOpenAPIMessageOption(qualifiedMessage string) (*options.Schema, bool) {\n\topt, ok := r.messageOptions[qualifiedMessage]\n\treturn opt, ok\n}\n\n// GetOpenAPIServiceOption returns a registered OpenAPI option for a service\nfunc (r *Registry) GetOpenAPIServiceOption(qualifiedService string) (*options.Tag, bool) {\n\topt, ok := r.serviceOptions[qualifiedService]\n\treturn opt, ok\n}\n\n// GetOpenAPIFieldOption returns a registered OpenAPI option for a field\nfunc (r *Registry) GetOpenAPIFieldOption(qualifiedField string) (*options.JSONSchema, bool) {\n\topt, ok := r.fieldOptions[qualifiedField]\n\treturn opt, ok\n}\n\nfunc (r *Registry) FieldName(f *Field) string {\n\tif r.useJSONNamesForFields {\n\t\treturn f.GetJsonName()\n\t}\n\treturn f.GetName()\n}\n\nfunc (r *Registry) CheckDuplicateAnnotation(httpMethod string, httpTemplate string, svc *Service) error {\n\ta := annotationIdentifier{method: httpMethod, pathTemplate: httpTemplate, service: svc}\n\tif _, ok := r.annotationMap[a]; ok {\n\t\treturn fmt.Errorf(\"duplicate annotation: method=%s, template=%s\", httpMethod, httpTemplate)\n\t}\n\tr.annotationMap[a] = struct{}{}\n\treturn nil\n}\n\n// SetDisableServiceTags sets disableServiceTags\nfunc (r *Registry) SetDisableServiceTags(use bool) {\n\tr.disableServiceTags = use\n}\n\n// GetDisableServiceTags returns disableServiceTags\nfunc (r *Registry) GetDisableServiceTags() bool {\n\treturn r.disableServiceTags\n}\n\n// SetDisableDefaultResponses sets disableDefaultResponses\nfunc (r *Registry) SetDisableDefaultResponses(use bool) {\n\tr.disableDefaultResponses = use\n}\n\n// GetDisableDefaultResponses returns disableDefaultResponses\nfunc (r *Registry) GetDisableDefaultResponses() bool {\n\treturn r.disableDefaultResponses\n}\n\n// SetUseAllOfForRefs sets useAllOfForRefs\nfunc (r *Registry) SetUseAllOfForRefs(use bool) {\n\tr.useAllOfForRefs = use\n}\n\n// GetUseAllOfForRefs returns useAllOfForRefs\nfunc (r *Registry) GetUseAllOfForRefs() bool {\n\treturn r.useAllOfForRefs\n}\n\n// SetOmitArrayItemTypeWhenRefSibling sets omitArrayItemTypeWhenRefSibling\nfunc (r *Registry) SetOmitArrayItemTypeWhenRefSibling(omit bool) {\n\tr.omitArrayItemTypeWhenRefSibling = omit\n}\n\n// GetOmitArrayItemTypeWhenRefSibling returns omitArrayItemTypeWhenRefSibling\nfunc (r *Registry) GetOmitArrayItemTypeWhenRefSibling() bool {\n\treturn r.omitArrayItemTypeWhenRefSibling\n}\n\n// SetAllowPatchFeature sets allowPatchFeature\nfunc (r *Registry) SetAllowPatchFeature(allow bool) {\n\tr.allowPatchFeature = allow\n}\n\n// GetAllowPatchFeature returns allowPatchFeature\nfunc (r *Registry) GetAllowPatchFeature() bool {\n\treturn r.allowPatchFeature\n}\n\n// SetPreserveRPCOrder sets preserveRPCOrder\nfunc (r *Registry) SetPreserveRPCOrder(preserve bool) {\n\tr.preserveRPCOrder = preserve\n}\n\n// IsPreserveRPCOrder returns preserveRPCOrder\nfunc (r *Registry) IsPreserveRPCOrder() bool {\n\treturn r.preserveRPCOrder\n}\n\n// SetEnableRpcDeprecation sets enableRpcDeprecation\nfunc (r *Registry) SetEnableRpcDeprecation(enable bool) {\n\tr.enableRpcDeprecation = enable\n}\n\n// GetEnableRpcDeprecation returns enableRpcDeprecation\nfunc (r *Registry) GetEnableRpcDeprecation() bool {\n\treturn r.enableRpcDeprecation\n}\n\n// SetEnableFieldDeprecation sets enableFieldDeprecation\nfunc (r *Registry) SetEnableFieldDeprecation(enable bool) {\n\tr.enableFieldDeprecation = enable\n}\n\n// GetEnableFieldDeprecation returns enableFieldDeprecation\nfunc (r *Registry) GetEnableFieldDeprecation() bool {\n\treturn r.enableFieldDeprecation\n}\n\nfunc (r *Registry) SetExpandSlashedPathPatterns(expandSlashedPathPatterns bool) {\n\tr.expandSlashedPathPatterns = expandSlashedPathPatterns\n}\n\nfunc (r *Registry) GetExpandSlashedPathPatterns() bool {\n\treturn r.expandSlashedPathPatterns\n}\n\nfunc (r *Registry) SetGenerateXGoType(generateXGoType bool) {\n\tr.generateXGoType = generateXGoType\n}\n\nfunc (r *Registry) GetGenerateXGoType() bool {\n\treturn r.generateXGoType\n}\n"
  },
  {
    "path": "internal/descriptor/registry_test.go",
    "content": "package descriptor\n\nimport (\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig\"\n\t\"google.golang.org/protobuf/compiler/protogen\"\n\t\"google.golang.org/protobuf/encoding/prototext\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nfunc newGeneratorFromSources(req *pluginpb.CodeGeneratorRequest, sources ...string) (*protogen.Plugin, error) {\n\tfor _, src := range sources {\n\t\tvar fd descriptorpb.FileDescriptorProto\n\t\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treq.FileToGenerate = append(req.FileToGenerate, fd.GetName())\n\t\treq.ProtoFile = append(req.ProtoFile, &fd)\n\t}\n\treturn protogen.Options{}.New(req)\n}\n\nfunc loadFileWithCodeGeneratorRequest(t *testing.T, reg *Registry, req *pluginpb.CodeGeneratorRequest, sources ...string) []*descriptorpb.FileDescriptorProto {\n\tt.Helper()\n\tplugin, err := newGeneratorFromSources(req, sources...)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to create a generator: %v\", err)\n\t}\n\terr = reg.LoadFromPlugin(plugin)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to Registry.LoadFromPlugin(): %v\", err)\n\t}\n\treturn plugin.Request.ProtoFile\n}\n\nfunc loadFile(t *testing.T, reg *Registry, src string) *descriptorpb.FileDescriptorProto {\n\tt.Helper()\n\tfds := loadFileWithCodeGeneratorRequest(t, reg, &pluginpb.CodeGeneratorRequest{}, src)\n\treturn fds[0]\n}\n\nfunc TestLoadFile(t *testing.T) {\n\treg := NewRegistry()\n\tfd := loadFile(t, reg, `\n\t\tname: 'example.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t\tmessage_type <\n\t\t\tname: 'ExampleMessage'\n\t\t\tfield <\n\t\t\t\tname: 'str'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tnumber: 1\n\t\t\t>\n\t\t>\n\t`)\n\n\tfile := reg.files[\"example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example\", Name: \"example\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n\n\tmsg, err := reg.LookupMsg(\"\", \".example.ExampleMessage\")\n\tif err != nil {\n\t\tt.Errorf(\"reg.LookupMsg(%q, %q)) failed with %v; want success\", \"\", \".example.ExampleMessage\", err)\n\t\treturn\n\t}\n\tif got, want := msg.DescriptorProto, fd.MessageType[0]; got != want {\n\t\tt.Errorf(\"reg.lookupMsg(%q, %q).DescriptorProto = %#v; want %#v\", \"\", \".example.ExampleMessage\", got, want)\n\t}\n\tif got, want := msg.File, file; got != want {\n\t\tt.Errorf(\"msg.File = %v; want %v\", got, want)\n\t}\n\tif got := msg.Outers; got != nil {\n\t\tt.Errorf(\"msg.Outers = %v; want %v\", got, nil)\n\t}\n\tif got, want := len(msg.Fields), 1; got != want {\n\t\tt.Errorf(\"len(msg.Fields) = %d; want %d\", got, want)\n\t} else if got, want := msg.Fields[0].FieldDescriptorProto, fd.MessageType[0].Field[0]; got != want {\n\t\tt.Errorf(\"msg.Fields[0].FieldDescriptorProto = %v; want %v\", got, want)\n\t} else if got, want := msg.Fields[0].Message, msg; got != want {\n\t\tt.Errorf(\"msg.Fields[0].Message = %v; want %v\", got, want)\n\t}\n\n\tif got, want := len(file.Messages), 1; got != want {\n\t\tt.Errorf(\"file.Meeesages = %#v; want %#v\", file.Messages, []*Message{msg})\n\t}\n\tif got, want := file.Messages[0], msg; got != want {\n\t\tt.Errorf(\"file.Meeesages[0] = %v; want %v\", got, want)\n\t}\n}\n\nfunc TestLoadFileNestedPackage(t *testing.T) {\n\treg := NewRegistry()\n\tloadFile(t, reg, `\n\t\tname: 'example.proto'\n\t\tpackage: 'example.nested.nested2'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.nested.nested2' >\n\t`)\n\n\tfile := reg.files[\"example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.nested.nested2\", Name: \"example_nested_nested2\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\nfunc TestLoadFileWithDir(t *testing.T) {\n\treg := NewRegistry()\n\tloadFile(t, reg, `\n\t\tname: 'path/to/example.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t`)\n\n\tfile := reg.files[\"path/to/example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example\", Name: \"example\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\nfunc TestLoadFileWithoutPackage(t *testing.T) {\n\treg := NewRegistry()\n\tloadFile(t, reg, `\n\t\tname: 'path/to/example_file.proto'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example_file' >\n\t`)\n\n\tfile := reg.files[\"path/to/example_file.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example_file\", Name: \"example_file\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\nfunc TestLoadFileWithMapping(t *testing.T) {\n\treg := NewRegistry()\n\tloadFileWithCodeGeneratorRequest(t, reg, &pluginpb.CodeGeneratorRequest{\n\t\tParameter: proto.String(\"Mpath/to/example.proto=example.com/proj/example/proto\"),\n\t}, `\n\t\tname: 'path/to/example.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t`)\n\n\tfile := reg.files[\"path/to/example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"example.com/proj/example/proto\", Name: \"example\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\nfunc TestLoadFileWithPackageNameCollision(t *testing.T) {\n\treg := NewRegistry()\n\tloadFile(t, reg, `\n\t\tname: 'path/to/another.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t`)\n\tloadFile(t, reg, `\n\t\tname: 'path/to/example.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t`)\n\tif err := reg.ReserveGoPackageAlias(\"ioutil\", \"io/ioutil\"); err != nil {\n\t\tt.Fatalf(\"reg.ReserveGoPackageAlias(%q) failed with %v; want success\", \"ioutil\", err)\n\t}\n\tloadFile(t, reg, `\n\t\tname: 'path/to/ioutil.proto'\n\t\tpackage: 'ioutil'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/ioutil' >\n\t`)\n\n\tfile := reg.files[\"path/to/another.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"path/to/another.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example\", Name: \"example\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n\n\tfile = reg.files[\"path/to/example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"path/to/example.proto\")\n\t\treturn\n\t}\n\twantPkg = GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example\", Name: \"example\", Alias: \"\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n\n\tfile = reg.files[\"path/to/ioutil.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"path/to/ioutil.proto\")\n\t\treturn\n\t}\n\twantPkg = GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/ioutil\", Name: \"ioutil\", Alias: \"ioutil_0\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\nfunc TestLoadFileWithIdenticalGoPkg(t *testing.T) {\n\treg := NewRegistry()\n\tloadFileWithCodeGeneratorRequest(t, reg, &pluginpb.CodeGeneratorRequest{\n\t\tParameter: proto.String(\"Mpath/to/another.proto=example.com/example,Mpath/to/example.proto=example.com/example\"),\n\t}, `\n\t\tname: 'path/to/another.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t`, `\n\t\tname: 'path/to/example.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t`)\n\n\tfile := reg.files[\"path/to/example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"example.com/example\", Name: \"example\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n\n\tfile = reg.files[\"path/to/another.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg = GoPackage{Path: \"example.com/example\", Name: \"example\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\n// TestLookupMsgWithoutPackage tests a case when there is no \"package\" directive.\n// In Go, it is required to have a generated package so we rely on\n// google.golang.org/protobuf/compiler/protogen to provide it.\nfunc TestLookupMsgWithoutPackage(t *testing.T) {\n\treg := NewRegistry()\n\tfd := loadFile(t, reg, `\n\t\tname: 'example.proto'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t\tmessage_type <\n\t\t\tname: 'ExampleMessage'\n\t\t\tfield <\n\t\t\t\tname: 'str'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tnumber: 1\n\t\t\t>\n\t\t>\n\t`)\n\n\tmsg, err := reg.LookupMsg(\"\", \".ExampleMessage\")\n\tif err != nil {\n\t\tt.Errorf(\"reg.LookupMsg(%q, %q)) failed with %v; want success\", \"\", \".ExampleMessage\", err)\n\t\treturn\n\t}\n\tif got, want := msg.DescriptorProto, fd.MessageType[0]; got != want {\n\t\tt.Errorf(\"reg.lookupMsg(%q, %q).DescriptorProto = %#v; want %#v\", \"\", \".ExampleMessage\", got, want)\n\t}\n}\n\nfunc TestLookupMsgWithNestedPackage(t *testing.T) {\n\treg := NewRegistry()\n\tfd := loadFile(t, reg, `\n\t\tname: 'example.proto'\n\t\tpackage: 'nested.nested2.mypackage'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t\tmessage_type <\n\t\t\tname: 'ExampleMessage'\n\t\t\tfield <\n\t\t\t\tname: 'str'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tnumber: 1\n\t\t\t>\n\t\t>\n\t`)\n\n\tfor _, name := range []string{\n\t\t\"nested.nested2.mypackage.ExampleMessage\",\n\t\t\"nested2.mypackage.ExampleMessage\",\n\t\t\"mypackage.ExampleMessage\",\n\t\t\"ExampleMessage\",\n\t} {\n\t\tmsg, err := reg.LookupMsg(\"nested.nested2.mypackage\", name)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"reg.LookupMsg(%q, %q)) failed with %v; want success\", \".nested.nested2.mypackage\", name, err)\n\t\t\treturn\n\t\t}\n\t\tif got, want := msg.DescriptorProto, fd.MessageType[0]; got != want {\n\t\t\tt.Errorf(\"reg.lookupMsg(%q, %q).DescriptorProto = %#v; want %#v\", \".nested.nested2.mypackage\", name, got, want)\n\t\t}\n\t}\n\n\tfor _, loc := range []string{\n\t\t\".nested.nested2.mypackage\",\n\t\t\"nested.nested2.mypackage\",\n\t\t\".nested.nested2\",\n\t\t\"nested.nested2\",\n\t\t\".nested\",\n\t\t\"nested\",\n\t\t\".\",\n\t\t\"\",\n\t\t\"somewhere.else\",\n\t} {\n\t\tname := \"nested.nested2.mypackage.ExampleMessage\"\n\t\tmsg, err := reg.LookupMsg(loc, name)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"reg.LookupMsg(%q, %q)) failed with %v; want success\", loc, name, err)\n\t\t\treturn\n\t\t}\n\t\tif got, want := msg.DescriptorProto, fd.MessageType[0]; got != want {\n\t\t\tt.Errorf(\"reg.lookupMsg(%q, %q).DescriptorProto = %#v; want %#v\", loc, name, got, want)\n\t\t}\n\t}\n\n\tfor _, loc := range []string{\n\t\t\".nested.nested2.mypackage\",\n\t\t\"nested.nested2.mypackage\",\n\t\t\".nested.nested2\",\n\t\t\"nested.nested2\",\n\t\t\".nested\",\n\t\t\"nested\",\n\t} {\n\t\tname := \"nested2.mypackage.ExampleMessage\"\n\t\tmsg, err := reg.LookupMsg(loc, name)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"reg.LookupMsg(%q, %q)) failed with %v; want success\", loc, name, err)\n\t\t\treturn\n\t\t}\n\t\tif got, want := msg.DescriptorProto, fd.MessageType[0]; got != want {\n\t\t\tt.Errorf(\"reg.lookupMsg(%q, %q).DescriptorProto = %#v; want %#v\", loc, name, got, want)\n\t\t}\n\t}\n}\n\nfunc TestLoadWithInconsistentTargetPackage(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\treq        string\n\t\tconsistent bool\n\t}{\n\t\t// root package, explicit go package\n\t\t{\n\t\t\treq: `\n\t\t\t\tfile_to_generate: 'a.proto'\n\t\t\t\tfile_to_generate: 'b.proto'\n\t\t\t\tproto_file <\n\t\t\t\t\tname: 'a.proto'\n\t\t\t\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' >\n\t\t\t\t\tmessage_type < name: 'A' >\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"AService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Meth\"\n\t\t\t\t\t\t\tinput_type: \"A\"\n\t\t\t\t\t\t\toutput_type: \"A\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] < post: \"/v1/a\" body: \"*\" >\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t\tproto_file <\n\t\t\t\t\tname: 'b.proto'\n\t\t\t\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' >\n\t\t\t\t\tmessage_type < name: 'B' >\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"BService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Meth\"\n\t\t\t\t\t\t\tinput_type: \"B\"\n\t\t\t\t\t\t\toutput_type: \"B\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] < post: \"/v1/b\" body: \"*\" >\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tconsistent: true,\n\t\t},\n\t\t// named package, explicit go package\n\t\t{\n\t\t\treq: `\n\t\t\t\tfile_to_generate: 'a.proto'\n\t\t\t\tfile_to_generate: 'b.proto'\n\t\t\t\tproto_file <\n\t\t\t\t\tname: 'a.proto'\n\t\t\t\t\tpackage: 'example.foo'\n\t\t\t\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' >\n\t\t\t\t\tmessage_type < name: 'A' >\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"AService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Meth\"\n\t\t\t\t\t\t\tinput_type: \"A\"\n\t\t\t\t\t\t\toutput_type: \"A\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] < post: \"/v1/a\" body: \"*\" >\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t\tproto_file <\n\t\t\t\t\tname: 'b.proto'\n\t\t\t\t\tpackage: 'example.foo'\n\t\t\t\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' >\n\t\t\t\t\tmessage_type < name: 'B' >\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"BService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Meth\"\n\t\t\t\t\t\t\tinput_type: \"B\"\n\t\t\t\t\t\t\toutput_type: \"B\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] < post: \"/v1/b\" body: \"*\" >\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tconsistent: true,\n\t\t},\n\t} {\n\t\tvar req pluginpb.CodeGeneratorRequest\n\t\tif err := prototext.Unmarshal([]byte(spec.req), &req); err != nil {\n\t\t\tt.Fatalf(\"proto.UnmarshalText(%s, &file) failed with %v; want success\", spec.req, err)\n\t\t}\n\t\t_, err := newGeneratorFromSources(&req)\n\t\tif got, want := err == nil, spec.consistent; got != want {\n\t\t\tif want {\n\t\t\t\tt.Errorf(\"reg.Load(%s) failed with %v; want success\", spec.req, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt.Errorf(\"reg.Load(%s) succeeded; want an package inconsistency error\", spec.req)\n\t\t}\n\t}\n}\n\nfunc TestLoadOverriddenPackageName(t *testing.T) {\n\treg := NewRegistry()\n\tloadFile(t, reg, `\n\t\tname: 'example.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'example.com/xyz;pb' >\n\t`)\n\tfile := reg.files[\"example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"example.com/xyz\", Name: \"pb\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\nfunc TestLoadWithStandalone(t *testing.T) {\n\treg := NewRegistry()\n\treg.SetStandalone(true)\n\tloadFile(t, reg, `\n\t\tname: 'example.proto'\n\t\tpackage: 'example'\n\t\toptions < go_package: 'example.com/xyz;pb' >\n\t`)\n\tfile := reg.files[\"example.proto\"]\n\tif file == nil {\n\t\tt.Errorf(\"reg.files[%q] = nil; want non-nil\", \"example.proto\")\n\t\treturn\n\t}\n\twantPkg := GoPackage{Path: \"example.com/xyz\", Name: \"pb\", Alias: \"extPb\"}\n\tif got, want := file.GoPkg, wantPkg; got != want {\n\t\tt.Errorf(\"file.GoPkg = %#v; want %#v\", got, want)\n\t}\n}\n\nfunc TestUnboundExternalHTTPRules(t *testing.T) {\n\treg := NewRegistry()\n\tmethodName := \".example.ExampleService.Echo\"\n\treg.AddExternalHTTPRule(methodName, nil)\n\tassertStringSlice(t, \"unbound external HTTP rules\", reg.UnboundExternalHTTPRules(), []string{methodName})\n\tloadFile(t, reg, `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t\tmessage_type <\n\t\t\tname: \"StringMessage\"\n\t\t\tfield <\n\t\t\t\tname: \"string\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t>\n\t\t>\n\t`)\n\tassertStringSlice(t, \"unbound external HTTP rules\", reg.UnboundExternalHTTPRules(), []string{})\n}\n\nfunc TestRegisterOpenAPIOptions(t *testing.T) {\n\tcodeReqText := `file_to_generate: 'a.proto'\n\tproto_file <\n\t\tname: 'a.proto'\n\t\tpackage: 'example.foo'\n\t\toptions < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' >\n\t\tmessage_type <\n\t\t\tname: 'ExampleMessage'\n\t\t\tfield <\n\t\t\t\tname: 'str'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tnumber: 1\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"AService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Meth\"\n\t\t\t\tinput_type: \"ExampleMessage\"\n\t\t\t\toutput_type: \"ExampleMessage\"\n\t\t\t\toptions <\n\t\t\t\t\t[google.api.http] < post: \"/v1/a\" body: \"*\" >\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t>\n\t`\n\tvar codeReq pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(codeReqText), &codeReq); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &file) failed with %v; want success\", codeReqText, err)\n\t}\n\n\tfor _, tcase := range []struct {\n\t\toptions   *openapiconfig.OpenAPIOptions\n\t\tshouldErr bool\n\t\tdesc      string\n\t}{\n\t\t{\n\t\t\tdesc: \"handle nil options\",\n\t\t},\n\t\t{\n\t\t\tdesc: \"successfully add options if referenced entity exists\",\n\t\t\toptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tFile: []*openapiconfig.OpenAPIFileOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tFile: \"a.proto\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMethod: []*openapiconfig.OpenAPIMethodOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethod: \"example.foo.AService.Meth\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMessage: []*openapiconfig.OpenAPIMessageOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMessage: \"example.foo.ExampleMessage\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tService: []*openapiconfig.OpenAPIServiceOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tService: \"example.foo.AService\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField: \"example.foo.ExampleMessage.str\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdesc: \"reject fully qualified names with leading \\\".\\\"\",\n\t\t\toptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tFile: []*openapiconfig.OpenAPIFileOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tFile: \"a.proto\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMethod: []*openapiconfig.OpenAPIMethodOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethod: \".example.foo.AService.Meth\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMessage: []*openapiconfig.OpenAPIMessageOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMessage: \".example.foo.ExampleMessage\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tService: []*openapiconfig.OpenAPIServiceOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tService: \".example.foo.AService\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField: \".example.foo.ExampleMessage.str\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tshouldErr: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"error if file does not exist\",\n\t\t\toptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tFile: []*openapiconfig.OpenAPIFileOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tFile: \"b.proto\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tshouldErr: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"error if method does not exist\",\n\t\t\toptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tMethod: []*openapiconfig.OpenAPIMethodOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethod: \"example.foo.AService.Meth2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tshouldErr: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"error if message does not exist\",\n\t\t\toptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tMessage: []*openapiconfig.OpenAPIMessageOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMessage: \"example.foo.NonexistentMessage\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tshouldErr: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"error if service does not exist\",\n\t\t\toptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tService: []*openapiconfig.OpenAPIServiceOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tService: \"example.foo.AService1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tshouldErr: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"error if field does not exist\",\n\t\t\toptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField: \"example.foo.ExampleMessage.str1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tshouldErr: true,\n\t\t},\n\t} {\n\t\tt.Run(tcase.desc, func(t *testing.T) {\n\t\t\treg := NewRegistry()\n\t\t\tloadFileWithCodeGeneratorRequest(t, reg, &codeReq)\n\t\t\terr := reg.RegisterOpenAPIOptions(tcase.options)\n\t\t\tif (err != nil) != tcase.shouldErr {\n\t\t\t\tt.Fatalf(\"got unexpected error: %s\", err)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc assertStringSlice(t *testing.T, message string, got, want []string) {\n\tif len(got) != len(want) {\n\t\tt.Errorf(\"%s = %#v len(%d); want %#v len(%d)\", message, got, len(got), want, len(want))\n\t}\n\tfor i := range want {\n\t\tif got[i] != want[i] {\n\t\t\tt.Errorf(\"%s[%d] = %#v; want %#v\", message, i, got[i], want[i])\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "internal/descriptor/services.go",
    "content": "package descriptor\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule\"\n\toptions \"google.golang.org/genproto/googleapis/api/annotations\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n)\n\n// loadServices registers services and their methods from \"targetFile\" to \"r\".\n// It must be called after loadFile is called for all files so that loadServices\n// can resolve names of message types and their fields.\nfunc (r *Registry) loadServices(file *File) error {\n\tif grpclog.V(1) {\n\t\tgrpclog.Infof(\"Loading services from %s\", file.GetName())\n\t}\n\tvar svcs []*Service\n\tfor _, sd := range file.GetService() {\n\t\tif grpclog.V(2) {\n\t\t\tgrpclog.Infof(\"Registering %s\", sd.GetName())\n\t\t}\n\t\tsvc := &Service{\n\t\t\tFile:                   file,\n\t\t\tServiceDescriptorProto: sd,\n\t\t\tForcePrefixedName:      r.standalone,\n\t\t}\n\t\tfor _, md := range sd.GetMethod() {\n\t\t\tif grpclog.V(2) {\n\t\t\t\tgrpclog.Infof(\"Processing %s.%s\", sd.GetName(), md.GetName())\n\t\t\t}\n\t\t\topts, err := extractAPIOptions(md)\n\t\t\tif err != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to extract HttpRule from %s.%s: %v\", svc.GetName(), md.GetName(), err)\n\t\t\t\treturn err\n\t\t\t}\n\t\t\toptsList := r.LookupExternalHTTPRules((&Method{Service: svc, MethodDescriptorProto: md}).FQMN())\n\t\t\tif opts != nil {\n\t\t\t\toptsList = append(optsList, opts)\n\t\t\t}\n\t\t\tif len(optsList) == 0 {\n\t\t\t\tif r.generateUnboundMethods {\n\t\t\t\t\tdefaultOpts, err := defaultAPIOptions(svc, md)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tgrpclog.Errorf(\"Failed to generate default HttpRule from %s.%s: %v\", svc.GetName(), md.GetName(), err)\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\toptsList = append(optsList, defaultOpts)\n\t\t\t\t} else {\n\t\t\t\t\tif grpclog.V(1) {\n\t\t\t\t\t\tlogFn := grpclog.Infof\n\t\t\t\t\t\tif r.warnOnUnboundMethods {\n\t\t\t\t\t\t\tlogFn = grpclog.Warningf\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlogFn(\"No HttpRule found for method: %s.%s\", svc.GetName(), md.GetName())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmeth, err := r.newMethod(svc, md, optsList)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tsvc.Methods = append(svc.Methods, meth)\n\t\t\tr.meths[meth.FQMN()] = meth\n\t\t}\n\t\tif len(svc.Methods) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif grpclog.V(2) {\n\t\t\tgrpclog.Infof(\"Registered %s with %d method(s)\", svc.GetName(), len(svc.Methods))\n\t\t}\n\t\tsvcs = append(svcs, svc)\n\t}\n\tfile.Services = svcs\n\treturn nil\n}\n\nfunc (r *Registry) newMethod(svc *Service, md *descriptorpb.MethodDescriptorProto, optsList []*options.HttpRule) (*Method, error) {\n\trequestType, err := r.LookupMsg(svc.File.GetPackage(), md.GetInputType())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresponseType, err := r.LookupMsg(svc.File.GetPackage(), md.GetOutputType())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmeth := &Method{\n\t\tService:               svc,\n\t\tMethodDescriptorProto: md,\n\t\tRequestType:           requestType,\n\t\tResponseType:          responseType,\n\t}\n\n\tnewBinding := func(opts *options.HttpRule, idx int) (*Binding, error) {\n\t\tvar (\n\t\t\thttpMethod   string\n\t\t\tpathTemplate string\n\t\t)\n\t\tswitch {\n\t\tcase opts.GetGet() != \"\":\n\t\t\thttpMethod = \"GET\"\n\t\t\tpathTemplate = opts.GetGet()\n\t\t\tif opts.Body != \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"must not set request body when http method is GET: %s\", md.GetName())\n\t\t\t}\n\n\t\tcase opts.GetPut() != \"\":\n\t\t\thttpMethod = \"PUT\"\n\t\t\tpathTemplate = opts.GetPut()\n\n\t\tcase opts.GetPost() != \"\":\n\t\t\thttpMethod = \"POST\"\n\t\t\tpathTemplate = opts.GetPost()\n\n\t\tcase opts.GetDelete() != \"\":\n\t\t\thttpMethod = \"DELETE\"\n\t\t\tpathTemplate = opts.GetDelete()\n\t\t\tif opts.Body != \"\" && !r.allowDeleteBody {\n\t\t\t\treturn nil, fmt.Errorf(\"must not set request body when http method is DELETE except allow_delete_body option is true: %s\", md.GetName())\n\t\t\t}\n\n\t\tcase opts.GetPatch() != \"\":\n\t\t\thttpMethod = \"PATCH\"\n\t\t\tpathTemplate = opts.GetPatch()\n\n\t\tcase opts.GetCustom() != nil:\n\t\t\tcustom := opts.GetCustom()\n\t\t\thttpMethod = custom.Kind\n\t\t\tpathTemplate = custom.Path\n\n\t\tdefault:\n\t\t\tif grpclog.V(1) {\n\t\t\t\tgrpclog.Infof(\"No pattern specified in google.api.HttpRule: %s\", md.GetName())\n\t\t\t}\n\t\t\treturn nil, nil\n\t\t}\n\n\t\tparsed, err := httprule.Parse(pathTemplate)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttmpl := parsed.Compile()\n\n\t\tif md.GetClientStreaming() && len(tmpl.Fields) > 0 {\n\t\t\treturn nil, errors.New(\"cannot use path parameter in client streaming\")\n\t\t}\n\n\t\tb := &Binding{\n\t\t\tMethod:     meth,\n\t\t\tIndex:      idx,\n\t\t\tPathTmpl:   tmpl,\n\t\t\tHTTPMethod: httpMethod,\n\t\t}\n\n\t\tfor _, f := range tmpl.Fields {\n\t\t\tparam, err := r.newParam(meth, f)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb.PathParams = append(b.PathParams, param)\n\t\t}\n\n\t\t// TODO(yugui) Handle query params\n\n\t\tb.Body, err = r.newBody(meth, opts.Body)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tb.ResponseBody, err = r.newResponse(meth, opts.ResponseBody)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn b, nil\n\t}\n\n\tapplyOpts := func(opts *options.HttpRule) error {\n\t\tb, err := newBinding(opts, len(meth.Bindings))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif b != nil {\n\t\t\tmeth.Bindings = append(meth.Bindings, b)\n\t\t}\n\t\tfor _, additional := range opts.GetAdditionalBindings() {\n\t\t\tif len(additional.AdditionalBindings) > 0 {\n\t\t\t\treturn fmt.Errorf(\"additional_binding in additional_binding not allowed: %s.%s\", svc.GetName(), meth.GetName())\n\t\t\t}\n\t\t\tb, err := newBinding(additional, len(meth.Bindings))\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tmeth.Bindings = append(meth.Bindings, b)\n\t\t}\n\n\t\treturn nil\n\t}\n\n\tfor _, opts := range optsList {\n\t\tif err := applyOpts(opts); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn meth, nil\n}\n\nfunc extractAPIOptions(meth *descriptorpb.MethodDescriptorProto) (*options.HttpRule, error) {\n\tif meth.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(meth.Options, options.E_Http) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(meth.Options, options.E_Http)\n\topts, ok := ext.(*options.HttpRule)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want an HttpRule\", ext)\n\t}\n\treturn opts, nil\n}\n\nfunc defaultAPIOptions(svc *Service, md *descriptorpb.MethodDescriptorProto) (*options.HttpRule, error) {\n\t// FQSN prefixes the service's full name with a '.', e.g.: '.example.ExampleService'\n\tfqsn := strings.TrimPrefix(svc.FQSN(), \".\")\n\n\t// This generates an HttpRule that matches the gRPC mapping to HTTP/2 described in\n\t// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests\n\t// i.e.:\n\t//   * method is POST\n\t//   * path is \"/<service name>/<method name>\"\n\t//   * body should contain the serialized request message\n\trule := &options.HttpRule{\n\t\tPattern: &options.HttpRule_Post{\n\t\t\tPost: fmt.Sprintf(\"/%s/%s\", fqsn, md.GetName()),\n\t\t},\n\t\tBody: \"*\",\n\t}\n\treturn rule, nil\n}\n\nfunc (r *Registry) newParam(meth *Method, path string) (Parameter, error) {\n\tmsg := meth.RequestType\n\tfields, err := r.resolveFieldPath(msg, path, true)\n\tif err != nil {\n\t\treturn Parameter{}, err\n\t}\n\tl := len(fields)\n\tif l == 0 {\n\t\treturn Parameter{}, fmt.Errorf(\"invalid field access list for %s\", path)\n\t}\n\ttarget := fields[l-1].Target\n\tswitch target.GetType() {\n\tcase descriptorpb.FieldDescriptorProto_TYPE_MESSAGE, descriptorpb.FieldDescriptorProto_TYPE_GROUP:\n\t\tif grpclog.V(2) {\n\t\t\tgrpclog.Infoln(\"found aggregate type:\", target, target.TypeName)\n\t\t}\n\t\tif IsWellKnownType(*target.TypeName) {\n\t\t\tif grpclog.V(2) {\n\t\t\t\tgrpclog.Infoln(\"found well known aggregate type:\", target)\n\t\t\t}\n\t\t} else {\n\t\t\treturn Parameter{}, fmt.Errorf(\"%s.%s: %s is a protobuf message type. Protobuf message types cannot be used as path parameters, use a scalar value type (such as string) instead\", meth.Service.GetName(), meth.GetName(), path)\n\t\t}\n\t}\n\treturn Parameter{\n\t\tFieldPath: FieldPath(fields),\n\t\tMethod:    meth,\n\t\tTarget:    fields[l-1].Target,\n\t}, nil\n}\n\nfunc (r *Registry) newBody(meth *Method, path string) (*Body, error) {\n\tswitch path {\n\tcase \"\":\n\t\treturn nil, nil\n\tcase \"*\":\n\t\treturn &Body{FieldPath: nil}, nil\n\t}\n\tmsg := meth.RequestType\n\tfields, err := r.resolveFieldPath(msg, path, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Body{FieldPath: FieldPath(fields)}, nil\n}\n\nfunc (r *Registry) newResponse(meth *Method, path string) (*Body, error) {\n\tmsg := meth.ResponseType\n\tswitch path {\n\tcase \"\", \"*\":\n\t\treturn nil, nil\n\t}\n\tfields, err := r.resolveFieldPath(msg, path, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Body{FieldPath: FieldPath(fields)}, nil\n}\n\n// lookupField looks up a field named \"name\" within \"msg\".\n// It returns nil if no such field found.\nfunc lookupField(msg *Message, name string) *Field {\n\tfor _, f := range msg.Fields {\n\t\tif f.GetName() == name {\n\t\t\treturn f\n\t\t}\n\t}\n\treturn nil\n}\n\n// resolveFieldPath resolves \"path\" into a list of fieldDescriptor, starting from \"msg\".\nfunc (r *Registry) resolveFieldPath(msg *Message, path string, isPathParam bool) ([]FieldPathComponent, error) {\n\tif path == \"\" {\n\t\treturn nil, nil\n\t}\n\n\troot := msg\n\tvar result []FieldPathComponent\n\tfor i, c := range strings.Split(path, \".\") {\n\t\tif i > 0 {\n\t\t\tf := result[i-1].Target\n\t\t\tswitch f.GetType() {\n\t\t\tcase descriptorpb.FieldDescriptorProto_TYPE_MESSAGE, descriptorpb.FieldDescriptorProto_TYPE_GROUP:\n\t\t\t\tvar err error\n\t\t\t\tmsg, err = r.LookupMsg(msg.FQMN(), f.GetTypeName())\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"not an aggregate type: %s in %s\", f.GetName(), path)\n\t\t\t}\n\t\t}\n\n\t\tif grpclog.V(2) {\n\t\t\tgrpclog.Infof(\"Lookup %s in %s\", c, msg.FQMN())\n\t\t}\n\t\tf := lookupField(msg, c)\n\t\tif f == nil {\n\t\t\treturn nil, fmt.Errorf(\"no field %q found in %s\", path, root.GetName())\n\t\t}\n\t\tresult = append(result, FieldPathComponent{Name: c, Target: f})\n\t}\n\treturn result, nil\n}\n"
  },
  {
    "path": "internal/descriptor/services_test.go",
    "content": "package descriptor\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule\"\n\t\"google.golang.org/protobuf/compiler/protogen\"\n\t\"google.golang.org/protobuf/encoding/prototext\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n)\n\nfunc compilePath(t *testing.T, path string) httprule.Template {\n\tparsed, err := httprule.Parse(path)\n\tif err != nil {\n\t\tt.Fatalf(\"httprule.Parse(%q) failed with %v; want success\", path, err)\n\t}\n\treturn parsed.Compile()\n}\n\nfunc testExtractServices(t *testing.T, input []*descriptorpb.FileDescriptorProto, target string, wantSvcs []*Service) {\n\ttestExtractServicesWithRegistry(t, NewRegistry(), input, target, wantSvcs)\n}\n\nfunc testExtractServicesWithRegistry(t *testing.T, reg *Registry, input []*descriptorpb.FileDescriptorProto, target string, wantSvcs []*Service) {\n\tfor _, file := range input {\n\t\treg.loadFile(file.GetName(), &protogen.File{\n\t\t\tProto: file,\n\t\t})\n\t}\n\terr := reg.loadServices(reg.files[target])\n\tif err != nil {\n\t\tt.Errorf(\"loadServices(%q) failed with %v; want success; files=%v\", target, err, input)\n\t}\n\n\tfile := reg.files[target]\n\tsvcs := file.Services\n\tvar i int\n\tfor i = 0; i < len(svcs) && i < len(wantSvcs); i++ {\n\t\tsvc, wantSvc := svcs[i], wantSvcs[i]\n\t\tif got, want := svc.ServiceDescriptorProto, wantSvc.ServiceDescriptorProto; !proto.Equal(got, want) {\n\t\t\tt.Errorf(\"svcs[%d].ServiceDescriptorProto = %v; want %v; input = %v\", i, got, want, input)\n\t\t\tcontinue\n\t\t}\n\t\tvar j int\n\t\tfor j = 0; j < len(svc.Methods) && j < len(wantSvc.Methods); j++ {\n\t\t\tmeth, wantMeth := svc.Methods[j], wantSvc.Methods[j]\n\t\t\tif got, want := meth.MethodDescriptorProto, wantMeth.MethodDescriptorProto; !proto.Equal(got, want) {\n\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].MethodDescriptorProto = %v; want %v; input = %v\", i, j, got, want, input)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif got, want := meth.RequestType, wantMeth.RequestType; got.FQMN() != want.FQMN() {\n\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].RequestType = %s; want %s; input = %v\", i, j, got.FQMN(), want.FQMN(), input)\n\t\t\t}\n\t\t\tif got, want := meth.ResponseType, wantMeth.ResponseType; got.FQMN() != want.FQMN() {\n\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].ResponseType = %s; want %s; input = %v\", i, j, got.FQMN(), want.FQMN(), input)\n\t\t\t}\n\t\t\tvar k int\n\t\t\tfor k = 0; k < len(meth.Bindings) && k < len(wantMeth.Bindings); k++ {\n\t\t\t\tbinding, wantBinding := meth.Bindings[k], wantMeth.Bindings[k]\n\t\t\t\tif got, want := binding.Index, wantBinding.Index; got != want {\n\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].Index = %d; want %d; input = %v\", i, j, k, got, want, input)\n\t\t\t\t}\n\t\t\t\tif got, want := binding.PathTmpl, wantBinding.PathTmpl; !reflect.DeepEqual(got, want) {\n\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].PathTmpl = %#v; want %#v; input = %v\", i, j, k, got, want, input)\n\t\t\t\t}\n\t\t\t\tif got, want := binding.HTTPMethod, wantBinding.HTTPMethod; got != want {\n\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].HTTPMethod = %q; want %q; input = %v\", i, j, k, got, want, input)\n\t\t\t\t}\n\n\t\t\t\tvar l int\n\t\t\t\tfor l = 0; l < len(binding.PathParams) && l < len(wantBinding.PathParams); l++ {\n\t\t\t\t\tparam, wantParam := binding.PathParams[l], wantBinding.PathParams[l]\n\t\t\t\t\tif got, want := param.FieldPath.String(), wantParam.FieldPath.String(); got != want {\n\t\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].PathParams[%d].FieldPath.String() = %q; want %q; input = %v\", i, j, k, l, got, want, input)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfor m := 0; m < len(param.FieldPath) && m < len(wantParam.FieldPath); m++ {\n\t\t\t\t\t\tfield, wantField := param.FieldPath[m].Target, wantParam.FieldPath[m].Target\n\t\t\t\t\t\tif got, want := field.FieldDescriptorProto, wantField.FieldDescriptorProto; !proto.Equal(got, want) {\n\t\t\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].PathParams[%d].FieldPath[%d].Target.FieldDescriptorProto = %v; want %v; input = %v\", i, j, k, l, m, got, want, input)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor ; l < len(binding.PathParams); l++ {\n\t\t\t\t\tgot := binding.PathParams[l].FieldPath.String()\n\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].PathParams[%d] = %q; want it to be missing; input = %v\", i, j, k, l, got, input)\n\t\t\t\t}\n\t\t\t\tfor ; l < len(wantBinding.PathParams); l++ {\n\t\t\t\t\twant := wantBinding.PathParams[l].FieldPath.String()\n\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].PathParams[%d] missing; want %q; input = %v\", i, j, k, l, want, input)\n\t\t\t\t}\n\n\t\t\t\tif got, want := (binding.Body != nil), (wantBinding.Body != nil); got != want {\n\t\t\t\t\tif got {\n\t\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].Body = %q; want it to be missing; input = %v\", i, j, k, binding.Body.FieldPath.String(), input)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].Body missing; want %q; input = %v\", i, j, k, wantBinding.Body.FieldPath.String(), input)\n\t\t\t\t\t}\n\t\t\t\t} else if binding.Body != nil {\n\t\t\t\t\tif got, want := binding.Body.FieldPath.String(), wantBinding.Body.FieldPath.String(); got != want {\n\t\t\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d].Body = %q; want %q; input = %v\", i, j, k, got, want, input)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor ; k < len(meth.Bindings); k++ {\n\t\t\t\tgot := meth.Bindings[k]\n\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d] = %v; want it to be missing; input = %v\", i, j, k, got, input)\n\t\t\t}\n\t\t\tfor ; k < len(wantMeth.Bindings); k++ {\n\t\t\t\twant := wantMeth.Bindings[k]\n\t\t\t\tt.Errorf(\"svcs[%d].Methods[%d].Bindings[%d] missing; want %v; input = %v\", i, j, k, want, input)\n\t\t\t}\n\t\t}\n\t\tfor ; j < len(svc.Methods); j++ {\n\t\t\tgot := svc.Methods[j].MethodDescriptorProto\n\t\t\tt.Errorf(\"svcs[%d].Methods[%d] = %v; want it to be missing; input = %v\", i, j, got, input)\n\t\t}\n\t\tfor ; j < len(wantSvc.Methods); j++ {\n\t\t\twant := wantSvc.Methods[j].MethodDescriptorProto\n\t\t\tt.Errorf(\"svcs[%d].Methods[%d] missing; want %v; input = %v\", i, j, want, input)\n\t\t}\n\t}\n\tfor ; i < len(svcs); i++ {\n\t\tgot := svcs[i].ServiceDescriptorProto\n\t\tt.Errorf(\"svcs[%d] = %v; want it to be missing; input = %v\", i, got, input)\n\t}\n\tfor ; i < len(wantSvcs); i++ {\n\t\twant := wantSvcs[i].ServiceDescriptorProto\n\t\tt.Errorf(\"svcs[%d] missing; want %v; input = %v\", i, want, input)\n\t}\n}\n\nfunc crossLinkFixture(f *File) *File {\n\tfor _, m := range f.Messages {\n\t\tm.File = f\n\t\tfor _, f := range m.Fields {\n\t\t\tf.Message = m\n\t\t}\n\t}\n\tfor _, svc := range f.Services {\n\t\tsvc.File = f\n\t\tfor _, m := range svc.Methods {\n\t\t\tm.Service = svc\n\t\t\tfor _, b := range m.Bindings {\n\t\t\t\tb.Method = m\n\t\t\t\tfor _, param := range b.PathParams {\n\t\t\t\t\tparam.Method = m\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfor _, e := range f.Enums {\n\t\te.File = f\n\t}\n\treturn f\n}\n\nfunc TestExtractServicesSimple(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"StringMessage\"\n\t\t\tfield <\n\t\t\t\tname: \"string\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\toptions <\n\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\tpost: \"/v1/example/echo\"\n\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\tmsg := &Message{\n\t\tDescriptorProto: fd.MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fd.MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tfile := &File{\n\t\tFileDescriptorProto: &fd,\n\t\tGoPkg: GoPackage{\n\t\t\tPath: \"path/to/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*Message{msg},\n\t\tServices: []*Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: fd.Service[0],\n\t\t\t\tMethods: []*Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: fd.Service[0].Method[0],\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v1/example/echo\"),\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody:       &Body{FieldPath: nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcrossLinkFixture(file)\n\ttestExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, \"path/to/example.proto\", file.Services)\n}\n\nfunc TestExtractServicesWithoutAnnotation(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"StringMessage\"\n\t\t\tfield <\n\t\t\t\tname: \"string\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\tmsg := &Message{\n\t\tDescriptorProto: fd.MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fd.MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tfile := &File{\n\t\tFileDescriptorProto: &fd,\n\t\tGoPkg: GoPackage{\n\t\t\tPath: \"path/to/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*Message{msg},\n\t\tServices: []*Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: fd.Service[0],\n\t\t\t\tMethods: []*Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: fd.Service[0].Method[0],\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcrossLinkFixture(file)\n\ttestExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, \"path/to/example.proto\", file.Services)\n}\n\nfunc TestExtractServicesGenerateUnboundMethods(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"StringMessage\"\n\t\t\tfield <\n\t\t\t\tname: \"string\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"prototext.Unmarshal (%s, &fd) failed with %v; want success\", src, err)\n\t}\n\tmsg := &Message{\n\t\tDescriptorProto: fd.MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fd.MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tfile := &File{\n\t\tFileDescriptorProto: &fd,\n\t\tGoPkg: GoPackage{\n\t\t\tPath: \"path/to/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*Message{msg},\n\t\tServices: []*Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: fd.Service[0],\n\t\t\t\tMethods: []*Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: fd.Service[0].Method[0],\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/example.ExampleService/Echo\"),\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody:       &Body{FieldPath: nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcrossLinkFixture(file)\n\treg := NewRegistry()\n\treg.SetGenerateUnboundMethods(true)\n\ttestExtractServicesWithRegistry(t, reg, []*descriptorpb.FileDescriptorProto{&fd}, \"path/to/example.proto\", file.Services)\n}\n\nfunc TestExtractServicesCrossPackage(t *testing.T) {\n\tsrcs := []string{\n\t\t`\n\t\t\tname: \"path/to/example.proto\",\n\t\t\tpackage: \"example\"\n\t\t\tmessage_type <\n\t\t\t\tname: \"StringMessage\"\n\t\t\t\tfield <\n\t\t\t\t\tname: \"string\"\n\t\t\t\t\tnumber: 1\n\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t>\n\t\t\t>\n\t\t\tservice <\n\t\t\t\tname: \"ExampleService\"\n\t\t\t\tmethod <\n\t\t\t\t\tname: \"ToString\"\n\t\t\t\t\tinput_type: \".another.example.BoolMessage\"\n\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\toptions <\n\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\tpost: \"/v1/example/to_s\"\n\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t>\n\t\t`, `\n\t\t\tname: \"path/to/another/example.proto\",\n\t\t\tpackage: \"another.example\"\n\t\t\tmessage_type <\n\t\t\t\tname: \"BoolMessage\"\n\t\t\t\tfield <\n\t\t\t\t\tname: \"bool\"\n\t\t\t\t\tnumber: 1\n\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\ttype: TYPE_BOOL\n\t\t\t\t>\n\t\t\t>\n\t\t`,\n\t}\n\tvar fds []*descriptorpb.FileDescriptorProto\n\tfor _, src := range srcs {\n\t\tvar fd descriptorpb.FileDescriptorProto\n\t\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\t\tt.Fatalf(\"prototext.Unmarshal(%s, &fd) failed with %v; want success\", src, err)\n\t\t}\n\t\tfds = append(fds, &fd)\n\t}\n\tstringMsg := &Message{\n\t\tDescriptorProto: fds[0].MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fds[0].MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tboolMsg := &Message{\n\t\tDescriptorProto: fds[1].MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fds[1].MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tfiles := []*File{\n\t\t{\n\t\t\tFileDescriptorProto: fds[0],\n\t\t\tGoPkg: GoPackage{\n\t\t\t\tPath: \"path/to/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*Message{stringMsg},\n\t\t\tServices: []*Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: fds[0].Service[0],\n\t\t\t\t\tMethods: []*Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: fds[0].Service[0].Method[0],\n\t\t\t\t\t\t\tRequestType:           boolMsg,\n\t\t\t\t\t\t\tResponseType:          stringMsg,\n\t\t\t\t\t\t\tBindings: []*Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v1/example/to_s\"),\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\t\tBody:       &Body{FieldPath: nil},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tFileDescriptorProto: fds[1],\n\t\t\tGoPkg: GoPackage{\n\t\t\t\tPath: \"path/to/another/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*Message{boolMsg},\n\t\t},\n\t}\n\n\tfor _, file := range files {\n\t\tcrossLinkFixture(file)\n\t}\n\ttestExtractServices(t, fds, \"path/to/example.proto\", files[0].Services)\n}\n\nfunc TestExtractServicesWithBodyPath(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"OuterMessage\"\n\t\t\tnested_type <\n\t\t\t\tname: \"StringMessage\"\n\t\t\t\tfield <\n\t\t\t\t\tname: \"string\"\n\t\t\t\t\tnumber: 1\n\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t>\n\t\t\t>\n\t\t\tfield <\n\t\t\t\tname: \"nested\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: \"StringMessage\"\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"OuterMessage\"\n\t\t\t\toutput_type: \"OuterMessage\"\n\t\t\t\toptions <\n\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\tpost: \"/v1/example/echo\"\n\t\t\t\t\t\tbody: \"nested\"\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\tmsg := &Message{\n\t\tDescriptorProto: fd.MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fd.MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tfile := &File{\n\t\tFileDescriptorProto: &fd,\n\t\tGoPkg: GoPackage{\n\t\t\tPath: \"path/to/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*Message{msg},\n\t\tServices: []*Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: fd.Service[0],\n\t\t\t\tMethods: []*Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: fd.Service[0].Method[0],\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v1/example/echo\"),\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody: &Body{\n\t\t\t\t\t\t\t\t\tFieldPath: FieldPath{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: msg.Fields[0],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcrossLinkFixture(file)\n\ttestExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, \"path/to/example.proto\", file.Services)\n}\n\nfunc TestExtractServicesWithPathParam(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"StringMessage\"\n\t\t\tfield <\n\t\t\t\tname: \"string\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\toptions <\n\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\tget: \"/v1/example/echo/{string=*}\"\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\tmsg := &Message{\n\t\tDescriptorProto: fd.MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fd.MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tfile := &File{\n\t\tFileDescriptorProto: &fd,\n\t\tGoPkg: GoPackage{\n\t\t\tPath: \"path/to/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*Message{msg},\n\t\tServices: []*Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: fd.Service[0],\n\t\t\t\tMethods: []*Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: fd.Service[0].Method[0],\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v1/example/echo/{string=*}\"),\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathParams: []Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: msg.Fields[0],\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tTarget: msg.Fields[0],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcrossLinkFixture(file)\n\ttestExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, \"path/to/example.proto\", file.Services)\n}\n\nfunc TestExtractServicesWithAdditionalBinding(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"StringMessage\"\n\t\t\tfield <\n\t\t\t\tname: \"string\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\toptions <\n\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\tpost: \"/v1/example/echo\"\n\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\tadditional_bindings <\n\t\t\t\t\t\t\tget: \"/v1/example/echo/{string}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\tadditional_bindings <\n\t\t\t\t\t\t\tpost: \"/v2/example/echo\"\n\t\t\t\t\t\t\tbody: \"string\"\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\tmsg := &Message{\n\t\tDescriptorProto: fd.MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{\n\t\t\t\tFieldDescriptorProto: fd.MessageType[0].Field[0],\n\t\t\t},\n\t\t},\n\t}\n\tfile := &File{\n\t\tFileDescriptorProto: &fd,\n\t\tGoPkg: GoPackage{\n\t\t\tPath: \"path/to/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*Message{msg},\n\t\tServices: []*Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: fd.Service[0],\n\t\t\t\tMethods: []*Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: fd.Service[0].Method[0],\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tIndex:      0,\n\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v1/example/echo\"),\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody:       &Body{FieldPath: nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tIndex:      1,\n\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v1/example/echo/{string}\"),\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathParams: []Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: msg.Fields[0],\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tTarget: msg.Fields[0],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: nil,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tIndex:      2,\n\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v2/example/echo\"),\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody: &Body{\n\t\t\t\t\t\t\t\t\tFieldPath: FieldPath{\n\t\t\t\t\t\t\t\t\t\tFieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"string\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: msg.Fields[0],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcrossLinkFixture(file)\n\ttestExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, \"path/to/example.proto\", file.Services)\n}\n\nfunc TestExtractServicesWithError(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\ttarget string\n\t\tsrcs   []string\n\t}{\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t// message not found\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Echo\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tpost: \"/v1/example/echo\"\n\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// body field path not resolved\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{`\n\t\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\t\tmessage_type <\n\t\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t\tservice <\n\t\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\t\tname: \"Echo\"\n\t\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\t\tpost: \"/v1/example/echo\"\n\t\t\t\t\t\t\t\t\t\tbody: \"bool\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>`,\n\t\t\t},\n\t\t},\n\t\t// param field path not resolved\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Echo\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tpost: \"/v1/example/echo/{bool=*}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// non aggregate type on field path\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"OuterMessage\"\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"mid\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t>\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"bool\"\n\t\t\t\t\t\t\tnumber: 2\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_BOOL\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Echo\"\n\t\t\t\t\t\t\tinput_type: \"OuterMessage\"\n\t\t\t\t\t\t\toutput_type: \"OuterMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tpost: \"/v1/example/echo/{mid.bool=*}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// path param in client streaming\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Echo\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tpost: \"/v1/example/echo/{bool=*}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclient_streaming: true\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// body for GET\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Echo\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tget: \"/v1/example/echo\"\n\t\t\t\t\t\t\t\t\tbody: \"string\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// body for DELETE\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"RemoveResource\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tdelete: \"/v1/example/resource\"\n\t\t\t\t\t\t\t\t\tbody: \"string\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// no pattern specified\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"RemoveResource\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tbody: \"string\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// unsupported path parameter type\n\t\t{\n\t\t\ttarget: \"path/to/example.proto\",\n\t\t\tsrcs: []string{`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"OuterMessage\"\n\t\t\t\t\t\tnested_type <\n\t\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\t\tname: \"value\"\n\t\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\t\t\ttype_name: \"StringMessage\"\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"Echo\"\n\t\t\t\t\t\t\tinput_type: \"OuterMessage\"\n\t\t\t\t\t\t\toutput_type: \"OuterMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tget: \"/v1/example/echo/{string=*}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t} {\n\t\treg := NewRegistry()\n\n\t\tfor _, src := range spec.srcs {\n\t\t\tvar fd descriptorpb.FileDescriptorProto\n\t\t\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\t\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t\t\t}\n\t\t\treg.loadFile(spec.target, &protogen.File{\n\t\t\t\tProto: &fd,\n\t\t\t})\n\t\t}\n\t\terr := reg.loadServices(reg.files[spec.target])\n\t\tif err == nil {\n\t\t\tt.Errorf(\"loadServices(%q) succeeded; want an error; files=%v\", spec.target, spec.srcs)\n\t\t}\n\t\tt.Log(err)\n\t}\n}\n\nfunc TestResolveFieldPath(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tsrc     string\n\t\tpath    string\n\t\twantErr bool\n\t}{\n\t\t{\n\t\t\tsrc: `\n\t\t\t\tname: 'example.proto'\n\t\t\t\tpackage: 'example'\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'ExampleMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'string'\n\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tpath:    \"string\",\n\t\t\twantErr: false,\n\t\t},\n\t\t// no such field\n\t\t{\n\t\t\tsrc: `\n\t\t\t\tname: 'example.proto'\n\t\t\t\tpackage: 'example'\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'ExampleMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'string'\n\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tpath:    \"something_else\",\n\t\t\twantErr: true,\n\t\t},\n\t\t// repeated field\n\t\t{\n\t\t\tsrc: `\n\t\t\t\tname: 'example.proto'\n\t\t\t\tpackage: 'example'\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'ExampleMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'string'\n\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\tlabel: LABEL_REPEATED\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tpath:    \"string\",\n\t\t\twantErr: false,\n\t\t},\n\t\t// nested field\n\t\t{\n\t\t\tsrc: `\n\t\t\t\tname: 'example.proto'\n\t\t\t\tpackage: 'example'\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'ExampleMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'nested'\n\t\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\t\ttype_name: 'AnotherMessage'\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'terminal'\n\t\t\t\t\t\ttype: TYPE_BOOL\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 2\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'AnotherMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'nested2'\n\t\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\t\ttype_name: 'ExampleMessage'\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tpath:    \"nested.nested2.nested.nested2.nested.nested2.terminal\",\n\t\t\twantErr: false,\n\t\t},\n\t\t// non aggregate field on the path\n\t\t{\n\t\t\tsrc: `\n\t\t\t\tname: 'example.proto'\n\t\t\t\tpackage: 'example'\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'ExampleMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'nested'\n\t\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\t\ttype_name: 'AnotherMessage'\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'terminal'\n\t\t\t\t\t\ttype: TYPE_BOOL\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 2\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'AnotherMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'nested2'\n\t\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\t\ttype_name: 'ExampleMessage'\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tpath:    \"nested.terminal.nested2\",\n\t\t\twantErr: true,\n\t\t},\n\t\t// repeated field\n\t\t{\n\t\t\tsrc: `\n\t\t\t\tname: 'example.proto'\n\t\t\t\tpackage: 'example'\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'ExampleMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'nested'\n\t\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\t\ttype_name: 'AnotherMessage'\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'terminal'\n\t\t\t\t\t\ttype: TYPE_BOOL\n\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\tnumber: 2\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t\tmessage_type <\n\t\t\t\t\tname: 'AnotherMessage'\n\t\t\t\t\tfield <\n\t\t\t\t\t\tname: 'nested2'\n\t\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\t\ttype_name: 'ExampleMessage'\n\t\t\t\t\t\tlabel: LABEL_REPEATED\n\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t`,\n\t\t\tpath:    \"nested.nested2.terminal\",\n\t\t\twantErr: false,\n\t\t},\n\t} {\n\t\tvar file descriptorpb.FileDescriptorProto\n\t\tif err := prototext.Unmarshal([]byte(spec.src), &file); err != nil {\n\t\t\tt.Fatalf(\"proto.Unmarshal(%s) failed with %v; want success\", spec.src, err)\n\t\t}\n\t\treg := NewRegistry()\n\t\treg.loadFile(file.GetName(), &protogen.File{\n\t\t\tProto: &file,\n\t\t})\n\t\tf, err := reg.LookupFile(file.GetName())\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"reg.LookupFile(%q) failed with %v; want success; on file=%s\", file.GetName(), err, spec.src)\n\t\t}\n\t\t_, err = reg.resolveFieldPath(f.Messages[0], spec.path, false)\n\t\tif got, want := err != nil, spec.wantErr; got != want {\n\t\t\tif want {\n\t\t\t\tt.Errorf(\"reg.resolveFiledPath(%q, %q) succeeded; want an error\", f.Messages[0].GetName(), spec.path)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt.Errorf(\"reg.resolveFiledPath(%q, %q) failed with %v; want success\", f.Messages[0].GetName(), spec.path, err)\n\t\t}\n\t}\n}\n\nfunc TestExtractServicesWithDeleteBody(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tallowDeleteBody bool\n\t\texpectErr       bool\n\t\ttarget          string\n\t\tsrcs            []string\n\t}{\n\t\t// body for DELETE, but registry configured to allow it\n\t\t{\n\t\t\tallowDeleteBody: true,\n\t\t\texpectErr:       false,\n\t\t\ttarget:          \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"RemoveResource\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tdelete: \"/v1/example/resource\"\n\t\t\t\t\t\t\t\t\tbody: \"string\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t\t// body for DELETE, registry configured not to allow it\n\t\t{\n\t\t\tallowDeleteBody: false,\n\t\t\texpectErr:       true,\n\t\t\ttarget:          \"path/to/example.proto\",\n\t\t\tsrcs: []string{\n\t\t\t\t`\n\t\t\t\t\tname: \"path/to/example.proto\",\n\t\t\t\t\tpackage: \"example\"\n\t\t\t\t\tmessage_type <\n\t\t\t\t\t\tname: \"StringMessage\"\n\t\t\t\t\t\tfield <\n\t\t\t\t\t\t\tname: \"string\"\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t\t\t\ttype: TYPE_STRING\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\tservice <\n\t\t\t\t\t\tname: \"ExampleService\"\n\t\t\t\t\t\tmethod <\n\t\t\t\t\t\t\tname: \"RemoveResource\"\n\t\t\t\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\t\t\t\toptions <\n\t\t\t\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\t\t\t\tdelete: \"/v1/example/resource\"\n\t\t\t\t\t\t\t\t\tbody: \"string\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t`,\n\t\t\t},\n\t\t},\n\t} {\n\t\treg := NewRegistry()\n\t\treg.SetAllowDeleteBody(spec.allowDeleteBody)\n\n\t\tfor _, src := range spec.srcs {\n\t\t\tvar fd descriptorpb.FileDescriptorProto\n\t\t\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\t\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t\t\t}\n\t\t\treg.loadFile(fd.GetName(), &protogen.File{\n\t\t\t\tProto: &fd,\n\t\t\t})\n\t\t}\n\t\terr := reg.loadServices(reg.files[spec.target])\n\t\tif spec.expectErr && err == nil {\n\t\t\tt.Errorf(\"loadServices(%q) succeeded; want an error; allowDeleteBody=%v, files=%v\", spec.target, spec.allowDeleteBody, spec.srcs)\n\t\t}\n\t\tif !spec.expectErr && err != nil {\n\t\t\tt.Errorf(\"loadServices(%q) failed; do not want an error; allowDeleteBody=%v, files=%v\", spec.target, spec.allowDeleteBody, spec.srcs)\n\t\t}\n\t\tt.Log(err)\n\t}\n}\n\nfunc TestCauseErrorWithPathParam(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\",\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"TypeMessage\"\n\t\t\tfield <\n\t\t\t\t\tname: \"message\"\n\t\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\t\ttype_name: 'ExampleMessage'\n\t\t\t\t\tnumber: 1,\n\t\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"TypeMessage\"\n\t\t\t\toutput_type: \"TypeMessage\"\n\t\t\t\toptions <\n\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\tget: \"/v1/example/echo/{message=*}\"\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\ttarget := \"path/to/example.proto\"\n\treg := NewRegistry()\n\tinput := []*descriptorpb.FileDescriptorProto{&fd}\n\treg.loadFile(fd.GetName(), &protogen.File{\n\t\tProto: &fd,\n\t})\n\t// switch this field to see the error\n\twantErr := true\n\terr := reg.loadServices(reg.files[target])\n\tif got, want := err != nil, wantErr; got != want {\n\t\tif want {\n\t\t\tt.Errorf(\"loadServices(%q, %q) succeeded; want an error\", target, input)\n\t\t}\n\t\tt.Errorf(\"loadServices(%q, %q) failed with %v; want success\", target, input, err)\n\t}\n}\n\nfunc TestOptionalProto3URLPathMappingSuccess(t *testing.T) {\n\tsrc := `\n\t\tname: \"path/to/example.proto\"\n\t\tpackage: \"example\"\n\t\tmessage_type <\n\t\t\tname: \"StringMessage\"\n\t\t\tfield <\n\t\t\t\tname: \"field1\"\n\t\t\t\tnumber: 1\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tproto3_optional: true\n\t\t\t>\n\t\t>\n\t\tservice <\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod <\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \"StringMessage\"\n\t\t\t\toutput_type: \"StringMessage\"\n\t\t\t\toptions <\n\t\t\t\t\t[google.api.http] <\n\t\t\t\t\t\tget: \"/v1/example/echo/{field1=*}\"\n\t\t\t\t\t>\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t`\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\ttarget := \"path/to/example.proto\"\n\treg := NewRegistry()\n\tinput := []*descriptorpb.FileDescriptorProto{&fd}\n\treg.loadFile(fd.GetName(), &protogen.File{\n\t\tProto: &fd,\n\t})\n\terr := reg.loadServices(reg.files[target])\n\tif err != nil {\n\t\tt.Errorf(\"loadServices(%q, %q) failed with %v; want success\", target, input, err)\n\t}\n}\n"
  },
  {
    "path": "internal/descriptor/types.go",
    "content": "package descriptor\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\n// IsWellKnownType returns true if the provided fully qualified type name is considered 'well-known'.\nfunc IsWellKnownType(typeName string) bool {\n\t_, ok := wellKnownTypeConv[typeName]\n\treturn ok\n}\n\n// GoPackage represents a golang package.\ntype GoPackage struct {\n\t// Path is the package path to the package.\n\tPath string\n\t// Name is the package name of the package\n\tName string\n\t// Alias is an alias of the package unique within the current invocation of gRPC-Gateway generator.\n\tAlias string\n}\n\n// Standard returns whether the import is a golang standard package.\nfunc (p GoPackage) Standard() bool {\n\treturn !strings.Contains(p.Path, \".\")\n}\n\n// String returns a string representation of this package in the form of import line in golang.\nfunc (p GoPackage) String() string {\n\tif p.Alias == \"\" {\n\t\treturn fmt.Sprintf(\"%q\", p.Path)\n\t}\n\treturn fmt.Sprintf(\"%s %q\", p.Alias, p.Path)\n}\n\n// ResponseFile wraps pluginpb.CodeGeneratorResponse_File.\ntype ResponseFile struct {\n\t*pluginpb.CodeGeneratorResponse_File\n\t// GoPkg is the Go package of the generated file.\n\tGoPkg GoPackage\n}\n\n// File wraps descriptorpb.FileDescriptorProto for richer features.\ntype File struct {\n\t*descriptorpb.FileDescriptorProto\n\t// GoPkg is the go package of the go file generated from this file.\n\tGoPkg GoPackage\n\t// GeneratedFilenamePrefix is used to construct filenames for generated\n\t// files associated with this source file.\n\t//\n\t// For example, the source file \"dir/foo.proto\" might have a filename prefix\n\t// of \"dir/foo\". Appending \".pb.go\" produces an output file of \"dir/foo.pb.go\".\n\tGeneratedFilenamePrefix string\n\t// Messages is the list of messages defined in this file.\n\tMessages []*Message\n\t// Enums is the list of enums defined in this file.\n\tEnums []*Enum\n\t// Services is the list of services defined in this file.\n\tServices []*Service\n}\n\n// Pkg returns package name or alias if it's present\nfunc (f *File) Pkg() string {\n\tpkg := f.GoPkg.Name\n\tif alias := f.GoPkg.Alias; alias != \"\" {\n\t\tpkg = alias\n\t}\n\treturn pkg\n}\n\n// proto2 determines if the syntax of the file is proto2.\nfunc (f *File) proto2() bool {\n\treturn f.Syntax == nil || f.GetSyntax() == \"proto2\"\n}\n\n// Message describes a protocol buffer message types.\ntype Message struct {\n\t*descriptorpb.DescriptorProto\n\t// File is the file where the message is defined.\n\tFile *File\n\t// Outers is a list of outer messages if this message is a nested type.\n\tOuters []string\n\t// Fields is a list of message fields.\n\tFields []*Field\n\t// Index is proto path index of this message in File.\n\tIndex int\n\t// ForcePrefixedName when set to true, prefixes a type with a package prefix.\n\tForcePrefixedName bool\n}\n\n// FQMN returns a fully qualified message name of this message.\nfunc (m *Message) FQMN() string {\n\tcomponents := []string{\"\"}\n\tif m.File.Package != nil {\n\t\tcomponents = append(components, m.File.GetPackage())\n\t}\n\tcomponents = append(components, m.Outers...)\n\tcomponents = append(components, m.GetName())\n\treturn strings.Join(components, \".\")\n}\n\n// GoType returns a go type name for the message type.\n// It prefixes the type name with the package alias if\n// its belonging package is not \"currentPackage\".\nfunc (m *Message) GoType(currentPackage string) string {\n\tname := goTypeName(m.Outers, m.GetName())\n\tif !m.ForcePrefixedName && m.File.GoPkg.Path == currentPackage {\n\t\treturn name\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", m.File.Pkg(), name)\n}\n\n// Enum describes a protocol buffer enum types.\ntype Enum struct {\n\t*descriptorpb.EnumDescriptorProto\n\t// File is the file where the enum is defined\n\tFile *File\n\t// Outers is a list of outer messages if this enum is a nested type.\n\tOuters []string\n\t// Index is a enum index value.\n\tIndex int\n\t// ForcePrefixedName when set to true, prefixes a type with a package prefix.\n\tForcePrefixedName bool\n}\n\n// FQEN returns a fully qualified enum name of this enum.\nfunc (e *Enum) FQEN() string {\n\tcomponents := []string{\"\"}\n\tif e.File.Package != nil {\n\t\tcomponents = append(components, e.File.GetPackage())\n\t}\n\tcomponents = append(components, e.Outers...)\n\tcomponents = append(components, e.GetName())\n\treturn strings.Join(components, \".\")\n}\n\n// GoType returns a go type name for the enum type.\n// It prefixes the type name with the package alias if\n// its belonging package is not \"currentPackage\".\nfunc (e *Enum) GoType(currentPackage string) string {\n\tname := goTypeName(e.Outers, e.GetName())\n\tif !e.ForcePrefixedName && e.File.GoPkg.Path == currentPackage {\n\t\treturn name\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", e.File.Pkg(), name)\n}\n\nfunc goTypeName(outers []string, name string) string {\n\tcomponents := make([]string, 0, len(outers)+1)\n\tfor _, outer := range outers {\n\t\tcomponents = append(components, casing.Camel(outer))\n\t}\n\n\tcomponents = append(components, casing.Camel(name))\n\treturn strings.Join(components, \"_\")\n}\n\n// Service wraps descriptorpb.ServiceDescriptorProto for richer features.\ntype Service struct {\n\t*descriptorpb.ServiceDescriptorProto\n\t// File is the file where this service is defined.\n\tFile *File\n\t// Methods is the list of methods defined in this service.\n\tMethods []*Method\n\t// ForcePrefixedName when set to true, prefixes a type with a package prefix.\n\tForcePrefixedName bool\n}\n\n// FQSN returns the fully qualified service name of this service.\nfunc (s *Service) FQSN() string {\n\tcomponents := []string{\"\"}\n\tif s.File.Package != nil {\n\t\tcomponents = append(components, s.File.GetPackage())\n\t}\n\tcomponents = append(components, s.GetName())\n\treturn strings.Join(components, \".\")\n}\n\n// InstanceName returns object name of the service with package prefix if needed\nfunc (s *Service) InstanceName() string {\n\tif !s.ForcePrefixedName {\n\t\treturn s.GetName()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", s.File.Pkg(), s.GetName())\n}\n\n// ClientConstructorName returns name of the Client constructor with package prefix if needed\nfunc (s *Service) ClientConstructorName() string {\n\tconstructor := \"New\" + s.GetName() + \"Client\"\n\tif !s.ForcePrefixedName {\n\t\treturn constructor\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", s.File.Pkg(), constructor)\n}\n\n// Method wraps descriptorpb.MethodDescriptorProto for richer features.\ntype Method struct {\n\t*descriptorpb.MethodDescriptorProto\n\t// Service is the service which this method belongs to.\n\tService *Service\n\t// RequestType is the message type of requests to this method.\n\tRequestType *Message\n\t// ResponseType is the message type of responses from this method.\n\tResponseType *Message\n\tBindings     []*Binding\n}\n\n// FQMN returns a fully qualified rpc method name of this method.\nfunc (m *Method) FQMN() string {\n\tvar components []string\n\tcomponents = append(components, m.Service.FQSN())\n\tcomponents = append(components, m.GetName())\n\treturn strings.Join(components, \".\")\n}\n\n// Binding describes how an HTTP endpoint is bound to a gRPC method.\ntype Binding struct {\n\t// Method is the method which the endpoint is bound to.\n\tMethod *Method\n\t// Index is a zero-origin index of the binding in the target method\n\tIndex int\n\t// PathTmpl is path template where this method is mapped to.\n\tPathTmpl httprule.Template\n\t// HTTPMethod is the HTTP method which this method is mapped to.\n\tHTTPMethod string\n\t// PathParams is the list of parameters provided in HTTP request paths.\n\tPathParams []Parameter\n\t// Body describes parameters provided in HTTP request body.\n\tBody *Body\n\t// ResponseBody describes field in response struct to marshal in HTTP response body.\n\tResponseBody *Body\n}\n\n// ExplicitParams returns a list of explicitly bound parameters of \"b\",\n// i.e. a union of field path for body and field paths for path parameters.\nfunc (b *Binding) ExplicitParams() []string {\n\tvar result []string\n\tif b.Body != nil {\n\t\tresult = append(result, b.Body.FieldPath.String())\n\t}\n\tfor _, p := range b.PathParams {\n\t\tresult = append(result, p.FieldPath.String())\n\t}\n\treturn result\n}\n\n// Field wraps descriptorpb.FieldDescriptorProto for richer features.\ntype Field struct {\n\t*descriptorpb.FieldDescriptorProto\n\t// Message is the message type which this field belongs to.\n\tMessage *Message\n\t// FieldMessage is the message type of the field.\n\tFieldMessage *Message\n\t// ForcePrefixedName when set to true, prefixes a type with a package prefix.\n\tForcePrefixedName bool\n}\n\n// FQFN returns a fully qualified field name of this field.\nfunc (f *Field) FQFN() string {\n\treturn strings.Join([]string{f.Message.FQMN(), f.GetName()}, \".\")\n}\n\n// Parameter is a parameter provided in http requests\ntype Parameter struct {\n\t// FieldPath is a path to a proto field which this parameter is mapped to.\n\tFieldPath\n\t// Target is the proto field which this parameter is mapped to.\n\tTarget *Field\n\t// Method is the method which this parameter is used for.\n\tMethod *Method\n}\n\n// ConvertFuncExpr returns a go expression of a converter function.\n// The converter function converts a string into a value for the parameter.\nfunc (p Parameter) ConvertFuncExpr() (string, error) {\n\ttbl := proto3ConvertFuncs\n\tif !p.IsProto2() && p.IsRepeated() {\n\t\ttbl = proto3RepeatedConvertFuncs\n\t} else if !p.IsProto2() && p.IsOptionalProto3() {\n\t\ttbl = proto3OptionalConvertFuncs\n\t} else if p.IsProto2() && !p.IsRepeated() {\n\t\ttbl = proto2ConvertFuncs\n\t} else if p.IsProto2() && p.IsRepeated() {\n\t\ttbl = proto2RepeatedConvertFuncs\n\t}\n\ttyp := p.Target.GetType()\n\tconv, ok := tbl[typ]\n\tif !ok {\n\t\tconv, ok = wellKnownTypeConv[p.Target.GetTypeName()]\n\t}\n\tif !ok {\n\t\treturn \"\", fmt.Errorf(\"unsupported field type %s of parameter %s in %s.%s\", typ, p.FieldPath, p.Method.Service.GetName(), p.Method.GetName())\n\t}\n\treturn conv, nil\n}\n\n// IsEnum returns true if the field is an enum type, otherwise false is returned.\nfunc (p Parameter) IsEnum() bool {\n\treturn p.Target.GetType() == descriptorpb.FieldDescriptorProto_TYPE_ENUM\n}\n\n// IsRepeated returns true if the field is repeated, otherwise false is returned.\nfunc (p Parameter) IsRepeated() bool {\n\treturn p.Target.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED\n}\n\n// IsProto2 returns true if the field is proto2, otherwise false is returned.\nfunc (p Parameter) IsProto2() bool {\n\treturn p.Target.Message.File.proto2()\n}\n\n// Body describes a http (request|response) body to be sent to the (method|client).\n// This is used in body and response_body options in google.api.HttpRule\ntype Body struct {\n\t// FieldPath is a path to a proto field which the (request|response) body is mapped to.\n\t// The (request|response) body is mapped to the (request|response) type itself if FieldPath is empty.\n\tFieldPath FieldPath\n}\n\n// AssignableExpr returns an assignable expression in Go to be used to initialize method request object.\n// It starts with \"msgExpr\", which is the go expression of the method request object.\nfunc (b Body) AssignableExpr(msgExpr string, currentPackage string) string {\n\treturn b.FieldPath.AssignableExpr(msgExpr, currentPackage)\n}\n\n// AssignableExprPrep returns preparatory statements for an assignable expression to initialize the\n// method request object.\nfunc (b Body) AssignableExprPrep(msgExpr string, currentPackage string) string {\n\treturn b.FieldPath.AssignableExprPrep(msgExpr, currentPackage)\n}\n\n// FieldPath is a path to a field from a request message.\ntype FieldPath []FieldPathComponent\n\n// String returns a string representation of the field path.\nfunc (p FieldPath) String() string {\n\tcomponents := make([]string, 0, len(p))\n\tfor _, c := range p {\n\t\tcomponents = append(components, c.Name)\n\t}\n\treturn strings.Join(components, \".\")\n}\n\n// IsNestedProto3 indicates whether the FieldPath is a nested Proto3 path.\nfunc (p FieldPath) IsNestedProto3() bool {\n\tif len(p) > 1 && !p[0].Target.Message.File.proto2() {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// IsOptionalProto3 indicates whether the FieldPath is a proto3 optional field.\nfunc (p FieldPath) IsOptionalProto3() bool {\n\tif len(p) == 0 {\n\t\treturn false\n\t}\n\treturn p[0].Target.GetProto3Optional()\n}\n\n// AssignableExpr is an assignable expression in Go to be used to assign a value to the target field.\n// It starts with \"msgExpr\", which is the go expression of the method request object. Before using\n// such an expression the prep statements must be emitted first, in case the field path includes\n// a oneof. See FieldPath.AssignableExprPrep.\nfunc (p FieldPath) AssignableExpr(msgExpr string, currentPackage string) string {\n\tl := len(p)\n\tif l == 0 {\n\t\treturn msgExpr\n\t}\n\n\tcomponents := msgExpr\n\tfor i, c := range p {\n\t\t// We need to check if the target is not proto3_optional first.\n\t\t// Under the hood, proto3_optional uses oneof to signal to old proto3 clients\n\t\t// that presence is tracked for this field. This oneof is known as a \"synthetic\" oneof.\n\t\tif !c.Target.GetProto3Optional() && c.Target.OneofIndex != nil {\n\t\t\tindex := c.Target.OneofIndex\n\t\t\tmsg := c.Target.Message\n\t\t\toneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName())\n\t\t\toneofFieldName := msg.GoType(currentPackage) + \"_\" + c.AssignableExpr()\n\n\t\t\tif c.Target.ForcePrefixedName {\n\t\t\t\toneofFieldName = msg.File.Pkg() + \".\" + msg.GetName() + \"_\" + c.AssignableExpr()\n\t\t\t}\n\n\t\t\tcomponents = components + \".\" + oneOfName + \".(*\" + oneofFieldName + \")\"\n\t\t}\n\n\t\tif i == l-1 {\n\t\t\tcomponents = components + \".\" + c.AssignableExpr()\n\t\t\tcontinue\n\t\t}\n\t\tcomponents = components + \".\" + c.ValueExpr()\n\t}\n\treturn components\n}\n\n// AssignableExprPrep returns preparation statements for an assignable expression to assign a value\n// to the target field. The Go expression of the method request object is \"msgExpr\". This is only\n// needed for field paths that contain oneofs. Otherwise, an empty string is returned.\nfunc (p FieldPath) AssignableExprPrep(msgExpr string, currentPackage string) string {\n\tl := len(p)\n\tif l == 0 {\n\t\treturn \"\"\n\t}\n\n\tvar preparations []string\n\tcomponents := msgExpr\n\tfor i, c := range p {\n\t\t// We need to check if the target is not proto3_optional first.\n\t\t// Under the hood, proto3_optional uses oneof to signal to old proto3 clients\n\t\t// that presence is tracked for this field. This oneof is known as a \"synthetic\" oneof.\n\t\tif !c.Target.GetProto3Optional() && c.Target.OneofIndex != nil {\n\t\t\tindex := c.Target.OneofIndex\n\t\t\tmsg := c.Target.Message\n\t\t\toneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName())\n\t\t\toneofFieldName := msg.GoType(currentPackage) + \"_\" + c.AssignableExpr()\n\n\t\t\tif c.Target.ForcePrefixedName {\n\t\t\t\toneofFieldName = msg.File.Pkg() + \".\" + msg.GetName() + \"_\" + c.AssignableExpr()\n\t\t\t}\n\n\t\t\tcomponents = components + \".\" + oneOfName\n\t\t\ts := `if %s == nil {\n\t\t\t\t%s =&%s{}\n\t\t\t} else if _, ok := %s.(*%s); !ok {\n\t\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"expect type: *%s, but: %%t\\n\",%s)\n\t\t\t}`\n\n\t\t\tpreparations = append(preparations, fmt.Sprintf(s, components, components, oneofFieldName, components, oneofFieldName, oneofFieldName, components))\n\t\t\tcomponents = components + \".(*\" + oneofFieldName + \")\"\n\t\t}\n\n\t\tif i == l-1 {\n\t\t\tcomponents = components + \".\" + c.AssignableExpr()\n\t\t\tcontinue\n\t\t}\n\t\tcomponents = components + \".\" + c.ValueExpr()\n\t}\n\n\treturn strings.Join(preparations, \"\\n\")\n}\n\n// OpaqueSetterExpr returns the Go expression to invoke the generated setter for\n// the final component in the path while respecting nested getters required by\n// the opaque API.\nfunc (p FieldPath) OpaqueSetterExpr(msgExpr string) string {\n\tif len(p) == 0 {\n\t\treturn msgExpr\n\t}\n\n\treturn fmt.Sprintf(\"%s.Set%s\", p.opaqueOwnerExpr(msgExpr), casing.Camel(p[len(p)-1].Name))\n}\n\n// opaqueOwnerExpr builds the Go expression for the message that owns the final\n// component in the path by chaining the generated getters.\nfunc (p FieldPath) opaqueOwnerExpr(msgExpr string) string {\n\tif len(p) <= 1 {\n\t\treturn msgExpr\n\t}\n\n\tvar sb strings.Builder\n\tsb.WriteString(msgExpr)\n\tfor i := range len(p) - 1 {\n\t\tsb.WriteString(\".Get\")\n\t\tsb.WriteString(casing.Camel(p[i].Name))\n\t\tsb.WriteString(\"()\")\n\t}\n\n\treturn sb.String()\n}\n\n// FieldPathComponent is a path component in FieldPath\ntype FieldPathComponent struct {\n\t// Name is a name of the proto field which this component corresponds to.\n\t// TODO(yugui) is this necessary?\n\tName string\n\t// Target is the proto field which this component corresponds to.\n\tTarget *Field\n}\n\n// AssignableExpr returns an assignable expression in go for this field.\nfunc (c FieldPathComponent) AssignableExpr() string {\n\treturn casing.Camel(c.Name)\n}\n\n// ValueExpr returns an expression in go for this field.\nfunc (c FieldPathComponent) ValueExpr() string {\n\tif c.Target.Message.File.proto2() {\n\t\treturn fmt.Sprintf(\"Get%s()\", casing.Camel(c.Name))\n\t}\n\treturn casing.Camel(c.Name)\n}\n\nvar (\n\tproto3ConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_DOUBLE:  \"runtime.Float64\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FLOAT:   \"runtime.Float32\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT64:   \"runtime.Int64\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT64:  \"runtime.Uint64\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT32:   \"runtime.Int32\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED64: \"runtime.Uint64\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED32: \"runtime.Uint32\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_BOOL:    \"runtime.Bool\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_STRING:  \"runtime.String\",\n\t\t// FieldDescriptorProto_TYPE_GROUP\n\t\t// FieldDescriptorProto_TYPE_MESSAGE\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_BYTES:    \"runtime.Bytes\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT32:   \"runtime.Uint32\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_ENUM:     \"runtime.Enum\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED32: \"runtime.Int32\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED64: \"runtime.Int64\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT32:   \"runtime.Int32\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT64:   \"runtime.Int64\",\n\t}\n\n\tproto3OptionalConvertFuncs = func() map[descriptorpb.FieldDescriptorProto_Type]string {\n\t\tresult := make(map[descriptorpb.FieldDescriptorProto_Type]string)\n\t\tfor typ, converter := range proto3ConvertFuncs {\n\t\t\t// TODO: this will use convert functions from proto2.\n\t\t\t//       The converters returning pointers should be moved\n\t\t\t//       to a more generic file.\n\t\t\tresult[typ] = converter + \"P\"\n\t\t}\n\t\treturn result\n\t}()\n\n\t// TODO: replace it with a IIFE\n\tproto3RepeatedConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_DOUBLE:  \"runtime.Float64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FLOAT:   \"runtime.Float32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT64:   \"runtime.Int64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT64:  \"runtime.Uint64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT32:   \"runtime.Int32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED64: \"runtime.Uint64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED32: \"runtime.Uint32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_BOOL:    \"runtime.BoolSlice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_STRING:  \"runtime.StringSlice\",\n\t\t// FieldDescriptorProto_TYPE_GROUP\n\t\t// FieldDescriptorProto_TYPE_MESSAGE\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_BYTES:    \"runtime.BytesSlice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT32:   \"runtime.Uint32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_ENUM:     \"runtime.EnumSlice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED32: \"runtime.Int32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED64: \"runtime.Int64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT32:   \"runtime.Int32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT64:   \"runtime.Int64Slice\",\n\t}\n\n\tproto2ConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_DOUBLE:  \"runtime.Float64P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FLOAT:   \"runtime.Float32P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT64:   \"runtime.Int64P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT64:  \"runtime.Uint64P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT32:   \"runtime.Int32P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED64: \"runtime.Uint64P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED32: \"runtime.Uint32P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_BOOL:    \"runtime.BoolP\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_STRING:  \"runtime.StringP\",\n\t\t// FieldDescriptorProto_TYPE_GROUP\n\t\t// FieldDescriptorProto_TYPE_MESSAGE\n\t\t// FieldDescriptorProto_TYPE_BYTES\n\t\t// TODO(yugui) Handle bytes\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT32:   \"runtime.Uint32P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_ENUM:     \"runtime.EnumP\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED32: \"runtime.Int32P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED64: \"runtime.Int64P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT32:   \"runtime.Int32P\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT64:   \"runtime.Int64P\",\n\t}\n\n\tproto2RepeatedConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_DOUBLE:  \"runtime.Float64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FLOAT:   \"runtime.Float32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT64:   \"runtime.Int64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT64:  \"runtime.Uint64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_INT32:   \"runtime.Int32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED64: \"runtime.Uint64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_FIXED32: \"runtime.Uint32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_BOOL:    \"runtime.BoolSlice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_STRING:  \"runtime.StringSlice\",\n\t\t// FieldDescriptorProto_TYPE_GROUP\n\t\t// FieldDescriptorProto_TYPE_MESSAGE\n\t\t// FieldDescriptorProto_TYPE_BYTES\n\t\t// TODO(maros7) Handle bytes\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_UINT32:   \"runtime.Uint32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_ENUM:     \"runtime.EnumSlice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED32: \"runtime.Int32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SFIXED64: \"runtime.Int64Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT32:   \"runtime.Int32Slice\",\n\t\tdescriptorpb.FieldDescriptorProto_TYPE_SINT64:   \"runtime.Int64Slice\",\n\t}\n\n\twellKnownTypeConv = map[string]string{\n\t\t\".google.protobuf.Timestamp\":   \"runtime.Timestamp\",\n\t\t\".google.protobuf.Duration\":    \"runtime.Duration\",\n\t\t\".google.protobuf.StringValue\": \"runtime.StringValue\",\n\t\t\".google.protobuf.FloatValue\":  \"runtime.FloatValue\",\n\t\t\".google.protobuf.DoubleValue\": \"runtime.DoubleValue\",\n\t\t\".google.protobuf.BoolValue\":   \"runtime.BoolValue\",\n\t\t\".google.protobuf.BytesValue\":  \"runtime.BytesValue\",\n\t\t\".google.protobuf.Int32Value\":  \"runtime.Int32Value\",\n\t\t\".google.protobuf.UInt32Value\": \"runtime.UInt32Value\",\n\t\t\".google.protobuf.Int64Value\":  \"runtime.Int64Value\",\n\t\t\".google.protobuf.UInt64Value\": \"runtime.UInt64Value\",\n\t}\n)\n"
  },
  {
    "path": "internal/descriptor/types_test.go",
    "content": "package descriptor\n\nimport (\n\t\"testing\"\n\n\t\"google.golang.org/protobuf/encoding/prototext\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n)\n\nfunc TestGoPackageStandard(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tpkg  GoPackage\n\t\twant bool\n\t}{\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"fmt\", Name: \"fmt\"},\n\t\t\twant: true,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"encoding/json\", Name: \"json\"},\n\t\t\twant: true,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"google.golang.org/protobuf/encoding/protojson\", Name: \"jsonpb\"},\n\t\t\twant: false,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"golang.org/x/net/context\", Name: \"context\"},\n\t\t\twant: false,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway\", Name: \"main\"},\n\t\t\twant: false,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"github.com/google/googleapis/google/api/http.pb\", Name: \"http_pb\", Alias: \"htpb\"},\n\t\t\twant: false,\n\t\t},\n\t} {\n\t\tif got, want := spec.pkg.Standard(), spec.want; got != want {\n\t\t\tt.Errorf(\"%#v.Standard() = %v; want %v\", spec.pkg, got, want)\n\t\t}\n\t}\n}\n\nfunc TestGoPackageString(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tpkg  GoPackage\n\t\twant string\n\t}{\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"fmt\", Name: \"fmt\"},\n\t\t\twant: `\"fmt\"`,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"encoding/json\", Name: \"json\"},\n\t\t\twant: `\"encoding/json\"`,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"google.golang.org/protobuf/encoding/protojson\", Name: \"jsonpb\"},\n\t\t\twant: `\"google.golang.org/protobuf/encoding/protojson\"`,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"golang.org/x/net/context\", Name: \"context\"},\n\t\t\twant: `\"golang.org/x/net/context\"`,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"github.com/grpc-ecosystem/grpc-gateway\", Name: \"main\"},\n\t\t\twant: `\"github.com/grpc-ecosystem/grpc-gateway\"`,\n\t\t},\n\t\t{\n\t\t\tpkg:  GoPackage{Path: \"github.com/google/googleapis/google/api/http.pb\", Name: \"http_pb\", Alias: \"htpb\"},\n\t\t\twant: `htpb \"github.com/google/googleapis/google/api/http.pb\"`,\n\t\t},\n\t} {\n\t\tif got, want := spec.pkg.String(), spec.want; got != want {\n\t\t\tt.Errorf(\"%#v.String() = %q; want %q\", spec.pkg, got, want)\n\t\t}\n\t}\n}\n\nfunc TestFieldPath(t *testing.T) {\n\tvar fds []*descriptorpb.FileDescriptorProto\n\tfor _, src := range []string{\n\t\t`\n\t\tname: 'example.proto'\n\t\tpackage: 'example'\n\t\tmessage_type <\n\t\t\tname: 'Nest'\n\t\t\tfield <\n\t\t\t\tname: 'nest2_field'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: 'Nest2'\n\t\t\t\tnumber: 1\n\t\t\t>\n\t\t\tfield <\n\t\t\t\tname: 'terminal_field'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tnumber: 2\n\t\t\t>\n\t\t>\n\t\tsyntax: \"proto3\"\n\t\t`, `\n\t\tname: 'another.proto'\n\t\tpackage: 'example'\n\t\tmessage_type <\n\t\t\tname: 'Nest2'\n\t\t\tfield <\n\t\t\t\tname: 'nest_field'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: 'Nest'\n\t\t\t\tnumber: 1\n\t\t\t>\n\t\t\tfield <\n\t\t\t\tname: 'terminal_field'\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tnumber: 2\n\t\t\t>\n\t\t>\n\t\tsyntax: \"proto2\"\n\t\t`,\n\t} {\n\t\tvar fd descriptorpb.FileDescriptorProto\n\t\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t\t}\n\t\tfds = append(fds, &fd)\n\t}\n\tnest1 := &Message{\n\t\tDescriptorProto: fds[0].MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{FieldDescriptorProto: fds[0].MessageType[0].Field[0]},\n\t\t\t{FieldDescriptorProto: fds[0].MessageType[0].Field[1]},\n\t\t},\n\t}\n\tnest2 := &Message{\n\t\tDescriptorProto: fds[1].MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{FieldDescriptorProto: fds[1].MessageType[0].Field[0]},\n\t\t\t{FieldDescriptorProto: fds[1].MessageType[0].Field[1]},\n\t\t},\n\t}\n\tfile1 := &File{\n\t\tFileDescriptorProto: fds[0],\n\t\tGoPkg:               GoPackage{Path: \"example\", Name: \"example\"},\n\t\tMessages:            []*Message{nest1},\n\t}\n\tfile2 := &File{\n\t\tFileDescriptorProto: fds[1],\n\t\tGoPkg:               GoPackage{Path: \"example\", Name: \"example\"},\n\t\tMessages:            []*Message{nest2},\n\t}\n\tcrossLinkFixture(file1)\n\tcrossLinkFixture(file2)\n\n\tc1 := FieldPathComponent{\n\t\tName:   \"nest_field\",\n\t\tTarget: nest2.Fields[0],\n\t}\n\tif got, want := c1.ValueExpr(), \"GetNestField()\"; got != want {\n\t\tt.Errorf(\"c1.ValueExpr() = %q; want %q\", got, want)\n\t}\n\tif got, want := c1.AssignableExpr(), \"NestField\"; got != want {\n\t\tt.Errorf(\"c1.AssignableExpr() = %q; want %q\", got, want)\n\t}\n\n\tc2 := FieldPathComponent{\n\t\tName:   \"nest2_field\",\n\t\tTarget: nest1.Fields[0],\n\t}\n\tif got, want := c2.ValueExpr(), \"Nest2Field\"; got != want {\n\t\tt.Errorf(\"c2.ValueExpr() = %q; want %q\", got, want)\n\t}\n\tif got, want := c2.ValueExpr(), \"Nest2Field\"; got != want {\n\t\tt.Errorf(\"c2.ValueExpr() = %q; want %q\", got, want)\n\t}\n\n\tfp := FieldPath{\n\t\tc1, c2, c1, FieldPathComponent{\n\t\t\tName:   \"terminal_field\",\n\t\t\tTarget: nest1.Fields[1],\n\t\t},\n\t}\n\tif got, want := fp.AssignableExpr(\"resp\", \"example\"), \"resp.GetNestField().Nest2Field.GetNestField().TerminalField\"; got != want {\n\t\tt.Errorf(\"fp.AssignableExpr(%q) = %q; want %q\", \"resp\", got, want)\n\t}\n\n\tfp2 := FieldPath{\n\t\tc2, c1, c2, FieldPathComponent{\n\t\t\tName:   \"terminal_field\",\n\t\t\tTarget: nest2.Fields[1],\n\t\t},\n\t}\n\tif got, want := fp2.AssignableExpr(\"resp\", \"example\"), \"resp.Nest2Field.GetNestField().Nest2Field.TerminalField\"; got != want {\n\t\tt.Errorf(\"fp2.AssignableExpr(%q) = %q; want %q\", \"resp\", got, want)\n\t}\n\n\tvar fpEmpty FieldPath\n\tif got, want := fpEmpty.AssignableExpr(\"resp\", \"example\"), \"resp\"; got != want {\n\t\tt.Errorf(\"fpEmpty.AssignableExpr(%q) = %q; want %q\", \"resp\", got, want)\n\t}\n}\n\nfunc TestFieldPathOpaqueSetterExpr(t *testing.T) {\n\ttcs := map[string]struct {\n\t\tfieldPath FieldPath\n\t\tmsgExpr   string\n\t\twant      string\n\t}{\n\t\t\"top-level field\": {\n\t\t\tfieldPath: FieldPath{{Name: \"data\"}},\n\t\t\tmsgExpr:   \"req\",\n\t\t\twant:      \"req.SetData\",\n\t\t},\n\t\t\"nested field\": {\n\t\t\tfieldPath: FieldPath{{Name: \"key\"}, {Name: \"date_type\"}},\n\t\t\tmsgExpr:   \"req\",\n\t\t\twant:      \"req.GetKey().SetDateType\",\n\t\t},\n\t}\n\n\tfor name, tc := range tcs {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tif got := tc.fieldPath.OpaqueSetterExpr(tc.msgExpr); got != tc.want {\n\t\t\t\tt.Fatalf(\"OpaqueSetterExpr(%q) = %q; want %q\", tc.msgExpr, got, tc.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGoType(t *testing.T) {\n\tsrc := `\n\t\tname: 'example.proto'\n\t\tpackage: 'example'\n\t\tmessage_type <\n\t\t\tname: 'Message'\n\t\t\tfield <\n\t\t\t\tname: 'field'\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tnumber: 1\n\t\t\t>\n\t\t>,\n\t\tenum_type <\n\t\t\tname: 'EnumName'\n\t\t>,\n\t`\n\n\tvar fd descriptorpb.FileDescriptorProto\n\tif err := prototext.Unmarshal([]byte(src), &fd); err != nil {\n\t\tt.Fatalf(\"proto.UnmarshalText(%s, &fd) failed with %v; want success\", src, err)\n\t}\n\n\tmsg := &Message{\n\t\tDescriptorProto: fd.MessageType[0],\n\t\tFields: []*Field{\n\t\t\t{FieldDescriptorProto: fd.MessageType[0].Field[0]},\n\t\t},\n\t}\n\tenum := &Enum{\n\t\tEnumDescriptorProto: fd.EnumType[0],\n\t}\n\tunderscoreMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"create_book\"),\n\t}\n\tfd.MessageType = append(fd.MessageType, underscoreMsgDesc)\n\tunderscoreEnumDesc := &descriptorpb.EnumDescriptorProto{\n\t\tName: proto.String(\"status_enum\"),\n\t}\n\tfd.EnumType = append(fd.EnumType, underscoreEnumDesc)\n\tunderscoreMsg := &Message{\n\t\tDescriptorProto: underscoreMsgDesc,\n\t}\n\tunderscoreEnum := &Enum{\n\t\tEnumDescriptorProto: underscoreEnumDesc,\n\t}\n\tfile := &File{\n\t\tFileDescriptorProto: &fd,\n\t\tGoPkg:               GoPackage{Path: \"example\", Name: \"example\"},\n\t\tMessages:            []*Message{msg, underscoreMsg},\n\t\tEnums:               []*Enum{enum, underscoreEnum},\n\t}\n\tcrossLinkFixture(file)\n\n\tif got, want := msg.GoType(\"example\"), \"Message\"; got != want {\n\t\tt.Errorf(\"msg.GoType() = %q; want %q\", got, want)\n\t}\n\tif got, want := msg.GoType(\"extPackage\"), \"example.Message\"; got != want {\n\t\tt.Errorf(\"msg.GoType() = %q; want %q\", got, want)\n\t}\n\tmsg.ForcePrefixedName = true\n\tif got, want := msg.GoType(\"example\"), \"example.Message\"; got != want {\n\t\tt.Errorf(\"msg.GoType() = %q; want %q\", got, want)\n\t}\n\n\tif got, want := enum.GoType(\"example\"), \"EnumName\"; got != want {\n\t\tt.Errorf(\"enum.GoType() = %q; want %q\", got, want)\n\t}\n\tif got, want := enum.GoType(\"extPackage\"), \"example.EnumName\"; got != want {\n\t\tt.Errorf(\"enum.GoType() = %q; want %q\", got, want)\n\t}\n\tenum.ForcePrefixedName = true\n\tif got, want := enum.GoType(\"example\"), \"example.EnumName\"; got != want {\n\t\tt.Errorf(\"enum.GoType() = %q; want %q\", got, want)\n\t}\n\n\tif got, want := underscoreMsg.GoType(\"example\"), \"CreateBook\"; got != want {\n\t\tt.Errorf(\"underscoreMsg.GoType() = %q; want %q\", got, want)\n\t}\n\tif got, want := underscoreMsg.GoType(\"extPackage\"), \"example.CreateBook\"; got != want {\n\t\tt.Errorf(\"underscoreMsg.GoType() with ext package = %q; want %q\", got, want)\n\t}\n\tif got, want := underscoreEnum.GoType(\"example\"), \"StatusEnum\"; got != want {\n\t\tt.Errorf(\"underscoreEnum.GoType() = %q; want %q\", got, want)\n\t}\n\tif got, want := underscoreEnum.GoType(\"extPackage\"), \"example.StatusEnum\"; got != want {\n\t\tt.Errorf(\"underscoreEnum.GoType() with ext package = %q; want %q\", got, want)\n\t}\n}\n"
  },
  {
    "path": "internal/generator/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"generator\",\n    srcs = [\"generator.go\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator\",\n    deps = [\"//internal/descriptor\"],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":generator\",\n    visibility = [\"//:__subpackages__\"],\n)\n"
  },
  {
    "path": "internal/generator/generator.go",
    "content": "// Package generator provides an abstract interface to code generators.\npackage generator\n\nimport (\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n)\n\n// Generator is an abstraction of code generators.\ntype Generator interface {\n\t// Generate generates output files from input .proto files.\n\tGenerate(targets []*descriptor.File) ([]*descriptor.ResponseFile, error)\n}\n"
  },
  {
    "path": "internal/httprule/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"httprule\",\n    srcs = [\n        \"compile.go\",\n        \"parse.go\",\n        \"types.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule\",\n    deps = [\"//utilities\"],\n)\n\ngo_test(\n    name = \"httprule_test\",\n    size = \"small\",\n    srcs = [\n        \"compile_test.go\",\n        \"parse_test.go\",\n        \"types_test.go\",\n    ],\n    embed = [\":httprule\"],\n    deps = [\n        \"//utilities\",\n        \"@org_golang_google_grpc//grpclog\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":httprule\",\n    visibility = [\"//:__subpackages__\"],\n)\n"
  },
  {
    "path": "internal/httprule/compile.go",
    "content": "package httprule\n\nimport (\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n)\n\nconst (\n\topcodeVersion = 1\n)\n\n// Template is a compiled representation of path templates.\ntype Template struct {\n\t// Version is the version number of the format.\n\tVersion int\n\t// OpCodes is a sequence of operations.\n\tOpCodes []int\n\t// Pool is a constant pool\n\tPool []string\n\t// Verb is a VERB part in the template.\n\tVerb string\n\t// Fields is a list of field paths bound in this template.\n\tFields []string\n\t// Original template (example: /v1/a_bit_of_everything)\n\tTemplate string\n}\n\n// Compiler compiles utilities representation of path templates into marshallable operations.\n// They can be unmarshalled by runtime.NewPattern.\ntype Compiler interface {\n\tCompile() Template\n}\n\ntype op struct {\n\t// code is the opcode of the operation\n\tcode utilities.OpCode\n\n\t// str is a string operand of the code.\n\t// num is ignored if str is not empty.\n\tstr string\n\n\t// num is a numeric operand of the code.\n\tnum int\n}\n\nfunc (w wildcard) compile() []op {\n\treturn []op{\n\t\t{code: utilities.OpPush},\n\t}\n}\n\nfunc (w deepWildcard) compile() []op {\n\treturn []op{\n\t\t{code: utilities.OpPushM},\n\t}\n}\n\nfunc (l literal) compile() []op {\n\treturn []op{\n\t\t{\n\t\t\tcode: utilities.OpLitPush,\n\t\t\tstr:  string(l),\n\t\t},\n\t}\n}\n\nfunc (v variable) compile() []op {\n\tvar ops []op\n\tfor _, s := range v.segments {\n\t\tops = append(ops, s.compile()...)\n\t}\n\tops = append(ops, op{\n\t\tcode: utilities.OpConcatN,\n\t\tnum:  len(v.segments),\n\t}, op{\n\t\tcode: utilities.OpCapture,\n\t\tstr:  v.path,\n\t})\n\n\treturn ops\n}\n\nfunc (t template) Compile() Template {\n\tvar rawOps []op\n\tfor _, s := range t.segments {\n\t\trawOps = append(rawOps, s.compile()...)\n\t}\n\n\tvar (\n\t\tops    []int\n\t\tpool   []string\n\t\tfields []string\n\t)\n\tconsts := make(map[string]int)\n\tfor _, op := range rawOps {\n\t\tops = append(ops, int(op.code))\n\t\tif op.str == \"\" {\n\t\t\tops = append(ops, op.num)\n\t\t} else {\n\t\t\t// eof segment literal represents the \"/\" path pattern\n\t\t\tif op.str == eof {\n\t\t\t\top.str = \"\"\n\t\t\t}\n\t\t\tif _, ok := consts[op.str]; !ok {\n\t\t\t\tconsts[op.str] = len(pool)\n\t\t\t\tpool = append(pool, op.str)\n\t\t\t}\n\t\t\tops = append(ops, consts[op.str])\n\t\t}\n\t\tif op.code == utilities.OpCapture {\n\t\t\tfields = append(fields, op.str)\n\t\t}\n\t}\n\treturn Template{\n\t\tVersion:  opcodeVersion,\n\t\tOpCodes:  ops,\n\t\tPool:     pool,\n\t\tVerb:     t.verb,\n\t\tFields:   fields,\n\t\tTemplate: t.template,\n\t}\n}\n"
  },
  {
    "path": "internal/httprule/compile_test.go",
    "content": "package httprule\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n)\n\nconst (\n\toperandFiller = 0\n)\n\nfunc TestCompile(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tsegs []segment\n\t\tverb string\n\n\t\tops    []int\n\t\tpool   []string\n\t\tfields []string\n\t}{\n\t\t{},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tliteral(eof),\n\t\t\t},\n\t\t\tops:  []int{int(utilities.OpLitPush), 0},\n\t\t\tpool: []string{\"\"},\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\twildcard{},\n\t\t\t},\n\t\t\tops: []int{int(utilities.OpPush), operandFiller},\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tdeepWildcard{},\n\t\t\t},\n\t\t\tops: []int{int(utilities.OpPushM), operandFiller},\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t},\n\t\t\tops:  []int{int(utilities.OpLitPush), 0},\n\t\t\tpool: []string{\"v1\"},\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t},\n\t\t\tverb: \"LOCK\",\n\t\t\tops:  []int{int(utilities.OpLitPush), 0},\n\t\t\tpool: []string{\"v1\"},\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name.nested\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPush), operandFiller,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 0,\n\t\t\t},\n\t\t\tpool:   []string{\"name.nested\"},\n\t\t\tfields: []string{\"name.nested\"},\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tliteral(\"obj\"),\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name.nested\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tliteral(\"a\"),\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t\tliteral(\"b\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"obj\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tdeepWildcard{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPush), operandFiller,\n\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t\tint(utilities.OpConcatN), 3,\n\t\t\t\tint(utilities.OpCapture), 3,\n\t\t\t\tint(utilities.OpPushM), operandFiller,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 0,\n\t\t\t},\n\t\t\tpool:   []string{\"obj\", \"a\", \"b\", \"name.nested\"},\n\t\t\tfields: []string{\"name.nested\", \"obj\"},\n\t\t},\n\t} {\n\t\ttmpl := template{\n\t\t\tsegments: spec.segs,\n\t\t\tverb:     spec.verb,\n\t\t}\n\t\tcompiled := tmpl.Compile()\n\t\tif got, want := compiled.Version, opcodeVersion; got != want {\n\t\t\tt.Errorf(\"tmpl.Compile().Version = %d; want %d; segs=%#v, verb=%q\", got, want, spec.segs, spec.verb)\n\t\t}\n\t\tif got, want := compiled.OpCodes, spec.ops; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"tmpl.Compile().OpCodes = %v; want %v; segs=%#v, verb=%q\", got, want, spec.segs, spec.verb)\n\t\t}\n\t\tif got, want := compiled.Pool, spec.pool; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"tmpl.Compile().Pool = %q; want %q; segs=%#v, verb=%q\", got, want, spec.segs, spec.verb)\n\t\t}\n\t\tif got, want := compiled.Verb, spec.verb; got != want {\n\t\t\tt.Errorf(\"tmpl.Compile().Verb = %q; want %q; segs=%#v, verb=%q\", got, want, spec.segs, spec.verb)\n\t\t}\n\t\tif got, want := compiled.Fields, spec.fields; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"tmpl.Compile().Fields = %q; want %q; segs=%#v, verb=%q\", got, want, spec.segs, spec.verb)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "internal/httprule/fuzz.go",
    "content": "//go:build gofuzz\n// +build gofuzz\n\npackage httprule\n\nfunc Fuzz(data []byte) int {\n\tif _, err := Parse(string(data)); err != nil {\n\t\treturn 0\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "internal/httprule/parse.go",
    "content": "package httprule\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// InvalidTemplateError indicates that the path template is not valid.\ntype InvalidTemplateError struct {\n\ttmpl string\n\tmsg  string\n}\n\nfunc (e InvalidTemplateError) Error() string {\n\treturn fmt.Sprintf(\"%s: %s\", e.msg, e.tmpl)\n}\n\n// Parse parses the string representation of path template\nfunc Parse(tmpl string) (Compiler, error) {\n\tif !strings.HasPrefix(tmpl, \"/\") {\n\t\treturn template{}, InvalidTemplateError{tmpl: tmpl, msg: \"no leading /\"}\n\t}\n\ttokens, verb := tokenize(tmpl[1:])\n\n\tp := parser{tokens: tokens}\n\tsegs, err := p.topLevelSegments()\n\tif err != nil {\n\t\treturn template{}, InvalidTemplateError{tmpl: tmpl, msg: err.Error()}\n\t}\n\n\treturn template{\n\t\tsegments: segs,\n\t\tverb:     verb,\n\t\ttemplate: tmpl,\n\t}, nil\n}\n\nfunc tokenize(path string) (tokens []string, verb string) {\n\tif path == \"\" {\n\t\treturn []string{eof}, \"\"\n\t}\n\n\tconst (\n\t\tinit = iota\n\t\tfield\n\t\tnested\n\t)\n\tst := init\n\tfor path != \"\" {\n\t\tvar idx int\n\t\tswitch st {\n\t\tcase init:\n\t\t\tidx = strings.IndexAny(path, \"/{\")\n\t\tcase field:\n\t\t\tidx = strings.IndexAny(path, \".=}\")\n\t\tcase nested:\n\t\t\tidx = strings.IndexAny(path, \"/}\")\n\t\t}\n\t\tif idx < 0 {\n\t\t\ttokens = append(tokens, path)\n\t\t\tbreak\n\t\t}\n\t\tswitch r := path[idx]; r {\n\t\tcase '/', '.':\n\t\tcase '{':\n\t\t\tst = field\n\t\tcase '=':\n\t\t\tst = nested\n\t\tcase '}':\n\t\t\tst = init\n\t\t}\n\t\tif idx == 0 {\n\t\t\ttokens = append(tokens, path[idx:idx+1])\n\t\t} else {\n\t\t\ttokens = append(tokens, path[:idx], path[idx:idx+1])\n\t\t}\n\t\tpath = path[idx+1:]\n\t}\n\n\tl := len(tokens)\n\t// See\n\t// https://github.com/grpc-ecosystem/grpc-gateway/pull/1947#issuecomment-774523693 ;\n\t// although normal and backwards-compat logic here is to use the last index\n\t// of a colon, if the final segment is a variable followed by a colon, the\n\t// part following the colon must be a verb. Hence if the previous token is\n\t// an end var marker, we switch the index we're looking for to Index instead\n\t// of LastIndex, so that we correctly grab the remaining part of the path as\n\t// the verb.\n\tvar penultimateTokenIsEndVar bool\n\tswitch l {\n\tcase 0, 1:\n\t\t// Not enough to be variable so skip this logic and don't result in an\n\t\t// invalid index\n\tdefault:\n\t\tpenultimateTokenIsEndVar = tokens[l-2] == \"}\"\n\t}\n\tt := tokens[l-1]\n\tvar idx int\n\tif penultimateTokenIsEndVar {\n\t\tidx = strings.Index(t, \":\")\n\t} else {\n\t\tidx = strings.LastIndex(t, \":\")\n\t}\n\tif idx == 0 {\n\t\ttokens, verb = tokens[:l-1], t[1:]\n\t} else if idx > 0 {\n\t\ttokens[l-1], verb = t[:idx], t[idx+1:]\n\t}\n\ttokens = append(tokens, eof)\n\treturn tokens, verb\n}\n\n// parser is a parser of the template syntax defined in github.com/googleapis/googleapis/google/api/http.proto.\ntype parser struct {\n\ttokens   []string\n\taccepted []string\n}\n\n// topLevelSegments is the target of this parser.\nfunc (p *parser) topLevelSegments() ([]segment, error) {\n\tif _, err := p.accept(typeEOF); err == nil {\n\t\tp.tokens = p.tokens[:0]\n\t\treturn []segment{literal(eof)}, nil\n\t}\n\tsegs, err := p.segments()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif _, err := p.accept(typeEOF); err != nil {\n\t\treturn nil, fmt.Errorf(\"unexpected token %q after segments %q\", p.tokens[0], strings.Join(p.accepted, \"\"))\n\t}\n\treturn segs, nil\n}\n\nfunc (p *parser) segments() ([]segment, error) {\n\ts, err := p.segment()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsegs := []segment{s}\n\tfor {\n\t\tif _, err := p.accept(\"/\"); err != nil {\n\t\t\treturn segs, nil\n\t\t}\n\t\ts, err := p.segment()\n\t\tif err != nil {\n\t\t\treturn segs, err\n\t\t}\n\t\tsegs = append(segs, s)\n\t}\n}\n\nfunc (p *parser) segment() (segment, error) {\n\tif _, err := p.accept(\"*\"); err == nil {\n\t\treturn wildcard{}, nil\n\t}\n\tif _, err := p.accept(\"**\"); err == nil {\n\t\treturn deepWildcard{}, nil\n\t}\n\tif l, err := p.literal(); err == nil {\n\t\treturn l, nil\n\t}\n\n\tv, err := p.variable()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"segment neither wildcards, literal or variable: %w\", err)\n\t}\n\treturn v, nil\n}\n\nfunc (p *parser) literal() (segment, error) {\n\tlit, err := p.accept(typeLiteral)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn literal(lit), nil\n}\n\nfunc (p *parser) variable() (segment, error) {\n\tif _, err := p.accept(\"{\"); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpath, err := p.fieldPath()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar segs []segment\n\tif _, err := p.accept(\"=\"); err == nil {\n\t\tsegs, err = p.segments()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid segment in variable %q: %w\", path, err)\n\t\t}\n\t} else {\n\t\tsegs = []segment{wildcard{}}\n\t}\n\n\tif _, err := p.accept(\"}\"); err != nil {\n\t\treturn nil, fmt.Errorf(\"unterminated variable segment: %s\", path)\n\t}\n\treturn variable{\n\t\tpath:     path,\n\t\tsegments: segs,\n\t}, nil\n}\n\nfunc (p *parser) fieldPath() (string, error) {\n\tc, err := p.accept(typeIdent)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tcomponents := []string{c}\n\tfor {\n\t\tif _, err := p.accept(\".\"); err != nil {\n\t\t\treturn strings.Join(components, \".\"), nil\n\t\t}\n\t\tc, err := p.accept(typeIdent)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"invalid field path component: %w\", err)\n\t\t}\n\t\tcomponents = append(components, c)\n\t}\n}\n\n// A termType is a type of terminal symbols.\ntype termType string\n\n// These constants define some of valid values of termType.\n// They improve readability of parse functions.\n//\n// You can also use \"/\", \"*\", \"**\", \".\" or \"=\" as valid values.\nconst (\n\ttypeIdent   = termType(\"ident\")\n\ttypeLiteral = termType(\"literal\")\n\ttypeEOF     = termType(\"$\")\n)\n\n// eof is the terminal symbol which always appears at the end of token sequence.\nconst eof = \"\\u0000\"\n\n// accept tries to accept a token in \"p\".\n// This function consumes a token and returns it if it matches to the specified \"term\".\n// If it doesn't match, the function does not consume any tokens and return an error.\nfunc (p *parser) accept(term termType) (string, error) {\n\tt := p.tokens[0]\n\tswitch term {\n\tcase \"/\", \"*\", \"**\", \".\", \"=\", \"{\", \"}\":\n\t\tif t != string(term) && t != \"/\" {\n\t\t\treturn \"\", fmt.Errorf(\"expected %q but got %q\", term, t)\n\t\t}\n\tcase typeEOF:\n\t\tif t != eof {\n\t\t\treturn \"\", fmt.Errorf(\"expected EOF but got %q\", t)\n\t\t}\n\tcase typeIdent:\n\t\tif err := expectIdent(t); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\tcase typeLiteral:\n\t\tif err := expectPChars(t); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unknown termType %q\", term)\n\t}\n\tp.tokens = p.tokens[1:]\n\tp.accepted = append(p.accepted, t)\n\treturn t, nil\n}\n\n// expectPChars determines if \"t\" consists of only pchars defined in RFC3986.\n//\n// https://www.ietf.org/rfc/rfc3986.txt, P.49\n//\n//\tpchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n//\tunreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n//\tsub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n//\t              / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n//\tpct-encoded   = \"%\" HEXDIG HEXDIG\nfunc expectPChars(t string) error {\n\tconst (\n\t\tinit = iota\n\t\tpct1\n\t\tpct2\n\t)\n\tst := init\n\tfor _, r := range t {\n\t\tif st != init {\n\t\t\tif !isHexDigit(r) {\n\t\t\t\treturn fmt.Errorf(\"invalid hexdigit: %c(%U)\", r, r)\n\t\t\t}\n\t\t\tswitch st {\n\t\t\tcase pct1:\n\t\t\t\tst = pct2\n\t\t\tcase pct2:\n\t\t\t\tst = init\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// unreserved\n\t\tswitch {\n\t\tcase 'A' <= r && r <= 'Z':\n\t\t\tcontinue\n\t\tcase 'a' <= r && r <= 'z':\n\t\t\tcontinue\n\t\tcase '0' <= r && r <= '9':\n\t\t\tcontinue\n\t\t}\n\t\tswitch r {\n\t\tcase '-', '.', '_', '~':\n\t\t\t// unreserved\n\t\tcase '!', '$', '&', '\\'', '(', ')', '*', '+', ',', ';', '=':\n\t\t\t// sub-delims\n\t\tcase ':', '@':\n\t\t\t// rest of pchar\n\t\tcase '%':\n\t\t\t// pct-encoded\n\t\t\tst = pct1\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"invalid character in path segment: %q(%U)\", r, r)\n\t\t}\n\t}\n\tif st != init {\n\t\treturn fmt.Errorf(\"invalid percent-encoding in %q\", t)\n\t}\n\treturn nil\n}\n\n// expectIdent determines if \"ident\" is a valid identifier in .proto schema ([[:alpha:]_][[:alphanum:]_]*).\nfunc expectIdent(ident string) error {\n\tif ident == \"\" {\n\t\treturn errors.New(\"empty identifier\")\n\t}\n\tfor pos, r := range ident {\n\t\tswitch {\n\t\tcase '0' <= r && r <= '9':\n\t\t\tif pos == 0 {\n\t\t\t\treturn fmt.Errorf(\"identifier starting with digit: %s\", ident)\n\t\t\t}\n\t\t\tcontinue\n\t\tcase 'A' <= r && r <= 'Z':\n\t\t\tcontinue\n\t\tcase 'a' <= r && r <= 'z':\n\t\t\tcontinue\n\t\tcase r == '_':\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"invalid character %q(%U) in identifier: %s\", r, r, ident)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc isHexDigit(r rune) bool {\n\tswitch {\n\tcase '0' <= r && r <= '9':\n\t\treturn true\n\tcase 'A' <= r && r <= 'F':\n\t\treturn true\n\tcase 'a' <= r && r <= 'f':\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "internal/httprule/parse_test.go",
    "content": "package httprule\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nfunc TestTokenize(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tsrc    string\n\t\ttokens []string\n\t\tverb   string\n\t}{\n\t\t{\n\t\t\tsrc:    \"\",\n\t\t\ttokens: []string{eof},\n\t\t},\n\t\t{\n\t\t\tsrc:    \"v1\",\n\t\t\ttokens: []string{\"v1\", eof},\n\t\t},\n\t\t{\n\t\t\tsrc:    \"v1/b\",\n\t\t\ttokens: []string{\"v1\", \"/\", \"b\", eof},\n\t\t},\n\t\t{\n\t\t\tsrc:    \"v1/endpoint/*\",\n\t\t\ttokens: []string{\"v1\", \"/\", \"endpoint\", \"/\", \"*\", eof},\n\t\t},\n\t\t{\n\t\t\tsrc:    \"v1/endpoint/**\",\n\t\t\ttokens: []string{\"v1\", \"/\", \"endpoint\", \"/\", \"**\", eof},\n\t\t},\n\t\t{\n\t\t\tsrc: \"v1/b/{bucket_name=*}\",\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"b\", \"/\",\n\t\t\t\t\"{\", \"bucket_name\", \"=\", \"*\", \"}\",\n\t\t\t\teof,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tsrc: \"v1/b/{bucket_name=buckets/*}\",\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"b\", \"/\",\n\t\t\t\t\"{\", \"bucket_name\", \"=\", \"buckets\", \"/\", \"*\", \"}\",\n\t\t\t\teof,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tsrc: \"v1/b/{bucket_name=buckets/*}/o\",\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"b\", \"/\",\n\t\t\t\t\"{\", \"bucket_name\", \"=\", \"buckets\", \"/\", \"*\", \"}\", \"/\",\n\t\t\t\t\"o\",\n\t\t\t\teof,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tsrc: \"v1/b/{bucket_name=buckets/*}/o/{name}\",\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"b\", \"/\",\n\t\t\t\t\"{\", \"bucket_name\", \"=\", \"buckets\", \"/\", \"*\", \"}\", \"/\",\n\t\t\t\t\"o\", \"/\", \"{\", \"name\", \"}\",\n\t\t\t\teof,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tsrc: \"v1/a=b&c=d;e=f:g/endpoint.rdf\",\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"a=b&c=d;e=f:g\", \"/\",\n\t\t\t\t\"endpoint.rdf\",\n\t\t\t\teof,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tsrc: \"v1/a/{endpoint}:a\",\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"a\", \"/\",\n\t\t\t\t\"{\", \"endpoint\", \"}\",\n\t\t\t\teof,\n\t\t\t},\n\t\t\tverb: \"a\",\n\t\t},\n\t\t{\n\t\t\tsrc: \"v1/a/{endpoint}:b:c\",\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"a\", \"/\",\n\t\t\t\t\"{\", \"endpoint\", \"}\",\n\t\t\t\teof,\n\t\t\t},\n\t\t\tverb: \"b:c\",\n\t\t},\n\t} {\n\t\ttokens, verb := tokenize(spec.src)\n\t\tif got, want := tokens, spec.tokens; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"tokenize(%q) = %q, _; want %q, _\", spec.src, got, want)\n\t\t}\n\n\t\tswitch {\n\t\tcase spec.verb != \"\":\n\t\t\tif got, want := verb, spec.verb; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"tokenize(%q) = %q, _; want %q, _\", spec.src, got, want)\n\t\t\t}\n\n\t\tdefault:\n\t\t\tif got, want := verb, \"\"; got != want {\n\t\t\t\tt.Errorf(\"tokenize(%q) = _, %q; want _, %q\", spec.src, got, want)\n\t\t\t}\n\n\t\t\tsrc := fmt.Sprintf(\"%s:%s\", spec.src, \"LOCK\")\n\t\t\ttokens, verb = tokenize(src)\n\t\t\tif got, want := tokens, spec.tokens; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"tokenize(%q) = %q, _; want %q, _\", src, got, want)\n\t\t\t}\n\t\t\tif got, want := verb, \"LOCK\"; got != want {\n\t\t\t\tt.Errorf(\"tokenize(%q) = _, %q; want _, %q\", src, got, want)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestParseSegments(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\ttokens []string\n\t\twant   []segment\n\t}{\n\t\t{\n\t\t\ttokens: []string{eof},\n\t\t\twant: []segment{\n\t\t\t\tliteral(eof),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// Note: this case will never arise as tokenize() will never return such a sequence of tokens\n\t\t\t// and even if it does it will be treated as [eof]\n\t\t\ttokens: []string{eof, \"v1\", eof},\n\t\t\twant: []segment{\n\t\t\t\tliteral(eof),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"v1\", eof},\n\t\t\twant: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"/\", eof},\n\t\t\twant: []segment{\n\t\t\t\twildcard{},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"-._~!$&'()*+,;=:@\", eof},\n\t\t\twant: []segment{\n\t\t\t\tliteral(\"-._~!$&'()*+,;=:@\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"%e7%ac%ac%e4%b8%80%e7%89%88\", eof},\n\t\t\twant: []segment{\n\t\t\t\tliteral(\"%e7%ac%ac%e4%b8%80%e7%89%88\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"v1\", \"/\", \"*\", eof},\n\t\t\twant: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t\twildcard{},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"v1\", \"/\", \"**\", eof},\n\t\t\twant: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t\tdeepWildcard{},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"{\", \"name\", \"}\", eof},\n\t\t\twant: []segment{\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"{\", \"name\", \"=\", \"*\", \"}\", eof},\n\t\t\twant: []segment{\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"{\", \"field\", \".\", \"nested\", \".\", \"nested2\", \"=\", \"*\", \"}\", eof},\n\t\t\twant: []segment{\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"field.nested.nested2\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\"{\", \"name\", \"=\", \"a\", \"/\", \"b\", \"/\", \"*\", \"}\", eof},\n\t\t\twant: []segment{\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tliteral(\"a\"),\n\t\t\t\t\t\tliteral(\"b\"),\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: []string{\n\t\t\t\t\"v1\", \"/\",\n\t\t\t\t\"{\",\n\t\t\t\t\"name\", \".\", \"nested\", \".\", \"nested2\",\n\t\t\t\t\"=\",\n\t\t\t\t\"a\", \"/\", \"b\", \"/\", \"*\",\n\t\t\t\t\"}\", \"/\",\n\t\t\t\t\"o\", \"/\",\n\t\t\t\t\"{\",\n\t\t\t\t\"another_name\",\n\t\t\t\t\"=\",\n\t\t\t\t\"a\", \"/\", \"b\", \"/\", \"*\", \"/\", \"c\",\n\t\t\t\t\"}\", \"/\",\n\t\t\t\t\"**\",\n\t\t\t\teof,\n\t\t\t},\n\t\t\twant: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name.nested.nested2\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tliteral(\"a\"),\n\t\t\t\t\t\tliteral(\"b\"),\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tliteral(\"o\"),\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"another_name\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tliteral(\"a\"),\n\t\t\t\t\t\tliteral(\"b\"),\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t\tliteral(\"c\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdeepWildcard{},\n\t\t\t},\n\t\t},\n\t} {\n\t\tp := parser{tokens: spec.tokens}\n\t\tsegs, err := p.topLevelSegments()\n\t\tif err != nil {\n\t\t\tt.Errorf(\"parser{%q}.segments() failed with %v; want success\", spec.tokens, err)\n\t\t\tcontinue\n\t\t}\n\t\tif got, want := segs, spec.want; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"parser{%q}.segments() = %#v; want %#v\", spec.tokens, got, want)\n\t\t}\n\t\tif got := p.tokens; len(got) > 0 {\n\t\t\tt.Errorf(\"p.tokens = %q; want []; spec.tokens=%q\", got, spec.tokens)\n\t\t}\n\t}\n}\n\nfunc TestParse(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tinput       string\n\t\twantFields  []string\n\t\twantOpCodes []int\n\t\twantPool    []string\n\t\twantVerb    string\n\t}{\n\t\t{\n\t\t\tinput: \"/v1/{name}:bla:baa\",\n\t\t\twantFields: []string{\n\t\t\t\t\"name\",\n\t\t\t},\n\t\t\twantPool: []string{\"v1\", \"name\"},\n\t\t\twantVerb: \"bla:baa\",\n\t\t},\n\t\t{\n\t\t\tinput: \"/v1/{name}:\",\n\t\t\twantFields: []string{\n\t\t\t\t\"name\",\n\t\t\t},\n\t\t\twantPool: []string{\"v1\", \"name\"},\n\t\t\twantVerb: \"\",\n\t\t},\n\t\t{\n\t\t\tinput: \"/v1/{name=segment/wi:th}\",\n\t\t\twantFields: []string{\n\t\t\t\t\"name\",\n\t\t\t},\n\t\t\twantPool: []string{\"v1\", \"segment\", \"wi:th\", \"name\"},\n\t\t\twantVerb: \"\",\n\t\t},\n\t} {\n\t\tf, err := Parse(spec.input)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Parse(%q) failed with %v; want success\", spec.input, err)\n\t\t\tcontinue\n\t\t}\n\t\ttmpl := f.Compile()\n\t\tif !reflect.DeepEqual(tmpl.Fields, spec.wantFields) {\n\t\t\tt.Errorf(\"Parse(%q).Fields = %#v; want %#v\", spec.input, tmpl.Fields, spec.wantFields)\n\t\t}\n\t\tif !reflect.DeepEqual(tmpl.Pool, spec.wantPool) {\n\t\t\tt.Errorf(\"Parse(%q).Pool = %#v; want %#v\", spec.input, tmpl.Pool, spec.wantPool)\n\t\t}\n\t\tif tmpl.Template != spec.input {\n\t\t\tt.Errorf(\"Parse(%q).Template = %q; want %q\", spec.input, tmpl.Template, spec.input)\n\t\t}\n\t\tif tmpl.Verb != spec.wantVerb {\n\t\t\tt.Errorf(\"Parse(%q).Verb = %q; want %q\", spec.input, tmpl.Verb, spec.wantVerb)\n\t\t}\n\t}\n}\n\nfunc TestParseError(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tinput     string\n\t\twantError error\n\t}{\n\t\t{\n\t\t\tinput: \"v1/{name}\",\n\t\t\twantError: InvalidTemplateError{\n\t\t\t\ttmpl: \"v1/{name}\",\n\t\t\t\tmsg:  \"no leading /\",\n\t\t\t},\n\t\t},\n\t} {\n\t\t_, err := Parse(spec.input)\n\t\tif err == nil {\n\t\t\tt.Errorf(\"Parse(%q) unexpectedly did not fail\", spec.input)\n\t\t\tcontinue\n\t\t}\n\t\tif !errors.Is(err, spec.wantError) {\n\t\t\tt.Errorf(\"Error did not match expected error: got %v wanted %v\", err, spec.wantError)\n\t\t}\n\t}\n}\n\nfunc TestParseSegmentsWithErrors(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\ttokens []string\n\t}{\n\t\t{\n\t\t\t// double slash\n\t\t\ttokens: []string{\"//\", eof},\n\t\t},\n\t\t{\n\t\t\t// invalid literal\n\t\t\ttokens: []string{\"a?b\", eof},\n\t\t},\n\t\t{\n\t\t\t// invalid percent-encoding\n\t\t\ttokens: []string{\"%\", eof},\n\t\t},\n\t\t{\n\t\t\t// invalid percent-encoding\n\t\t\ttokens: []string{\"%2\", eof},\n\t\t},\n\t\t{\n\t\t\t// invalid percent-encoding\n\t\t\ttokens: []string{\"a%2z\", eof},\n\t\t},\n\t\t{\n\t\t\t// unterminated variable\n\t\t\ttokens: []string{\"{\", \"name\", eof},\n\t\t},\n\t\t{\n\t\t\t// unterminated variable\n\t\t\ttokens: []string{\"{\", \"name\", \"=\", eof},\n\t\t},\n\t\t{\n\t\t\t// unterminated variable\n\t\t\ttokens: []string{\"{\", \"name\", \"=\", \"*\", eof},\n\t\t},\n\t\t{\n\t\t\t// empty component in field path\n\t\t\ttokens: []string{\"{\", \"name\", \".\", \"}\", eof},\n\t\t},\n\t\t{\n\t\t\t// empty component in field path\n\t\t\ttokens: []string{\"{\", \"name\", \".\", \".\", \"nested\", \"}\", eof},\n\t\t},\n\t\t{\n\t\t\t// invalid character in identifier\n\t\t\ttokens: []string{\"{\", \"field-name\", \"}\", eof},\n\t\t},\n\t\t{\n\t\t\t// no slash between segments\n\t\t\ttokens: []string{\"v1\", \"endpoint\", eof},\n\t\t},\n\t\t{\n\t\t\t// no slash between segments\n\t\t\ttokens: []string{\"v1\", \"{\", \"name\", \"}\", eof},\n\t\t},\n\t} {\n\t\tp := parser{tokens: spec.tokens}\n\t\tsegs, err := p.topLevelSegments()\n\t\tif err == nil {\n\t\t\tt.Errorf(\"parser{%q}.segments() succeeded; want InvalidTemplateError; accepted %#v\", spec.tokens, segs)\n\t\t\tcontinue\n\t\t}\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Info(err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "internal/httprule/types.go",
    "content": "package httprule\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype template struct {\n\tsegments []segment\n\tverb     string\n\ttemplate string\n}\n\ntype segment interface {\n\tfmt.Stringer\n\tcompile() (ops []op)\n}\n\ntype wildcard struct{}\n\ntype deepWildcard struct{}\n\ntype literal string\n\ntype variable struct {\n\tpath     string\n\tsegments []segment\n}\n\nfunc (wildcard) String() string {\n\treturn \"*\"\n}\n\nfunc (deepWildcard) String() string {\n\treturn \"**\"\n}\n\nfunc (l literal) String() string {\n\treturn string(l)\n}\n\nfunc (v variable) String() string {\n\tvar segs []string\n\tfor _, s := range v.segments {\n\t\tsegs = append(segs, s.String())\n\t}\n\treturn fmt.Sprintf(\"{%s=%s}\", v.path, strings.Join(segs, \"/\"))\n}\n\nfunc (t template) String() string {\n\tvar segs []string\n\tfor _, s := range t.segments {\n\t\tsegs = append(segs, s.String())\n\t}\n\tstr := strings.Join(segs, \"/\")\n\tif t.verb != \"\" {\n\t\tstr = fmt.Sprintf(\"%s:%s\", str, t.verb)\n\t}\n\treturn \"/\" + str\n}\n"
  },
  {
    "path": "internal/httprule/types_test.go",
    "content": "package httprule\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n)\n\nfunc TestTemplateStringer(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tsegs []segment\n\t\twant string\n\t}{\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t},\n\t\t\twant: \"/v1\",\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\twildcard{},\n\t\t\t},\n\t\t\twant: \"/*\",\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tdeepWildcard{},\n\t\t\t},\n\t\t\twant: \"/**\",\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tliteral(\"a\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\twant: \"/{name=a}\",\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tliteral(\"a\"),\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t\tliteral(\"b\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\twant: \"/{name=a/*/b}\",\n\t\t},\n\t\t{\n\t\t\tsegs: []segment{\n\t\t\t\tliteral(\"v1\"),\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"name\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\tliteral(\"a\"),\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t\tliteral(\"b\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tliteral(\"c\"),\n\t\t\t\tvariable{\n\t\t\t\t\tpath: \"field.nested\",\n\t\t\t\t\tsegments: []segment{\n\t\t\t\t\t\twildcard{},\n\t\t\t\t\t\tliteral(\"d\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twildcard{},\n\t\t\t\tliteral(\"e\"),\n\t\t\t\tdeepWildcard{},\n\t\t\t},\n\t\t\twant: \"/v1/{name=a/*/b}/c/{field.nested=*/d}/*/e/**\",\n\t\t},\n\t} {\n\t\ttmpl := template{segments: spec.segs}\n\t\tif got, want := tmpl.String(), spec.want; got != want {\n\t\t\tt.Errorf(\"%#v.String() = %q; want %q\", tmpl, got, want)\n\t\t}\n\n\t\ttmpl.verb = \"LOCK\"\n\t\tif got, want := tmpl.String(), fmt.Sprintf(\"%s:LOCK\", spec.want); got != want {\n\t\t\tt.Errorf(\"%#v.String() = %q; want %q\", tmpl, got, want)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "non_module_deps.bzl",
    "content": "\"\"\"Module extension for non-module dependencies.\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\n\ndef _non_module_deps_impl(\n        # buildifier: disable=unused-variable\n        mctx):\n    # TODO(bazelbuild/buildtools#1204): Remove when available as module.\n    http_archive(\n        name = \"com_github_bazelbuild_buildtools\",\n        sha256 = \"f3b800e9f6ca60bdef3709440f393348f7c18a29f30814288a7326285c80aab9\",\n        strip_prefix = \"buildtools-8.5.1\",\n        urls = [\"https://github.com/bazelbuild/buildtools/archive/v8.5.1.tar.gz\"],\n    )\n\nnon_module_deps = module_extension(\n    implementation = _non_module_deps_impl,\n)\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_binary\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:compiler.bzl\", \"go_proto_compiler\")\n\npackage(default_visibility = [\"//visibility:private\"])\n\ngo_library(\n    name = \"protoc-gen-grpc-gateway_lib\",\n    srcs = [\"main.go\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway\",\n    deps = [\n        \"//internal/codegenerator\",\n        \"//internal/descriptor\",\n        \"//protoc-gen-grpc-gateway/internal/gengateway\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_protobuf//compiler/protogen\",\n    ],\n)\n\ngo_binary(\n    name = \"protoc-gen-grpc-gateway\",\n    embed = [\":protoc-gen-grpc-gateway_lib\"],\n    visibility = [\"//visibility:public\"],\n)\n\ngo_proto_compiler(\n    name = \"go_gen_grpc_gateway\",\n    plugin = \":protoc-gen-grpc-gateway\",\n    suffix = \".pb.gw.go\",\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"//runtime:go_default_library\",\n        \"//utilities:go_default_library\",\n        \"@org_golang_google_grpc//grpclog:go_default_library\",\n        \"@org_golang_google_grpc//metadata:go_default_library\",\n    ],\n)\n\ngo_proto_compiler(\n    name = \"go_gen_grpc_gateway_opaque\",\n    options = [\n        \"paths=source_relative\",\n        \"use_opaque_api=true\",\n    ],\n    plugin = \":protoc-gen-grpc-gateway\",\n    suffix = \".pb.gw.go\",\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"//runtime:go_default_library\",\n        \"//utilities:go_default_library\",\n        \"@org_golang_google_grpc//grpclog:go_default_library\",\n        \"@org_golang_google_grpc//metadata:go_default_library\",\n    ],\n)\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//protoc-gen-grpc-gateway:__subpackages__\"])\n\ngo_library(\n    name = \"gengateway\",\n    srcs = [\n        \"doc.go\",\n        \"generator.go\",\n        \"template.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway\",\n    deps = [\n        \"//internal/casing\",\n        \"//internal/descriptor\",\n        \"//internal/generator\",\n        \"//utilities\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//types/descriptorpb\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n    ],\n)\n\ngo_test(\n    name = \"gengateway_test\",\n    size = \"small\",\n    srcs = [\n        \"generator_test.go\",\n        \"template_test.go\",\n    ],\n    embed = [\":gengateway\"],\n    deps = [\n        \"//internal/descriptor\",\n        \"//internal/httprule\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//types/descriptorpb\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":gengateway\",\n    visibility = [\"//protoc-gen-grpc-gateway:__subpackages__\"],\n)\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/internal/gengateway/doc.go",
    "content": "// Package gengateway provides a code generator for grpc gateway files.\npackage gengateway\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/internal/gengateway/generator.go",
    "content": "package gengateway\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"path\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\tgen \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nvar errNoTargetService = errors.New(\"no target service defined in the file\")\n\ntype generator struct {\n\treg                *descriptor.Registry\n\tbaseImports        []descriptor.GoPackage\n\tuseRequestContext  bool\n\tregisterFuncSuffix string\n\tallowPatchFeature  bool\n\tstandalone         bool\n\tuseOpaqueAPI       bool\n}\n\n// New returns a new generator which generates grpc gateway files.\nfunc New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix string,\n\tallowPatchFeature, standalone bool, useOpaqueAPI bool) gen.Generator {\n\tvar imports []descriptor.GoPackage\n\tfor _, pkgpath := range []string{\n\t\t\"context\",\n\t\t\"errors\",\n\t\t\"io\",\n\t\t\"net/http\",\n\t\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\",\n\t\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\",\n\t\t\"google.golang.org/protobuf/proto\",\n\t\t\"google.golang.org/grpc\",\n\t\t\"google.golang.org/grpc/codes\",\n\t\t\"google.golang.org/grpc/grpclog\",\n\t\t\"google.golang.org/grpc/metadata\",\n\t\t\"google.golang.org/grpc/status\",\n\t} {\n\t\tpkg := descriptor.GoPackage{\n\t\t\tPath: pkgpath,\n\t\t\tName: path.Base(pkgpath),\n\t\t}\n\t\tif err := reg.ReserveGoPackageAlias(pkg.Name, pkg.Path); err != nil {\n\t\t\tfor i := 0; ; i++ {\n\t\t\t\talias := fmt.Sprintf(\"%s_%d\", pkg.Name, i)\n\t\t\t\tif err := reg.ReserveGoPackageAlias(alias, pkg.Path); err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tpkg.Alias = alias\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\timports = append(imports, pkg)\n\t}\n\n\treturn &generator{\n\t\treg:                reg,\n\t\tbaseImports:        imports,\n\t\tuseRequestContext:  useRequestContext,\n\t\tregisterFuncSuffix: registerFuncSuffix,\n\t\tallowPatchFeature:  allowPatchFeature,\n\t\tstandalone:         standalone,\n\t\tuseOpaqueAPI:       useOpaqueAPI,\n\t}\n}\n\nfunc (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.ResponseFile, error) {\n\tvar files []*descriptor.ResponseFile\n\tfor _, file := range targets {\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Infof(\"Processing %s\", file.GetName())\n\t\t}\n\n\t\tcode, err := g.generate(file)\n\t\tif errors.Is(err, errNoTargetService) {\n\t\t\tif grpclog.V(1) {\n\t\t\t\tgrpclog.Infof(\"%s: %v\", file.GetName(), err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tformatted, err := format.Source([]byte(code))\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"%v: %s\", err, code)\n\t\t\treturn nil, err\n\t\t}\n\t\tfiles = append(files, &descriptor.ResponseFile{\n\t\t\tGoPkg: file.GoPkg,\n\t\t\tCodeGeneratorResponse_File: &pluginpb.CodeGeneratorResponse_File{\n\t\t\t\tName:    proto.String(file.GeneratedFilenamePrefix + \".pb.gw.go\"),\n\t\t\t\tContent: proto.String(string(formatted)),\n\t\t\t},\n\t\t})\n\t}\n\treturn files, nil\n}\n\nfunc (g *generator) generate(file *descriptor.File) (string, error) {\n\tpkgSeen := make(map[string]bool)\n\tvar imports []descriptor.GoPackage\n\tfor _, pkg := range g.baseImports {\n\t\tpkgSeen[pkg.Path] = true\n\t\timports = append(imports, pkg)\n\t}\n\n\tif g.standalone {\n\t\timports = append(imports, file.GoPkg)\n\t}\n\n\tfor _, svc := range file.Services {\n\t\tfor _, m := range svc.Methods {\n\t\t\timports = append(imports, g.addEnumPathParamImports(file, m, pkgSeen)...)\n\t\t\timports = append(imports, g.addBodyFieldImports(file, m, pkgSeen)...)\n\t\t\tpkg := m.RequestType.File.GoPkg\n\t\t\tif len(m.Bindings) == 0 ||\n\t\t\t\tpkg == file.GoPkg || pkgSeen[pkg.Path] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpkgSeen[pkg.Path] = true\n\t\t\timports = append(imports, pkg)\n\t\t}\n\t}\n\tparams := param{\n\t\tFile:               file,\n\t\tImports:            imports,\n\t\tUseRequestContext:  g.useRequestContext,\n\t\tRegisterFuncSuffix: g.registerFuncSuffix,\n\t\tAllowPatchFeature:  g.allowPatchFeature,\n\t\tUseOpaqueAPI:       g.useOpaqueAPI,\n\t}\n\tif g.reg != nil {\n\t\tparams.OmitPackageDoc = g.reg.GetOmitPackageDoc()\n\t}\n\treturn applyTemplate(params, g.reg)\n}\n\n// addEnumPathParamImports handles adding import of enum path parameter go packages\nfunc (g *generator) addEnumPathParamImports(file *descriptor.File, m *descriptor.Method, pkgSeen map[string]bool) []descriptor.GoPackage {\n\tvar imports []descriptor.GoPackage\n\tfor _, b := range m.Bindings {\n\t\tfor _, p := range b.PathParams {\n\t\t\te, err := g.reg.LookupEnum(\"\", p.Target.GetTypeName())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpkg := e.File.GoPkg\n\t\t\tif pkg == file.GoPkg || pkgSeen[pkg.Path] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpkgSeen[pkg.Path] = true\n\t\t\timports = append(imports, pkg)\n\t\t}\n\t}\n\treturn imports\n}\n\n// addBodyFieldImports ensures nested body message types pull in their Go packages.\nfunc (g *generator) addBodyFieldImports(\n\tfile *descriptor.File,\n\tm *descriptor.Method,\n\tpkgSeen map[string]bool,\n) []descriptor.GoPackage {\n\tif g.reg == nil || !g.useOpaqueAPI {\n\t\treturn nil\n\t}\n\n\timports := make([]descriptor.GoPackage, 0, len(m.Bindings))\n\tfor _, b := range m.Bindings {\n\t\tif b.Body == nil || len(b.Body.FieldPath) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\ttarget := b.Body.FieldPath[len(b.Body.FieldPath)-1].Target\n\t\tif target == nil || target.GetTypeName() == \"\" || target.Message == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tmsg, err := g.reg.LookupMsg(target.Message.FQMN(), target.GetTypeName())\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tpkg := msg.File.GoPkg\n\t\tif pkg == file.GoPkg || pkgSeen[pkg.Path] {\n\t\t\tcontinue\n\t\t}\n\n\t\tpkgSeen[pkg.Path] = true\n\t\timports = append(imports, pkg)\n\t}\n\n\treturn imports\n}\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/internal/gengateway/generator_test.go",
    "content": "package gengateway\n\nimport (\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nfunc newExampleFileDescriptorWithGoPkg(gp *descriptor.GoPackage, filenamePrefix string) *descriptor.File {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tmsg1 := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t\tFile: &descriptor.File{\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"github.com/golang/protobuf/ptypes/empty\",\n\t\t\t\tName: \"emptypb\",\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"ExampleWithoutBindings\"),\n\t\tInputType:  proto.String(\"empty.Empty\"),\n\t\tOutputType: proto.String(\"empty.Empty\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth, meth1},\n\t}\n\treturn &descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\tPackage:     proto.String(\"example\"),\n\t\t\tDependency:  []string{\"a.example/b/c.proto\", \"a.example/d/e.proto\"},\n\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t},\n\t\tGoPkg:                   *gp,\n\t\tGeneratedFilenamePrefix: filenamePrefix,\n\t\tMessages:                []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           msg1,\n\t\t\t\t\t\tResponseType:          msg1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc TestGenerator_Generate(t *testing.T) {\n\n\t// Test with Open Struct API (default)\n\tt.Run(\"OpenStructAPI\", func(t *testing.T) {\n\t\ttestGeneratorGenerate(t, false)\n\t})\n\n\t// Test with Opaque API\n\tt.Run(\"OpaqueAPI\", func(t *testing.T) {\n\t\ttestGeneratorGenerate(t, true)\n\t})\n}\n\nfunc testGeneratorGenerate(t *testing.T, useOpaqueAPI bool) {\n\tg := new(generator)\n\tg.reg = descriptor.NewRegistry()\n\tg.useOpaqueAPI = useOpaqueAPI\n\tresult, err := g.Generate([]*descriptor.File{\n\t\tcrossLinkFixture(newExampleFileDescriptorWithGoPkg(&descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example\",\n\t\t\tName: \"example_pb\",\n\t\t}, \"path/to/example\")),\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to generate stubs: %v\", err)\n\t}\n\tif len(result) != 1 {\n\t\tt.Fatalf(\"expected to generate one file, got: %d\", len(result))\n\t}\n\texpectedName := \"path/to/example.pb.gw.go\"\n\tgotName := result[0].GetName()\n\tif gotName != expectedName {\n\t\tt.Fatalf(\"invalid name %q, expected %q\", gotName, expectedName)\n\t}\n}\n\nfunc TestAddBodyFieldImportsOpaqueOnly(t *testing.T) {\n\treg, file := buildBodyImportTestFile(t)\n\tsvc := file.Services[0]\n\tm := svc.Methods[0]\n\n\tbookField := m.RequestType.Fields[0]\n\tbookMessage, err := reg.LookupMsg(\"\", \".example.sub.CreateBook\")\n\tif err != nil {\n\t\tt.Fatalf(\"lookup book message: %v\", err)\n\t}\n\tbookField.FieldMessage = bookMessage\n\n\tbodyPath := descriptor.FieldPath{\n\t\t{\n\t\t\tName:   bookField.GetName(),\n\t\t\tTarget: bookField,\n\t\t},\n\t}\n\tm.Bindings = []*descriptor.Binding{\n\t\t{\n\t\t\tHTTPMethod: \"POST\",\n\t\t\tBody: &descriptor.Body{\n\t\t\t\tFieldPath: bodyPath,\n\t\t\t},\n\t\t},\n\t}\n\n\tg := &generator{\n\t\treg:          reg,\n\t\tuseOpaqueAPI: false,\n\t}\n\n\tif got := g.addBodyFieldImports(file, m, map[string]bool{}); len(got) != 0 {\n\t\tt.Fatalf(\"expected no imports when opaque API disabled, got %v\", got)\n\t}\n\n\tg.useOpaqueAPI = true\n\timports := g.addBodyFieldImports(file, m, map[string]bool{})\n\tif len(imports) != 1 {\n\t\tt.Fatalf(\"expected 1 import when opaque API enabled, got %d\", len(imports))\n\t}\n\tif imports[0].Path != bookMessage.File.GoPkg.Path {\n\t\tt.Fatalf(\"import path mismatch: got %q want %q\", imports[0].Path, bookMessage.File.GoPkg.Path)\n\t}\n}\n\nfunc buildBodyImportTestFile(t *testing.T) (*descriptor.Registry, *descriptor.File) {\n\tt.Helper()\n\n\tsubFile := &descriptorpb.FileDescriptorProto{\n\t\tName:    proto.String(\"sub.proto\"),\n\t\tPackage: proto.String(\"example.sub\"),\n\t\tSyntax:  proto.String(\"proto3\"),\n\t\tOptions: &descriptorpb.FileOptions{\n\t\t\tGoPackage: proto.String(\"example.com/sub;subpb\"),\n\t\t},\n\t\tMessageType: []*descriptorpb.DescriptorProto{\n\t\t\t{\n\t\t\t\tName: proto.String(\"CreateBook\"),\n\t\t\t},\n\t\t},\n\t}\n\n\tmainFile := &descriptorpb.FileDescriptorProto{\n\t\tName:       proto.String(\"svc.proto\"),\n\t\tPackage:    proto.String(\"example.svc\"),\n\t\tSyntax:     proto.String(\"proto3\"),\n\t\tDependency: []string{\"sub.proto\"},\n\t\tOptions: &descriptorpb.FileOptions{\n\t\t\tGoPackage: proto.String(\"example.com/svc;svcpb\"),\n\t\t},\n\t\tMessageType: []*descriptorpb.DescriptorProto{\n\t\t\t{\n\t\t\t\tName: proto.String(\"CreateBookRequest\"),\n\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:     proto.String(\"book\"),\n\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\tTypeName: proto.String(\".example.sub.CreateBook\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName: proto.String(\"CreateBookResponse\"),\n\t\t\t},\n\t\t},\n\t\tService: []*descriptorpb.ServiceDescriptorProto{\n\t\t\t{\n\t\t\t\tName: proto.String(\"LibraryService\"),\n\t\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:       proto.String(\"CreateBook\"),\n\t\t\t\t\t\tInputType:  proto.String(\".example.svc.CreateBookRequest\"),\n\t\t\t\t\t\tOutputType: proto.String(\".example.svc.CreateBookResponse\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\treq := &pluginpb.CodeGeneratorRequest{\n\t\tProtoFile:      []*descriptorpb.FileDescriptorProto{subFile, mainFile},\n\t\tFileToGenerate: []string{\"svc.proto\"},\n\t\tCompilerVersion: &pluginpb.Version{\n\t\t\tMajor: proto.Int32(3),\n\t\t\tMinor: proto.Int32(21),\n\t\t},\n\t}\n\n\treg := descriptor.NewRegistry()\n\tif err := reg.Load(req); err != nil {\n\t\tt.Fatalf(\"registry load failed: %v\", err)\n\t}\n\n\tfile, err := reg.LookupFile(\"svc.proto\")\n\tif err != nil {\n\t\tt.Fatalf(\"lookup svc file: %v\", err)\n\t}\n\treturn reg, crossLinkFixture(file)\n}\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/internal/gengateway/template.go",
    "content": "package gengateway\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"text/template\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n)\n\ntype param struct {\n\t*descriptor.File\n\tImports            []descriptor.GoPackage\n\tUseRequestContext  bool\n\tRegisterFuncSuffix string\n\tAllowPatchFeature  bool\n\tOmitPackageDoc     bool\n\tUseOpaqueAPI       bool\n}\n\ntype binding struct {\n\t*descriptor.Binding\n\tRegistry          *descriptor.Registry\n\tAllowPatchFeature bool\n\tUseOpaqueAPI      bool\n}\n\n// GetBodyFieldPath returns the binding body's field path.\nfunc (b binding) GetBodyFieldPath() string {\n\tif b.Body != nil && len(b.Body.FieldPath) != 0 {\n\t\treturn b.Body.FieldPath.String()\n\t}\n\treturn \"*\"\n}\n\n// GetBodyFieldStructName returns the binding body's struct field name.\nfunc (b binding) GetBodyFieldStructName() (string, error) {\n\tif b.Body != nil && len(b.Body.FieldPath) != 0 {\n\t\treturn casing.Camel(b.Body.FieldPath.String()), nil\n\t}\n\treturn \"\", errors.New(\"no body field found\")\n}\n\n// GetBodyFieldType returns the Go type of the body field.\nfunc (b binding) GetBodyFieldType() (string, error) {\n\tif b.Body == nil || len(b.Body.FieldPath) == 0 {\n\t\treturn \"\", errors.New(\"no body field found\")\n\t}\n\n\tlastComponent := b.Body.FieldPath[len(b.Body.FieldPath)-1]\n\tfieldType := lastComponent.Target.GetType()\n\n\t// Handle message types\n\tif fieldType == descriptorpb.FieldDescriptorProto_TYPE_MESSAGE {\n\t\t// Get the parent message to provide proper lookup context\n\t\tparentMsg := lastComponent.Target.Message\n\t\tmsg, err := b.Registry.LookupMsg(parentMsg.FQMN(), lastComponent.Target.GetTypeName())\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"failed to lookup message type %s: %w\", lastComponent.Target.GetTypeName(), err)\n\t\t}\n\t\treturn msg.GoType(b.Method.Service.File.GoPkg.Path), nil\n\t}\n\n\treturn \"\", errors.New(\"unsupported body field type\")\n}\n\n// HasQueryParam determines if the binding needs parameters in query string.\n//\n// It sometimes returns true even though actually the binding does not need.\n// But it is not serious because it just results in a small amount of extra codes generated.\nfunc (b binding) HasQueryParam() bool {\n\tif b.Body != nil && len(b.Body.FieldPath) == 0 {\n\t\treturn false\n\t}\n\tfields := make(map[string]bool)\n\tfor _, f := range b.Method.RequestType.Fields {\n\t\tfields[f.GetName()] = true\n\t}\n\tif b.Body != nil {\n\t\tdelete(fields, b.Body.FieldPath.String())\n\t}\n\tfor _, p := range b.PathParams {\n\t\tdelete(fields, p.FieldPath.String())\n\t}\n\treturn len(fields) > 0\n}\n\nfunc (b binding) QueryParamFilter() queryParamFilter {\n\tvar seqs [][]string\n\tif b.Body != nil {\n\t\tseqs = append(seqs, strings.Split(b.Body.FieldPath.String(), \".\"))\n\t}\n\tfor _, p := range b.PathParams {\n\t\tseqs = append(seqs, strings.Split(p.FieldPath.String(), \".\"))\n\t}\n\treturn queryParamFilter{utilities.NewDoubleArray(seqs)}\n}\n\n// HasEnumPathParam returns true if the path parameter slice contains a parameter\n// that maps to an enum proto field that is not repeated, if not false is returned.\nfunc (b binding) HasEnumPathParam() bool {\n\treturn b.hasEnumPathParam(false)\n}\n\n// HasRepeatedEnumPathParam returns true if the path parameter slice contains a parameter\n// that maps to a repeated enum proto field, if not false is returned.\nfunc (b binding) HasRepeatedEnumPathParam() bool {\n\treturn b.hasEnumPathParam(true)\n}\n\n// hasEnumPathParam returns true if the path parameter slice contains a parameter\n// that maps to an enum proto field and that the enum proto field is or isn't repeated\n// based on the provided 'repeated' parameter.\nfunc (b binding) hasEnumPathParam(repeated bool) bool {\n\tfor _, p := range b.PathParams {\n\t\tif p.IsEnum() && p.IsRepeated() == repeated {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// LookupEnum looks up an enum type by path parameter.\nfunc (b binding) LookupEnum(p descriptor.Parameter) *descriptor.Enum {\n\te, err := b.Registry.LookupEnum(\"\", p.Target.GetTypeName())\n\tif err != nil {\n\t\treturn nil\n\t}\n\treturn e\n}\n\n// FieldMaskField returns the golang-style name of the variable for a FieldMask, if there is exactly one of that type in\n// the message. Otherwise, it returns an empty string.\nfunc (b binding) FieldMaskField() string {\n\tvar fieldMaskField *descriptor.Field\n\tfor _, f := range b.Method.RequestType.Fields {\n\t\tif f.GetTypeName() == \".google.protobuf.FieldMask\" {\n\t\t\t// if there is more than 1 FieldMask for this request, then return none\n\t\t\tif fieldMaskField != nil {\n\t\t\t\treturn \"\"\n\t\t\t}\n\t\t\tfieldMaskField = f\n\t\t}\n\t}\n\tif fieldMaskField != nil {\n\t\treturn casing.Camel(fieldMaskField.GetName())\n\t}\n\treturn \"\"\n}\n\n// queryParamFilter is a wrapper of utilities.DoubleArray which provides String() to output DoubleArray.Encoding in a stable and predictable format.\ntype queryParamFilter struct {\n\t*utilities.DoubleArray\n}\n\nfunc (f queryParamFilter) String() string {\n\tencodings := make([]string, len(f.Encoding))\n\tfor str, enc := range f.Encoding {\n\t\tencodings[enc] = fmt.Sprintf(\"%q: %d\", str, enc)\n\t}\n\te := strings.Join(encodings, \", \")\n\treturn fmt.Sprintf(\"&utilities.DoubleArray{Encoding: map[string]int{%s}, Base: %#v, Check: %#v}\", e, f.Base, f.Check)\n}\n\ntype trailerParams struct {\n\tServices           []*descriptor.Service\n\tUseRequestContext  bool\n\tRegisterFuncSuffix string\n\tUseOpaqueAPI       bool\n}\n\nfunc applyTemplate(p param, reg *descriptor.Registry) (string, error) {\n\tw := bytes.NewBuffer(nil)\n\tif err := headerTemplate.Execute(w, p); err != nil {\n\t\treturn \"\", err\n\t}\n\tvar targetServices []*descriptor.Service\n\n\tfor _, msg := range p.Messages {\n\t\tmsgName := casing.Camel(*msg.Name)\n\t\tmsg.Name = &msgName\n\t}\n\n\tfor _, svc := range p.Services {\n\t\tvar methodWithBindingsSeen bool\n\t\tsvcName := casing.Camel(*svc.Name)\n\t\tsvc.Name = &svcName\n\n\t\tfor _, meth := range svc.Methods {\n\t\t\tif grpclog.V(2) {\n\t\t\t\tgrpclog.Infof(\"Processing %s.%s\", svc.GetName(), meth.GetName())\n\t\t\t}\n\t\t\tmethName := casing.Camel(*meth.Name)\n\t\t\tmeth.Name = &methName\n\t\t\tfor _, b := range meth.Bindings {\n\t\t\t\tif err := reg.CheckDuplicateAnnotation(b.HTTPMethod, b.PathTmpl.Template, svc); err != nil {\n\t\t\t\t\treturn \"\", err\n\t\t\t\t}\n\n\t\t\t\tmethodWithBindingsSeen = true\n\t\t\t\tif err := handlerTemplate.Execute(w, binding{\n\t\t\t\t\tBinding:           b,\n\t\t\t\t\tRegistry:          reg,\n\t\t\t\t\tAllowPatchFeature: p.AllowPatchFeature,\n\t\t\t\t\tUseOpaqueAPI:      p.UseOpaqueAPI,\n\t\t\t\t}); err != nil {\n\t\t\t\t\treturn \"\", err\n\t\t\t\t}\n\n\t\t\t\t// Local\n\t\t\t\tif err := localHandlerTemplate.Execute(w, binding{\n\t\t\t\t\tBinding:           b,\n\t\t\t\t\tRegistry:          reg,\n\t\t\t\t\tAllowPatchFeature: p.AllowPatchFeature,\n\t\t\t\t\tUseOpaqueAPI:      p.UseOpaqueAPI,\n\t\t\t\t}); err != nil {\n\t\t\t\t\treturn \"\", err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif methodWithBindingsSeen {\n\t\t\ttargetServices = append(targetServices, svc)\n\t\t}\n\t}\n\tif len(targetServices) == 0 {\n\t\treturn \"\", errNoTargetService\n\t}\n\n\ttp := trailerParams{\n\t\tServices:           targetServices,\n\t\tUseRequestContext:  p.UseRequestContext,\n\t\tRegisterFuncSuffix: p.RegisterFuncSuffix,\n\t\tUseOpaqueAPI:       p.UseOpaqueAPI,\n\t}\n\t// Local\n\tif err := localTrailerTemplate.Execute(w, tp); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif err := trailerTemplate.Execute(w, tp); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn w.String(), nil\n}\n\nvar (\n\thttpMethods = map[string]string{\n\t\thttp.MethodGet:     \"http.MethodGet\",\n\t\thttp.MethodHead:    \"http.MethodHead\",\n\t\thttp.MethodPost:    \"http.MethodPost\",\n\t\thttp.MethodPut:     \"http.MethodPut\",\n\t\thttp.MethodPatch:   \"http.MethodPatch\",\n\t\thttp.MethodDelete:  \"http.MethodDelete\",\n\t\thttp.MethodConnect: \"http.MethodConnect\",\n\t\thttp.MethodOptions: \"http.MethodOptions\",\n\t\thttp.MethodTrace:   \"http.MethodTrace\",\n\t}\n\theaderTemplate = template.Must(template.New(\"header\").Parse(`\n// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: {{ .GetName }}\n\n{{ if not .OmitPackageDoc }}/*\nPackage {{ .GoPkg.Name }} is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/{{ end }}\npackage {{ .GoPkg.Name }}\nimport (\n\t{{ range $i := .Imports }}{{ if $i.Standard }}{{ $i | printf \"%s\\n\" }}{{ end }}{{ end }}\n\n\t{{ range $i := .Imports }}{{ if not $i.Standard }}{{ $i | printf \"%s\\n\" }}{{ end }}{{ end }}\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = errors.New\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = metadata.Join\n)\n`))\n\n\thandlerTemplate = template.Must(template.New(\"handler\").Parse(`\n{{ if and .Method.GetClientStreaming .Method.GetServerStreaming }}\n{{ template \"bidi-streaming-request-func\" . }}\n{{ else if .Method.GetClientStreaming }}\n{{ template \"client-streaming-request-func\" . }}\n{{ else }}\n{{ template \"client-rpc-request-func\" . }}\n{{ end }}\n`))\n\n\t_ = template.Must(handlerTemplate.New(\"request-func-signature\").Parse(strings.ReplaceAll(`\n{{ if and .Method.GetClientStreaming .Method.GetServerStreaming }}\nfunc request_{{ .Method.Service.GetName }}_{{ .Method.GetName }}_{{ .Index }}(ctx context.Context, marshaler runtime.Marshaler, client {{ .Method.Service.InstanceName }}Client, req *http.Request, pathParams map[string]string) ({{ .Method.Service.InstanceName }}_{{ .Method.GetName }}Client, runtime.ServerMetadata, error)\n{{ else if .Method.GetServerStreaming }}\nfunc request_{{ .Method.Service.GetName }}_{{ .Method.GetName }}_{{ .Index }}(ctx context.Context, marshaler runtime.Marshaler, client {{ .Method.Service.InstanceName }}Client, req *http.Request, pathParams map[string]string) ({{ .Method.Service.InstanceName }}_{{ .Method.GetName }}Client, runtime.ServerMetadata, error)\n{{ else }}\nfunc request_{{ .Method.Service.GetName }}_{{ .Method.GetName }}_{{ .Index }}(ctx context.Context, marshaler runtime.Marshaler, client {{ .Method.Service.InstanceName }}Client, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error)\n{{ end }}`, \"\\n\", \"\")))\n\n\t_ = template.Must(handlerTemplate.New(\"client-streaming-request-func\").Parse(`\n{{ template \"request-func-signature\" . }} {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.{{ .Method.GetName }}(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\tfor {\n\t\tvar protoReq {{ .Method.RequestType.GoType .Method.Service.File.GoPkg.Path }}\n\t\terr = dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t}\n\t\tif err = stream.Send(&protoReq); err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn nil, metadata, err\n\t\t}\n\t}\n\tif err := stream.CloseSend(); err != nil {\n\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n{{- if .Method.GetServerStreaming }}\n\treturn stream, metadata, nil\n{{- else }}\n\tmsg, err := stream.CloseAndRecv()\n\tmetadata.TrailerMD = stream.Trailer()\n\treturn msg, metadata, err\n{{- end }}\n}\n`))\n\n\tfuncMap template.FuncMap = map[string]interface{}{\n\t\t\"camelIdentifier\": casing.CamelIdentifier,\n\t\t\"opaqueSetter\": func(p descriptor.FieldPath, msgExpr string) string {\n\t\t\treturn p.OpaqueSetterExpr(msgExpr)\n\t\t},\n\t\t\"toHTTPMethod\": func(method string) string {\n\t\t\treturn httpMethods[method]\n\t\t},\n\t}\n\n\t_ = template.Must(handlerTemplate.New(\"client-rpc-request-func\").Funcs(funcMap).Parse(`\n{{ $AllowPatchFeature := .AllowPatchFeature }}\n{{ $UseOpaqueAPI := .UseOpaqueAPI }}\n{{ if .HasQueryParam }}\nvar filter_{{ .Method.Service.GetName }}_{{ .Method.GetName }}_{{ .Index }} = {{ .QueryParamFilter }}\n{{ end }}\n{{ template \"request-func-signature\" . }} {\n\tvar (\n\t\tprotoReq {{ .Method.RequestType.GoType .Method.Service.File.GoPkg.Path }}\n\t\tmetadata runtime.ServerMetadata\n{{- if .PathParams }}\n{{- if .HasEnumPathParam }}\n\t\te int32\n{{- end }}\n{{- if .HasRepeatedEnumPathParam }}\n\t\tes []int32\n{{- end }}\n\t\terr error\n{{- end }}\n\t)\n{{- if .Body }}\n\t{{- $isFieldMask := and $AllowPatchFeature (eq (.HTTPMethod) \"PATCH\") (.FieldMaskField) (not (eq \"*\" .GetBodyFieldPath)) }}\n\t{{- if $isFieldMask }}\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\t{{- end }}\n\t{{- $protoReq := .Body.AssignableExprPrep \"protoReq\" .Method.Service.File.GoPkg.Path -}}\n\t{{- if ne \"\" $protoReq }}\n\t{{printf \"%s\" $protoReq }}\n\t{{- end }}\n\t{{- if not $isFieldMask }}\n\t{{- if $UseOpaqueAPI }}\n\t{{- if eq \"*\" .GetBodyFieldPath }}\n\tvar bodyData {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tproto.Merge(&protoReq, &bodyData)\n\t{{- else }}\n\tbodyData := &{{ .GetBodyFieldType }}{}\n\tif err := marshaler.NewDecoder(req.Body).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.Set{{ .GetBodyFieldStructName }}(bodyData)\n\t{{- end }}\n\t{{- else }}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&{{.Body.AssignableExpr \"protoReq\" .Method.Service.File.GoPkg.Path}}); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\t{{- end }}\n\tif req.Body != nil {\n\t\t_, _  = io.Copy(io.Discard, req.Body)\n\t}\n\t{{- end }}\n\t{{- if $isFieldMask }}\n\t{{- if $UseOpaqueAPI }}\n\t{{- if eq \"*\" .GetBodyFieldPath }}\n\tvar bodyData {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tproto.Merge(&protoReq, &bodyData)\n\t{{- else }}\n\tbodyData := &{{ .GetBodyFieldType }}{}\n\tif err := marshaler.NewDecoder(newReader()).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.Set{{ .GetBodyFieldStructName }}(bodyData)\n\t{{- end }}\n\t{{- else }}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&{{ .Body.AssignableExpr \"protoReq\" .Method.Service.File.GoPkg.Path }}); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\t{{- end }}\n\tif req.Body != nil {\n\t\t_, _  = io.Copy(io.Discard, req.Body)\n\t}\n\t{{- if $UseOpaqueAPI }}\n\tif !protoReq.Has{{ .FieldMaskField }}() || len(protoReq.Get{{ .FieldMaskField }}().GetPaths()) == 0 {\n\t\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Get{{ .GetBodyFieldStructName }}()); err != nil {\n\t\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t\t} else {\n\t\t\t\tprotoReq.Set{{ .FieldMaskField }}(fieldMask)\n\t\t\t}\n\t}\n\t{{- else }}\n\tif protoReq.{{ .FieldMaskField }} == nil || len(protoReq.{{ .FieldMaskField }}.GetPaths()) == 0 {\n\t\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.{{ .GetBodyFieldStructName }}); err != nil {\n\t\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t\t} else {\n\t\t\t\tprotoReq.{{ .FieldMaskField }} = fieldMask\n\t\t\t}\n\t}\n\t{{- end }}\n\t{{- end }}\n{{- else }}\n\tif req.Body != nil {\n\t\t_, _  = io.Copy(io.Discard, req.Body)\n\t}\n{{- end }}\n{{- if .PathParams }}\n\t{{- $binding := . }}\n\t{{- range $index, $param := .PathParams }}\n\t{{- $enum := $binding.LookupEnum $param }}\n\tval, ok {{ if eq $index 0 }}:{{ end }}= pathParams[{{ $param | printf \"%q\" }}]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", {{ $param | printf \"%q\"}})\n\t}\n{{- if $param.IsNestedProto3 }}\n\terr = runtime.PopulateFieldFromPath(&protoReq, {{ $param | printf \"%q\" }}, val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\" }}, err)\n\t}\n\t{{- if $enum }}\n\t\te{{ if $param.IsRepeated }}s{{ end }}, err = {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }}, {{ $enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier }}_value)\n\t\tif err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t\t}\n\t{{- end }}\n{{- else if $enum }}\n\te{{ if $param.IsRepeated }}s{{ end }}, err = {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }}, {{ $enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier }}_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t}\n{{- else -}}\n\t{{- $protoReq := $param.AssignableExprPrep \"protoReq\" $binding.Method.Service.File.GoPkg.Path -}}\n\t{{- if ne \"\" $protoReq }}\n\t{{ printf \"%s\" $protoReq }}\n\t{{- end}}\n\t{{- if $UseOpaqueAPI }}\n\tconverted{{ $param.FieldPath.String | camelIdentifier }}, err := {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }})\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t}\n\t{{ opaqueSetter $param.FieldPath \"protoReq\" }}(converted{{ $param.FieldPath.String | camelIdentifier }})\n\t{{- else }}\n\t{{ $param.AssignableExpr \"protoReq\" $binding.Method.Service.File.GoPkg.Path }}, err = {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }})\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t}\n\t{{- end }}\n{{- end}}\n{{- if and $enum $param.IsRepeated }}\n\ts := make([]{{ $enum.GoType $param.Method.Service.File.GoPkg.Path }}, len(es))\n\tfor i, v := range es {\n\t\ts[i] = {{ $enum.GoType $param.Method.Service.File.GoPkg.Path}}(v)\n\t}\n\t{{- if $UseOpaqueAPI }}\n\t{{ opaqueSetter $param.FieldPath \"protoReq\" }}(s)\n\t{{- else }}\n\t{{ $param.AssignableExpr \"protoReq\" $binding.Method.Service.File.GoPkg.Path }} = s\n\t{{- end }}\n{{- else if $enum}}\n\t{{- if $UseOpaqueAPI }}\n\t{{ opaqueSetter $param.FieldPath \"protoReq\" }}({{ $enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier }}(e))\n\t{{- else }}\n\t{{ $param.AssignableExpr \"protoReq\" $binding.Method.Service.File.GoPkg.Path }} = {{ $enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier }}(e)\n\t{{- end }}\n{{- end}}\n\t{{- end }}\n{{- end }}\n{{- if .HasQueryParam }}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_{{ .Method.Service.GetName }}_{{ .Method.GetName }}_{{ .Index }}); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n{{- end }}\n{{- if .Method.GetServerStreaming }}\n\tstream, err := client.{{ .Method.GetName }}(ctx, &protoReq)\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\theader, err := stream.Header()\n\tif err != nil {\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n{{- else }}\n\tmsg, err := client.{{ .Method.GetName }}(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n{{- end }}\n}`))\n\n\t_ = template.Must(handlerTemplate.New(\"bidi-streaming-request-func\").Parse(`\n{{ template \"request-func-signature\" . }} {\n\tvar metadata runtime.ServerMetadata\n\tstream, err := client.{{ .Method.GetName }}(ctx)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to start streaming: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tdec := marshaler.NewDecoder(req.Body)\n\thandleSend := func() error {\n\t\tvar protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}}\n\t\terr := dec.Decode(&protoReq)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn err\n\t\t}\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to decode request: %v\", err)\n\t\t\treturn status.Errorf(codes.InvalidArgument, \"Failed to decode request: %v\", err)\n\t\t}\n\t\tif err := stream.Send(&protoReq); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to send request: %v\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\tgo func() {\n\t\tfor {\n\t\t\tif err := handleSend(); err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif err := stream.CloseSend(); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to terminate client stream: %v\", err)\n\t\t}\n\t}()\n\theader, err := stream.Header()\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to get header from client: %v\", err)\n\t\treturn nil, metadata, err\n\t}\n\tmetadata.HeaderMD = header\n\treturn stream, metadata, nil\n}\n`))\n\n\tlocalHandlerTemplate = template.Must(template.New(\"local-handler\").Parse(`\n{{ if and .Method.GetClientStreaming .Method.GetServerStreaming }}\n{{ else if .Method.GetClientStreaming }}\n{{ else if .Method.GetServerStreaming }}\n{{ else}}\n{{ template \"local-client-rpc-request-func\" . }}\n{{ end }}\n`))\n\n\t_ = template.Must(localHandlerTemplate.New(\"local-request-func-signature\").Parse(strings.ReplaceAll(`\n{{ if .Method.GetServerStreaming }}\n{{ else }}\nfunc local_request_{{ .Method.Service.GetName }}_{{ .Method.GetName }}_{{ .Index }}(ctx context.Context, marshaler runtime.Marshaler, server {{ .Method.Service.InstanceName }}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error)\n{{ end }}`, \"\\n\", \"\")))\n\n\t_ = template.Must(localHandlerTemplate.New(\"local-client-rpc-request-func\").Funcs(funcMap).Parse(`\n{{ $AllowPatchFeature := .AllowPatchFeature }}\n{{ $UseOpaqueAPI := .UseOpaqueAPI }}\n{{ template \"local-request-func-signature\" . }} {\n\tvar (\n\t\tprotoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}}\n\t\tmetadata runtime.ServerMetadata\n{{- if .PathParams }}\n{{- if .HasEnumPathParam }}\n\t\te int32\n{{- end }}\n{{- if .HasRepeatedEnumPathParam }}\n\t\tes []int32\n{{- end }}\n\t\terr error\n{{- end }}\n\t)\n{{- if .Body }}\n\t{{- $isFieldMask := and $AllowPatchFeature (eq (.HTTPMethod) \"PATCH\") (.FieldMaskField) (not (eq \"*\" .GetBodyFieldPath)) }}\n\t{{- if $isFieldMask }}\n\tnewReader, berr := utilities.IOReaderFactory(req.Body)\n\tif berr != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", berr)\n\t}\n\t{{- end }}\n\t{{- $protoReq := .Body.AssignableExprPrep \"protoReq\" .Method.Service.File.GoPkg.Path -}}\n\t{{- if ne \"\" $protoReq }}\n\t{{ printf \"%s\" $protoReq }}\n\t{{- end }}\n\t{{- if not $isFieldMask }}\n\t{{- if $UseOpaqueAPI }}\n\t{{- if eq \"*\" .GetBodyFieldPath }}\n\tvar bodyData {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tproto.Merge(&protoReq, &bodyData)\n\t{{- else }}\n\tbodyData := &{{ .GetBodyFieldType }}{}\n\tif err := marshaler.NewDecoder(req.Body).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.Set{{ .GetBodyFieldStructName }}(bodyData)\n\t{{- end }}\n\t{{- else }}\n\tif err := marshaler.NewDecoder(req.Body).Decode(&{{ .Body.AssignableExpr \"protoReq\" .Method.Service.File.GoPkg.Path }}); err != nil && !errors.Is(err, io.EOF)  {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\t{{- end }}\n\t{{- end }}\n\t{{- if $isFieldMask }}\n\t{{- if $UseOpaqueAPI }}\n\t{{- if eq \"*\" .GetBodyFieldPath }}\n\tvar bodyData {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tproto.Merge(&protoReq, &bodyData)\n\t{{- else }}\n\tbodyData := &{{ .GetBodyFieldType }}{}\n\tif err := marshaler.NewDecoder(newReader()).Decode(bodyData); err != nil && !errors.Is(err, io.EOF) {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tprotoReq.Set{{ .GetBodyFieldStructName }}(bodyData)\n\t{{- end }}\n\t{{- else }}\n\tif err := marshaler.NewDecoder(newReader()).Decode(&{{ .Body.AssignableExpr \"protoReq\" .Method.Service.File.GoPkg.Path }}); err != nil && !errors.Is(err, io.EOF)  {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\t{{- end }}\n\t{{- if $UseOpaqueAPI }}\n\tif !protoReq.Has{{ .FieldMaskField }}() || len(protoReq.Get{{ .FieldMaskField }}().GetPaths()) == 0 {\n\t\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Get{{ .GetBodyFieldStructName }}()); err != nil {\n\t\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t\t} else {\n\t\t\t\tprotoReq.Set{{ .FieldMaskField }}(fieldMask)\n\t\t\t}\n\t}\n\t{{- else }}\n\tif protoReq.{{ .FieldMaskField }} == nil || len(protoReq.{{ .FieldMaskField }}.GetPaths()) == 0 {\n\t\t\tif fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.{{ .GetBodyFieldStructName }}); err != nil {\n\t\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t\t\t} else {\n\t\t\t\tprotoReq.{{.FieldMaskField}} = fieldMask\n\t\t\t}\n\t}\n\t{{- end }}\n\t{{- end }}\n{{- end }}\n{{- if .PathParams}}\n\t{{- $binding := .}}\n\t{{- range $index, $param := .PathParams}}\n\t{{- $enum := $binding.LookupEnum $param}}\n\tval, ok {{if eq $index 0}}:{{ end }}= pathParams[{{ $param | printf \"%q\"}}]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", {{ $param | printf \"%q\" }})\n\t}\n{{- if $param.IsNestedProto3 }}\n\terr = runtime.PopulateFieldFromPath(&protoReq, {{ $param | printf \"%q\"}}, val)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t}\n\t{{- if $enum }}\n\t\te{{ if $param.IsRepeated }}s{{ end }}, err = {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }}, {{ $enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier }}_value)\n\t\tif err != nil {\n\t\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"could not parse path as enum value, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t\t}\n\t{{- end }}\n{{- else if $enum}}\n\te{{ if $param.IsRepeated }}s{{ end }}, err = {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }}, {{ $enum.GoType  $param.Method.Service.File.GoPkg.Path | camelIdentifier }}_value)\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t}\n{{- else}}\n\t{{- $protoReq := $param.AssignableExprPrep \"protoReq\" $binding.Method.Service.File.GoPkg.Path -}}\n\t{{- if ne \"\" $protoReq }}\n\t{{ printf \"%s\" $protoReq }}\n\t{{- end}}\n\t{{- if $UseOpaqueAPI }}\n\tconverted{{ $param.FieldPath.String | camelIdentifier }}, err := {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }})\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\"}}, err)\n\t}\n\t{{ opaqueSetter $param.FieldPath \"protoReq\" }}(converted{{ $param.FieldPath.String | camelIdentifier }})\n\t{{- else }}\n\t{{ $param.AssignableExpr \"protoReq\" $binding.Method.Service.File.GoPkg.Path }}, err = {{ $param.ConvertFuncExpr }}(val{{ if $param.IsRepeated }}, {{ $binding.Registry.GetRepeatedPathParamSeparator | printf \"%c\" | printf \"%q\" }}{{ end }})\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", {{ $param | printf \"%q\" }}, err)\n\t}\n\t{{- end }}\n{{- end}}\n{{- if and $enum $param.IsRepeated }}\n\ts := make([]{{ $enum.GoType $param.Method.Service.File.GoPkg.Path }}, len(es))\n\tfor i, v := range es {\n\t\ts[i] = {{ $enum.GoType $param.Method.Service.File.GoPkg.Path }}(v)\n\t}\n\t{{- if $UseOpaqueAPI }}\n\t{{ opaqueSetter $param.FieldPath \"protoReq\" }}(s)\n\t{{- else }}\n\t{{ $param.AssignableExpr \"protoReq\" $binding.Method.Service.File.GoPkg.Path }} = s\n\t{{- end }}\n{{- else if $enum }}\n\t{{- if $UseOpaqueAPI }}\n\t{{ opaqueSetter $param.FieldPath \"protoReq\" }}({{ $enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier }}(e))\n\t{{- else }}\n\t{{ $param.AssignableExpr \"protoReq\" $binding.Method.Service.File.GoPkg.Path }} = {{ $enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier }}(e)\n\t{{- end }}\n{{- end }}\n\t{{- end }}\n{{- end }}\n{{- if .HasQueryParam }}\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_{{ .Method.Service.GetName }}_{{ .Method.GetName }}_{{ .Index }}); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n{{- end}}\n{{- if .Method.GetServerStreaming }}\n\t// TODO\n{{- else}}\n\tmsg, err := server.{{ .Method.GetName }}(ctx, &protoReq)\n\treturn msg, metadata, err\n{{- end}}\n}`))\n\n\tlocalTrailerTemplate = template.Must(template.New(\"local-trailer\").Funcs(funcMap).Parse(`\n{{ $UseRequestContext := .UseRequestContext }}\n{{ range $svc := .Services }}\n// Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}Server registers the http handlers for service {{ $svc.GetName }} to \"mux\".\n// UnaryRPC     :call {{ $svc.GetName }}Server directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}FromEndpoint instead.\n// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the \"runtime.WithMiddlewares\" option in the \"runtime.NewServeMux\" call.\nfunc Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}Server(ctx context.Context, mux *runtime.ServeMux, server {{ $svc.InstanceName }}Server) error {\n\t{{- range $m := $svc.Methods }}\n\t{{- range $b := $m.Bindings }}\n\t{{- if or $m.GetClientStreaming $m.GetServerStreaming }}\n\tmux.Handle({{ $b.HTTPMethod | toHTTPMethod }}, pattern_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\terr := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")\n\t\t_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\treturn\n\t})\n\t{{- else -}}\n\tmux.Handle({{ $b.HTTPMethod | toHTTPMethod}}, pattern_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t{{- if $UseRequestContext }}\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t{{- else -}}\n\t\tctx, cancel := context.WithCancel(ctx)\n\t{{- end }}\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\t{{- if $b.PathTmpl }}\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/{{ $svc.File.GetPackage }}.{{ $svc.GetName }}/{{ $m.GetName }}\", runtime.WithHTTPPathPattern(\"{{ $b.PathTmpl.Template }}\"))\n\t\t{{- else -}}\n\t\tannotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, \"/{{ $svc.File.GetPackage }}.{{ $svc.GetName }}/{{ $m.GetName }}\")\n\t\t{{- end }}\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\t{{- if $b.ResponseBody }}\n\t\tforward_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, mux, outboundMarshaler, w, req, response_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}{resp.(*{{ $m.ResponseType.GoType $m.Service.File.GoPkg.Path }})}, mux.GetForwardResponseOptions()...)\n\t\t{{- else }}\n\t\tforward_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t\t{{- end }}\n\t})\n\t{{- end }}\n\t{{ end }}\n\t{{- end }}\n\treturn nil\n}\n{{ end }}`))\n\n\ttrailerTemplate = template.Must(template.New(\"trailer\").Funcs(funcMap).Parse(`\n{{ $UseRequestContext := .UseRequestContext }}\n{{ $UseOpaqueAPI := .UseOpaqueAPI }}\n{{range $svc := .Services}}\n// Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}FromEndpoint is same as Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }} but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}FromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.NewClient(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Errorf(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\treturn Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}(ctx, mux, conn)\n}\n\n// Register{{ $svc.GetName}}{{ $.RegisterFuncSuffix}} registers the http handlers for service {{ $svc.GetName }} to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}Client(ctx, mux, {{ $svc.ClientConstructorName }}(conn))\n}\n\n// Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}Client registers the http handlers for service {{ $svc.GetName }}\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"{{ $svc.InstanceName }}Client\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"{{ $svc.InstanceName }}Client\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"{{ $svc.InstanceName }}Client\" to call the correct interceptors. This client ignores the HTTP middlewares.\nfunc Register{{ $svc.GetName }}{{ $.RegisterFuncSuffix }}Client(ctx context.Context, mux *runtime.ServeMux, client {{ $svc.InstanceName }}Client) error {\n\t{{- range $m := $svc.Methods }}\n\t{{- range $b := $m.Bindings }}\n\tmux.Handle({{ $b.HTTPMethod | toHTTPMethod }}, pattern_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t{{- if $UseRequestContext }}\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t{{- else -}}\n\t\tctx, cancel := context.WithCancel(ctx)\n\t{{- end }}\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\t{{- if $b.PathTmpl }}\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/{{ $svc.File.GetPackage }}.{{ $svc.GetName }}/{{ $m.GetName }}\", runtime.WithHTTPPathPattern(\"{{ $b.PathTmpl.Template}}\"))\n\t\t{{- else -}}\n\t\tannotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/{{ $svc.File.GetPackage }}.{{ $svc.GetName }}/{{ $m.GetName }}\")\n\t\t{{- end }}\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, inboundMarshaler, client, req, pathParams)\n\t\tannotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\t{{- if $m.GetServerStreaming }}\n\t\t{{- if $b.ResponseBody }}\n\t\tforward_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) {\n\t\t\tres, err := resp.Recv()\n\t\t\treturn response_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}{res}, err\n\t\t}, mux.GetForwardResponseOptions()...)\n\t\t{{- else }}\n\t\tforward_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)\n\t\t{{- end }}\n\t\t{{- else }}\n\t\t{{- if $b.ResponseBody }}\n\t\tforward_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, mux, outboundMarshaler, w, req, response_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}{resp.(*{{ $m.ResponseType.GoType $m.Service.File.GoPkg.Path }})}, mux.GetForwardResponseOptions()...)\n\t\t{{- else }}\n\t\tforward_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t\t{{- end }}\n\t\t{{- end }}\n\t})\n\t{{- end }}\n\t{{- end }}\n\treturn nil\n}\n\n{{range $m := $svc.Methods}}\n{{range $b := $m.Bindings}}\n{{if $b.ResponseBody}}\ntype response_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }} struct {\n\t*{{ $m.ResponseType.GoType $m.Service.File.GoPkg.Path }}\n}\n\nfunc (m response_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }}) XXX_ResponseBody() interface{} {\n\tresponse := m.{{ $m.ResponseType.GetName }}\n\t{{- if $UseOpaqueAPI }}\n\t{{- if eq \"*\" $b.ResponseBody.FieldPath.String }}\n\treturn response\n\t{{- else }}\n\treturn response.Get{{ $b.ResponseBody.FieldPath.String | camelIdentifier }}()\n\t{{- end }}\n\t{{- else }}\n\treturn {{ $b.ResponseBody.AssignableExpr \"response\" $m.Service.File.GoPkg.Path }}\n\t{{- end }}\n}\n{{ end }}\n{{ end }}\n{{ end }}\n\nvar (\n\t{{- range $m := $svc.Methods }}\n\t{{- range $b := $m.Bindings }}\n\tpattern_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }} = runtime.MustPattern(runtime.NewPattern({{ $b.PathTmpl.Version }}, {{ $b.PathTmpl.OpCodes | printf \"%#v\" }}, {{ $b.PathTmpl.Pool | printf \"%#v\" }}, {{ $b.PathTmpl.Verb | printf \"%q\" }}))\n\t{{- end }}\n\t{{- end }}\n)\n\nvar (\n\t{{- range $m := $svc.Methods }}\n\t{{- range $b := $m.Bindings }}\n\tforward_{{ $svc.GetName }}_{{ $m.GetName }}_{{ $b.Index }} = {{ if $m.GetServerStreaming }}runtime.ForwardResponseStream{{ else }}runtime.ForwardResponseMessage{{ end }}\n\t{{- end }}\n\t{{- end }}\n)\n{{ end }}`))\n)\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/internal/gengateway/template_test.go",
    "content": "package gengateway\n\nimport (\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nfunc crossLinkFixture(f *descriptor.File) *descriptor.File {\n\tfor _, m := range f.Messages {\n\t\tm.File = f\n\t}\n\tfor _, svc := range f.Services {\n\t\tsvc.File = f\n\t\tfor _, m := range svc.Methods {\n\t\t\tm.Service = svc\n\t\t\tfor _, b := range m.Bindings {\n\t\t\t\tb.Method = m\n\t\t\t\tfor _, param := range b.PathParams {\n\t\t\t\t\tparam.Method = m\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn f\n}\n\nfunc compilePath(t *testing.T, path string) httprule.Template {\n\tparsed, err := httprule.Parse(path)\n\tif err != nil {\n\t\tt.Fatalf(\"httprule.Parse(%q) failed with %v; want success\", path, err)\n\t}\n\treturn parsed.Compile()\n}\n\nfunc TestApplyTemplateHeader(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\tPackage:     proto.String(\"example\"),\n\t\t\tDependency:  []string{\"a.example/b/c.proto\", \"a.example/d/e.proto\"},\n\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tgot, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: true}, descriptor.NewRegistry())\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tif want := \"package example_pb\\n\"; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `grpclog.Errorf(\"Failed`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `mux.Handle(http.MethodGet,`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n}\n\nfunc TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\"NestedMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tnesteddesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestedMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"int32\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"bool\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Echo\"),\n\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\tOutputType:      proto.String(\"ExampleMessage\"),\n\t\tClientStreaming: proto.Bool(false),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tfor _, spec := range []struct {\n\t\tserverStreaming bool\n\t\tsigWant         string\n\t}{\n\t\t{\n\t\t\tserverStreaming: false,\n\t\t\tsigWant:         `func request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ExampleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {`,\n\t\t},\n\t\t{\n\t\t\tserverStreaming: true,\n\t\t\tsigWant:         `func request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ExampleServiceClient, req *http.Request, pathParams map[string]string) (ExampleService_EchoClient, runtime.ServerMetadata, error) {`,\n\t\t},\n\t} {\n\t\tmeth.ServerStreaming = proto.Bool(spec.serverStreaming)\n\n\t\tmsg := &descriptor.Message{\n\t\t\tDescriptorProto: msgdesc,\n\t\t}\n\t\tnested := &descriptor.Message{\n\t\t\tDescriptorProto: nesteddesc,\n\t\t}\n\n\t\tnestedField := &descriptor.Field{\n\t\t\tMessage:              msg,\n\t\t\tFieldDescriptorProto: msg.GetField()[0],\n\t\t}\n\t\tintField := &descriptor.Field{\n\t\t\tMessage:              nested,\n\t\t\tFieldDescriptorProto: nested.GetField()[0],\n\t\t}\n\t\tboolField := &descriptor.Field{\n\t\t\tMessage:              nested,\n\t\t\tFieldDescriptorProto: nested.GetField()[1],\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\t\tPackage:     proto.String(\"example\"),\n\t\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc},\n\t\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{msg, nested},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"int32\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"bool\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: boolField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tgot, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: true}, descriptor.NewRegistry())\n\t\tif err != nil {\n\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\t\tif want := spec.sigWant; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `marshaler.NewDecoder(req.Body).Decode(&protoReq.GetNested().Bool)`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `val, ok := pathParams[\"nested.int32\"]`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `protoReq.GetNested().Int32, err = runtime.Int32P(val)`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), \"\"))`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, \"/example.ExampleService/Echo\", runtime.WithHTTPPathPattern(\"/v1\"))`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `grpclog.Errorf(\"Failed`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `mux.Handle(http.MethodPost,`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t}\n}\n\nfunc TestApplyTemplateOpaquePathParams(t *testing.T) {\n\tenumDesc := &descriptorpb.EnumDescriptorProto{\n\t\tName: proto.String(\"Color\"),\n\t\tValue: []*descriptorpb.EnumValueDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"COLOR_UNSPECIFIED\"),\n\t\t\t\tNumber: proto.Int32(0),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"COLOR_RED\"),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\n\tbaseField := &descriptorpb.FieldDescriptorProto{\n\t\tName:   proto.String(\"kind\"),\n\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\tNumber: proto.Int32(1),\n\t}\n\tenumField := proto.Clone(baseField).(*descriptorpb.FieldDescriptorProto)\n\tenumField.Type = descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum()\n\tenumField.TypeName = proto.String(\".example.Color\")\n\n\ttcs := map[string]struct {\n\t\tfield      *descriptorpb.FieldDescriptorProto\n\t\tenumDesc   *descriptorpb.EnumDescriptorProto\n\t\thttpMethod string\n\t\texpect     string\n\t}{\n\t\t\"scalar GET\": {\n\t\t\tfield:      baseField,\n\t\t\thttpMethod: \"GET\",\n\t\t\texpect:     \"protoReq.SetKind(convertedKind)\",\n\t\t},\n\t\t\"enum PATCH\": {\n\t\t\tfield:      enumField,\n\t\t\tenumDesc:   enumDesc,\n\t\t\thttpMethod: \"PATCH\",\n\t\t\texpect:     \"protoReq.SetKind(Color(e))\",\n\t\t},\n\t}\n\n\tfor name, tc := range tcs {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tproto.Clone(tc.field).(*descriptorpb.FieldDescriptorProto),\n\t\t\t\t},\n\t\t\t}\n\t\t\tif tc.enumDesc != nil {\n\t\t\t\tmsgdesc.EnumType = []*descriptorpb.EnumDescriptorProto{proto.Clone(tc.enumDesc).(*descriptorpb.EnumDescriptorProto)}\n\t\t\t}\n\n\t\t\tfileDesc := &descriptorpb.FileDescriptorProto{\n\t\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\t\tPackage:     proto.String(\"example\"),\n\t\t\t\tSyntax:      proto.String(\"proto3\"),\n\t\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"example.com/path/to/example/example.pb;example_pb\"),\n\t\t\t\t},\n\t\t\t}\n\t\t\tif tc.enumDesc != nil {\n\t\t\t\tfileDesc.EnumType = []*descriptorpb.EnumDescriptorProto{proto.Clone(tc.enumDesc).(*descriptorpb.EnumDescriptorProto)}\n\t\t\t}\n\n\t\t\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\t\t\tName:       proto.String(\"DoThing\"),\n\t\t\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\t\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t\t\t}\n\t\t\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t\t\t}\n\n\t\t\tmsg := &descriptor.Message{\n\t\t\t\tDescriptorProto: msgdesc,\n\t\t\t}\n\t\t\tfield := &descriptor.Field{\n\t\t\t\tMessage:              msg,\n\t\t\t\tFieldDescriptorProto: msgdesc.Field[0],\n\t\t\t}\n\t\t\tmsg.Fields = []*descriptor.Field{field}\n\n\t\t\tfile := descriptor.File{\n\t\t\t\tFileDescriptorProto: fileDesc,\n\t\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\t\tName: \"example_pb\",\n\t\t\t\t},\n\t\t\t\tMessages: []*descriptor.Message{msg},\n\t\t\t\tServices: []*descriptor.Service{\n\t\t\t\t\t{\n\t\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tHTTPMethod: tc.httpMethod,\n\t\t\t\t\t\t\t\t\t\tPathTmpl:   compilePath(t, \"/v1/{kind}\"),\n\t\t\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"kind\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: field,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: field,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\n\t\t\treg := descriptor.NewRegistry()\n\t\t\treq := &pluginpb.CodeGeneratorRequest{\n\t\t\t\tFileToGenerate: []string{\"example.proto\"},\n\t\t\t\tProtoFile:      []*descriptorpb.FileDescriptorProto{fileDesc},\n\t\t\t}\n\t\t\tif err := reg.Load(req); err != nil {\n\t\t\t\tt.Fatalf(\"registry load failed: %v\", err)\n\t\t\t}\n\n\t\t\tcloned := crossLinkFixture(&file)\n\t\t\tcloned.Services[0].Methods[0].Bindings[0].PathParams[0].Method = cloned.Services[0].Methods[0]\n\n\t\t\tgot, err := applyTemplate(param{\n\t\t\t\tFile:               cloned,\n\t\t\t\tRegisterFuncSuffix: \"Handler\",\n\t\t\t\tAllowPatchFeature:  true,\n\t\t\t\tUseOpaqueAPI:       true,\n\t\t\t}, reg)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"applyTemplate failed: %v\", err)\n\t\t\t}\n\n\t\t\tif !strings.Contains(got, tc.expect) {\n\t\t\t\tt.Fatalf(\"generated code missing %q: %s\", tc.expect, got)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestApplyTemplateRequestWithClientStreaming(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\"NestedMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tnesteddesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestedMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"int32\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"bool\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Echo\"),\n\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\tOutputType:      proto.String(\"ExampleMessage\"),\n\t\tClientStreaming: proto.Bool(true),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tfor _, spec := range []struct {\n\t\tserverStreaming bool\n\t\tsigWant         string\n\t}{\n\t\t{\n\t\t\tserverStreaming: false,\n\t\t\tsigWant:         `func request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ExampleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {`,\n\t\t},\n\t\t{\n\t\t\tserverStreaming: true,\n\t\t\tsigWant:         `func request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ExampleServiceClient, req *http.Request, pathParams map[string]string) (ExampleService_EchoClient, runtime.ServerMetadata, error) {`,\n\t\t},\n\t} {\n\t\tmeth.ServerStreaming = proto.Bool(spec.serverStreaming)\n\n\t\tmsg := &descriptor.Message{\n\t\t\tDescriptorProto: msgdesc,\n\t\t}\n\t\tnested := &descriptor.Message{\n\t\t\tDescriptorProto: nesteddesc,\n\t\t}\n\n\t\tnestedField := &descriptor.Field{\n\t\t\tMessage:              msg,\n\t\t\tFieldDescriptorProto: msg.GetField()[0],\n\t\t}\n\t\tintField := &descriptor.Field{\n\t\t\tMessage:              nested,\n\t\t\tFieldDescriptorProto: nested.GetField()[0],\n\t\t}\n\t\tboolField := &descriptor.Field{\n\t\t\tMessage:              nested,\n\t\t\tFieldDescriptorProto: nested.GetField()[1],\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\t\tPackage:     proto.String(\"example\"),\n\t\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc},\n\t\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{msg, nested},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion: 1,\n\t\t\t\t\t\t\t\t\t\tOpCodes: []int{0, 0},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"int32\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"bool\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: boolField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tgot, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: true}, descriptor.NewRegistry())\n\t\tif err != nil {\n\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\t\tif want := spec.sigWant; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), \"\"))`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `grpclog.Errorf(\"Failed`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `mux.Handle(http.MethodPost,`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t}\n}\n\nfunc TestApplyTemplateInProcess(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\"NestedMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tnesteddesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestedMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"int32\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"bool\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Echo\"),\n\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\tOutputType:      proto.String(\"ExampleMessage\"),\n\t\tClientStreaming: proto.Bool(true),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tfor _, spec := range []struct {\n\t\tclientStreaming bool\n\t\tserverStreaming bool\n\t\tsigWant         []string\n\t}{\n\t\t{\n\t\t\tclientStreaming: false,\n\t\t\tserverStreaming: false,\n\t\t\tsigWant: []string{\n\t\t\t\t`func local_request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server ExampleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {`,\n\t\t\t\t`resp, md, err := local_request_ExampleService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)`,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tclientStreaming: true,\n\t\t\tserverStreaming: true,\n\t\t\tsigWant: []string{\n\t\t\t\t`err := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")`,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tclientStreaming: true,\n\t\t\tserverStreaming: false,\n\t\t\tsigWant: []string{\n\t\t\t\t`err := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")`,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tclientStreaming: false,\n\t\t\tserverStreaming: true,\n\t\t\tsigWant: []string{\n\t\t\t\t`err := status.Error(codes.Unimplemented, \"streaming calls are not yet supported in the in-process transport\")`,\n\t\t\t},\n\t\t},\n\t} {\n\t\tmeth.ClientStreaming = proto.Bool(spec.clientStreaming)\n\t\tmeth.ServerStreaming = proto.Bool(spec.serverStreaming)\n\n\t\tmsg := &descriptor.Message{\n\t\t\tDescriptorProto: msgdesc,\n\t\t}\n\t\tnested := &descriptor.Message{\n\t\t\tDescriptorProto: nesteddesc,\n\t\t}\n\n\t\tnestedField := &descriptor.Field{\n\t\t\tMessage:              msg,\n\t\t\tFieldDescriptorProto: msg.GetField()[0],\n\t\t}\n\t\tintField := &descriptor.Field{\n\t\t\tMessage:              nested,\n\t\t\tFieldDescriptorProto: nested.GetField()[0],\n\t\t}\n\t\tboolField := &descriptor.Field{\n\t\t\tMessage:              nested,\n\t\t\tFieldDescriptorProto: nested.GetField()[1],\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\t\tPackage:     proto.String(\"example\"),\n\t\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc},\n\t\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{msg, nested},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion: 1,\n\t\t\t\t\t\t\t\t\t\tOpCodes: []int{0, 0},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"int32\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"bool\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: boolField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tgot, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: true}, descriptor.NewRegistry())\n\t\tif err != nil {\n\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\n\t\tfor _, want := range spec.sigWant {\n\t\t\tif !strings.Contains(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t\t}\n\t\t}\n\n\t\tif want := `func RegisterExampleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ExampleServiceServer) error {`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `grpclog.Errorf(\"Failed`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `mux.Handle(http.MethodPost,`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t}\n}\n\nfunc TestAllowPatchFeature(t *testing.T) {\n\tupdateMaskDesc := &descriptorpb.FieldDescriptorProto{\n\t\tName:     proto.String(\"UpdateMask\"),\n\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\tTypeName: proto.String(\".google.protobuf.FieldMask\"),\n\t\tNumber:   proto.Int32(1),\n\t}\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName:  proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{updateMaskDesc},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tupdateMaskField := &descriptor.Field{\n\t\tMessage:              msg,\n\t\tFieldDescriptorProto: updateMaskDesc,\n\t}\n\tmsg.Fields = append(msg.Fields, updateMaskField)\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\tPackage:     proto.String(\"example\"),\n\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"PATCH\",\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{FieldPath: descriptor.FieldPath{descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\tName:   \"abe\",\n\t\t\t\t\t\t\t\t\tTarget: msg.Fields[0],\n\t\t\t\t\t\t\t\t}}},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\twant := \"if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\\n\"\n\tfor _, allowPatchFeature := range []bool{true, false} {\n\t\tgot, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: allowPatchFeature}, descriptor.NewRegistry())\n\t\tif err != nil {\n\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\t\tif allowPatchFeature {\n\t\t\tif want := `marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe)`; !strings.Contains(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t\t}\n\t\t\tif !strings.Contains(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t\t}\n\t\t} else {\n\t\t\tif strings.Contains(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to _not_ contain %s\", file, got, want)\n\t\t\t}\n\t\t}\n\t\tif want := `grpclog.Errorf(\"Failed`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t\tif want := `mux.Handle(http.MethodPatch,`; !strings.Contains(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t\t}\n\t}\n}\n\nfunc TestIdentifierCapitalization(t *testing.T) {\n\tmsgdesc1 := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Exam_pleRequest\"),\n\t}\n\tmsgdesc2 := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"example_response\"),\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"ExampleGe2t\"),\n\t\tInputType:  proto.String(\"Exam_pleRequest\"),\n\t\tOutputType: proto.String(\"example_response\"),\n\t}\n\tmeth2 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Exampl_ePost\"),\n\t\tInputType:  proto.String(\"Exam_pleRequest\"),\n\t\tOutputType: proto.String(\"example_response\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"Example\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\tmsg1 := &descriptor.Message{\n\t\tDescriptorProto: msgdesc1,\n\t}\n\tmsg2 := &descriptor.Message{\n\t\tDescriptorProto: msgdesc2,\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\tPackage:     proto.String(\"example\"),\n\t\t\tDependency:  []string{\"a.example/b/c.proto\", \"a.example/d/e.proto\"},\n\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc1, msgdesc2},\n\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg1, msg2},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           msg1,\n\t\t\t\t\t\tResponseType:          msg1,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth2,\n\t\t\t\t\t\tRequestType:           msg2,\n\t\t\t\t\t\tResponseType:          msg2,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tgot, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: true}, descriptor.NewRegistry())\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tif want := `msg, err := client.ExampleGe2T(ctx, &protoReq, grpc.Header(&metadata.HeaderMD)`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `msg, err := client.ExamplEPost(ctx, &protoReq, grpc.Header(&metadata.HeaderMD)`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `var (\n\t\tprotoReq ExamPleRequest`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `var (\n\t\tprotoReq ExampleResponse`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `grpclog.Errorf(\"Failed`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `mux.Handle(http.MethodGet,`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n\tif want := `mux.Handle(http.MethodPost,`; !strings.Contains(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v) = %s; want to contain %s\", file, got, want)\n\t}\n}\n\nfunc TestDuplicatePathsInSameService(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tTypeName: proto.String(\".google.protobuf.StringValue\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Echo\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth2 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Echo2\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tbinding := &descriptor.Binding{\n\t\tIndex:      1,\n\t\tPathTmpl:   compilePath(t, \"/v1/example/echo\"),\n\t\tHTTPMethod: \"GET\",\n\t\tPathParams: nil,\n\t\tBody:       nil,\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\tPackage:     proto.String(\"example\"),\n\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings:              []*descriptor.Binding{binding},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth2,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings:              []*descriptor.Binding{binding},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\t_, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: true}, descriptor.NewRegistry())\n\tif err == nil {\n\t\tt.Errorf(\"applyTemplate(%#v) succeeded; want an error\", file)\n\t\treturn\n\t}\n}\n\nfunc TestDuplicatePathsInDifferentService(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tTypeName: proto.String(\".google.protobuf.StringValue\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Echo\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth2 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Echo2\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc1 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleServiceNumberOne\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\tsvc2 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleServiceNumberTwo\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tbinding := &descriptor.Binding{\n\t\tIndex:      1,\n\t\tPathTmpl:   compilePath(t, \"/v1/example/echo\"),\n\t\tHTTPMethod: \"GET\",\n\t\tPathParams: nil,\n\t\tBody:       nil,\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tName:        proto.String(\"example.proto\"),\n\t\t\tPackage:     proto.String(\"example\"),\n\t\t\tMessageType: []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:     []*descriptorpb.ServiceDescriptorProto{svc1, svc2},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc1,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings:              []*descriptor.Binding{binding},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc2,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth2,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings:              []*descriptor.Binding{binding},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\t_, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: \"Handler\", AllowPatchFeature: true}, descriptor.NewRegistry())\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed; want success - %s\", file, err)\n\t\treturn\n\t}\n}\n"
  },
  {
    "path": "protoc-gen-grpc-gateway/main.go",
    "content": "// Command protoc-gen-grpc-gateway is a plugin for Google protocol buffer\n// compiler to generate a reverse-proxy, which converts incoming RESTful\n// HTTP/1 requests gRPC invocation.\n// You rarely need to run this program directly. Instead, put this program\n// into your $PATH with a name \"protoc-gen-grpc-gateway\" and run\n//\n//\tprotoc --grpc-gateway_out=output_directory path/to/input.proto\n//\n// See README.md for more details.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime/debug\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/compiler/protogen\"\n)\n\nvar (\n\tregisterFuncSuffix         = flag.String(\"register_func_suffix\", \"Handler\", \"used to construct names of generated Register*<Suffix> methods.\")\n\tuseRequestContext          = flag.Bool(\"request_context\", true, \"determine whether to use http.Request's context or not\")\n\tallowDeleteBody            = flag.Bool(\"allow_delete_body\", false, \"unless set, HTTP DELETE methods may not have a body\")\n\tgrpcAPIConfiguration       = flag.String(\"grpc_api_configuration\", \"\", \"path to gRPC API Configuration in YAML format\")\n\t_                          = flag.Bool(\"allow_repeated_fields_in_body\", true, \"allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option. DEPRECATED: the value is ignored and always behaves as `true`.\")\n\trepeatedPathParamSeparator = flag.String(\"repeated_path_param_separator\", \"csv\", \"configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.\")\n\tallowPatchFeature          = flag.Bool(\"allow_patch_feature\", true, \"determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).\")\n\tomitPackageDoc             = flag.Bool(\"omit_package_doc\", false, \"if true, no package comment will be included in the generated code\")\n\tstandalone                 = flag.Bool(\"standalone\", false, \"generates a standalone gateway package, which imports the target service package\")\n\tversionFlag                = flag.Bool(\"version\", false, \"print the current version\")\n\twarnOnUnboundMethods       = flag.Bool(\"warn_on_unbound_methods\", false, \"emit a warning message if an RPC method has no HttpRule annotation\")\n\tgenerateUnboundMethods     = flag.Bool(\"generate_unbound_methods\", false, \"generate proxy methods even for RPC methods that have no HttpRule annotation\")\n\tuseOpaqueAPI               = flag.Bool(\"use_opaque_api\", false, \"generate code compatible with the new Opaque API instead of the older Open Struct API\")\n\n\t_ = flag.Bool(\"logtostderr\", false, \"Legacy glog compatibility. This flag is a no-op, you can safely remove it\")\n)\n\n// Variables set by goreleaser at build time\nvar (\n\tversion = \"dev\"\n\tcommit  = \"unknown\"\n\tdate    = \"unknown\"\n)\n\nfunc main() {\n\tflag.Parse()\n\n\tif *versionFlag {\n\t\tif commit == \"unknown\" {\n\t\t\tbuildInfo, ok := debug.ReadBuildInfo()\n\t\t\tif ok {\n\t\t\t\tversion = buildInfo.Main.Version\n\t\t\t\tfor _, setting := range buildInfo.Settings {\n\t\t\t\t\tif setting.Key == \"vcs.revision\" {\n\t\t\t\t\t\tcommit = setting.Value\n\t\t\t\t\t}\n\t\t\t\t\tif setting.Key == \"vcs.time\" {\n\t\t\t\t\t\tdate = setting.Value\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfmt.Printf(\"Version %v, commit %v, built at %v\\n\", version, commit, date)\n\t\tos.Exit(0)\n\t}\n\n\tprotogen.Options{\n\t\tParamFunc: flag.CommandLine.Set,\n\t}.Run(func(gen *protogen.Plugin) error {\n\t\treg := descriptor.NewRegistry()\n\n\t\tif err := applyFlags(reg); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tcodegenerator.SetSupportedFeaturesOnPluginGen(gen)\n\n\t\tgenerator := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *allowPatchFeature, *standalone, *useOpaqueAPI)\n\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Infof(\"Parsing code generator request\")\n\t\t}\n\n\t\tif err := reg.LoadFromPlugin(gen); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tunboundHTTPRules := reg.UnboundExternalHTTPRules()\n\t\tif len(unboundHTTPRules) != 0 {\n\t\t\treturn fmt.Errorf(\"HTTP rules without a matching selector: %s\", strings.Join(unboundHTTPRules, \", \"))\n\t\t}\n\n\t\ttargets := make([]*descriptor.File, 0, len(gen.Request.FileToGenerate))\n\t\tfor _, target := range gen.Request.FileToGenerate {\n\t\t\tf, err := reg.LookupFile(target)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttargets = append(targets, f)\n\t\t}\n\n\t\tfiles, err := generator.Generate(targets)\n\t\tfor _, f := range files {\n\t\t\tif grpclog.V(1) {\n\t\t\t\tgrpclog.Infof(\"NewGeneratedFile %q in %s\", f.GetName(), f.GoPkg)\n\t\t\t}\n\n\t\t\tgenFile := gen.NewGeneratedFile(f.GetName(), protogen.GoImportPath(f.GoPkg.Path))\n\t\t\tif _, err := genFile.Write([]byte(f.GetContent())); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Info(\"Processed code generator request\")\n\t\t}\n\n\t\treturn err\n\t})\n}\n\nfunc applyFlags(reg *descriptor.Registry) error {\n\tif *grpcAPIConfiguration != \"\" {\n\t\tif err := reg.LoadGrpcAPIServiceFromYAML(*grpcAPIConfiguration); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif *warnOnUnboundMethods && *generateUnboundMethods {\n\t\tgrpclog.Warningf(\"Option warn_on_unbound_methods has no effect when generate_unbound_methods is used.\")\n\t}\n\treg.SetStandalone(*standalone)\n\treg.SetAllowDeleteBody(*allowDeleteBody)\n\n\tflag.Visit(func(f *flag.Flag) {\n\t\tif f.Name == \"allow_repeated_fields_in_body\" {\n\t\t\tgrpclog.Warning(\"The `allow_repeated_fields_in_body` flag is deprecated and will always behave as `true`.\")\n\t\t}\n\t})\n\n\treg.SetOmitPackageDoc(*omitPackageDoc)\n\treg.SetWarnOnUnboundMethods(*warnOnUnboundMethods)\n\treg.SetGenerateUnboundMethods(*generateUnboundMethods)\n\treturn reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator)\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_binary\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:private\"])\n\ngo_library(\n    name = \"protoc-gen-openapiv2_lib\",\n    srcs = [\"main.go\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2\",\n    deps = [\n        \"//internal/codegenerator\",\n        \"//internal/descriptor\",\n        \"//protoc-gen-openapiv2/internal/genopenapi\",\n        \"//utilities\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n    ],\n)\n\ngo_binary(\n    name = \"protoc-gen-openapiv2\",\n    embed = [\":protoc-gen-openapiv2_lib\"],\n    visibility = [\"//visibility:public\"],\n)\n\ngo_test(\n    name = \"protoc-gen-openapiv2_test\",\n    size = \"small\",\n    srcs = [\"main_test.go\"],\n    embed = [\":protoc-gen-openapiv2_lib\"],\n)\n"
  },
  {
    "path": "protoc-gen-openapiv2/defs.bzl",
    "content": "\"\"\"Generated an open-api spec for a grpc api spec.\n\nReads the api spec in protobuf format and generate an open-api spec.\nOptionally applies settings from the grpc-service configuration.\n\"\"\"\n\nload(\"@rules_proto//proto:defs.bzl\", \"ProtoInfo\")\n\n# TODO(yannic): Replace with |proto_common.direct_source_infos| when\n# https://github.com/bazelbuild/rules_proto/pull/22 lands.\ndef _direct_source_infos(proto_info, provided_sources = []):\n    \"\"\"Returns sequence of `ProtoFileInfo` for `proto_info`'s direct sources.\n\n    Files that are both in `proto_info`'s direct sources and in\n    `provided_sources` are skipped. This is useful, e.g., for well-known\n    protos that are already provided by the Protobuf runtime.\n\n    Args:\n      proto_info: An instance of `ProtoInfo`.\n      provided_sources: Optional. A sequence of files to ignore.\n          Usually, these files are already provided by the\n          Protocol Buffer runtime (e.g. Well-Known protos).\n\n    Returns: A sequence of `ProtoFileInfo` containing information about\n        `proto_info`'s direct sources.\n    \"\"\"\n\n    source_root = proto_info.proto_source_root\n    if \".\" == source_root:\n        return [struct(file = src, import_path = src.path) for src in proto_info.check_deps_sources.to_list()]\n\n    offset = len(source_root) + 1  # + '/'.\n\n    infos = []\n    for src in proto_info.check_deps_sources.to_list():\n        # TODO(yannic): Remove this hack when we drop support for Bazel < 1.0.\n        local_offset = offset\n        if src.root.path and not source_root.startswith(src.root.path):\n            # Before Bazel 1.0, `proto_source_root` wasn't guaranteed to be a\n            # prefix of `src.path`. This could happened, e.g., if `file` was\n            # generated (https://github.com/bazelbuild/bazel/issues/9215).\n            local_offset += len(src.root.path) + 1  # + '/'.\n        infos.append(struct(file = src, import_path = src.path[local_offset:]))\n\n    return infos\n\ndef _run_proto_gen_openapi(\n        actions,\n        proto_info,\n        target_name,\n        transitive_proto_srcs,\n        protoc,\n        protoc_gen_openapiv2,\n        single_output,\n        allow_delete_body,\n        grpc_api_configuration,\n        json_names_for_fields,\n        repeated_path_param_separator,\n        include_package_in_tags,\n        fqn_for_openapi_name,\n        openapi_naming_strategy,\n        use_go_templates,\n        go_template_args,\n        ignore_comments,\n        remove_internal_comments,\n        disable_default_errors,\n        disable_service_tags,\n        enums_as_ints,\n        omit_enum_default_value,\n        output_format,\n        simple_operation_ids,\n        proto3_optional_nullable,\n        openapi_configuration,\n        generate_unbound_methods,\n        visibility_restriction_selectors,\n        use_allof_for_refs,\n        omit_array_item_type_when_ref_sibling,\n        disable_default_responses,\n        enable_rpc_deprecation,\n        enable_field_deprecation,\n        expand_slashed_path_patterns,\n        preserve_rpc_order,\n        generate_x_go_type):\n    args = actions.args()\n\n    args.add(\"--plugin\", \"protoc-gen-openapiv2=%s\" % protoc_gen_openapiv2.path)\n\n    extra_inputs = []\n    if grpc_api_configuration:\n        extra_inputs.append(grpc_api_configuration)\n        args.add(\"--openapiv2_opt\", \"grpc_api_configuration=%s\" % grpc_api_configuration.path)\n\n    if openapi_configuration:\n        extra_inputs.append(openapi_configuration)\n        args.add(\"--openapiv2_opt\", \"openapi_configuration=%s\" % openapi_configuration.path)\n\n    if not json_names_for_fields:\n        args.add(\"--openapiv2_opt\", \"json_names_for_fields=false\")\n\n    if fqn_for_openapi_name:\n        args.add(\"--openapiv2_opt\", \"fqn_for_openapi_name=true\")\n\n    if openapi_naming_strategy:\n        args.add(\"--openapiv2_opt\", \"openapi_naming_strategy=%s\" % openapi_naming_strategy)\n\n    if generate_unbound_methods:\n        args.add(\"--openapiv2_opt\", \"generate_unbound_methods=true\")\n\n    if simple_operation_ids:\n        args.add(\"--openapiv2_opt\", \"simple_operation_ids=true\")\n\n    if allow_delete_body:\n        args.add(\"--openapiv2_opt\", \"allow_delete_body=true\")\n\n    if include_package_in_tags:\n        args.add(\"--openapiv2_opt\", \"include_package_in_tags=true\")\n\n    if use_go_templates:\n        args.add(\"--openapiv2_opt\", \"use_go_templates=true\")\n\n    for go_template_arg in go_template_args:\n        args.add(\"--openapiv2_opt\", \"go_template_args=%s\" % go_template_arg)\n\n    if ignore_comments:\n        args.add(\"--openapiv2_opt\", \"ignore_comments=true\")\n\n    if remove_internal_comments:\n        args.add(\"--openapiv2_opt\", \"remove_internal_comments=true\")\n\n    if disable_default_errors:\n        args.add(\"--openapiv2_opt\", \"disable_default_errors=true\")\n\n    if disable_service_tags:\n        args.add(\"--openapiv2_opt\", \"disable_service_tags=true\")\n\n    if enums_as_ints:\n        args.add(\"--openapiv2_opt\", \"enums_as_ints=true\")\n\n    if omit_enum_default_value:\n        args.add(\"--openapiv2_opt\", \"omit_enum_default_value=true\")\n\n    if output_format:\n        args.add(\"--openapiv2_opt\", \"output_format=%s\" % output_format)\n\n    if proto3_optional_nullable:\n        args.add(\"--openapiv2_opt\", \"proto3_optional_nullable=true\")\n\n    for visibility_restriction_selector in visibility_restriction_selectors:\n        args.add(\"--openapiv2_opt\", \"visibility_restriction_selectors=%s\" % visibility_restriction_selector)\n\n    if use_allof_for_refs:\n        args.add(\"--openapiv2_opt\", \"use_allof_for_refs=true\")\n\n    if omit_array_item_type_when_ref_sibling:\n        args.add(\"--openapiv2_opt\", \"omit_array_item_type_when_ref_sibling=true\")\n\n    if disable_default_responses:\n        args.add(\"--openapiv2_opt\", \"disable_default_responses=true\")\n\n    if enable_rpc_deprecation:\n        args.add(\"--openapiv2_opt\", \"enable_rpc_deprecation=true\")\n\n    if enable_field_deprecation:\n        args.add(\"--openapiv2_opt\", \"enable_field_deprecation=true\")\n\n    if expand_slashed_path_patterns:\n        args.add(\"--openapiv2_opt\", \"expand_slashed_path_patterns=true\")\n\n    if preserve_rpc_order:\n        args.add(\"--openapiv2_opt\", \"preserve_rpc_order=true\")\n    if generate_x_go_type:\n        args.add(\"--openapiv2_opt\", \"generate_x_go_type=true\")\n\n    args.add(\"--openapiv2_opt\", \"repeated_path_param_separator=%s\" % repeated_path_param_separator)\n\n    proto_file_infos = _direct_source_infos(proto_info)\n\n    # TODO(yannic): Use |proto_info.transitive_descriptor_sets| when\n    # https://github.com/bazelbuild/bazel/issues/9337 is fixed.\n    args.add_all(proto_info.transitive_proto_path, format_each = \"--proto_path=%s\")\n\n    if single_output:\n        args.add(\"--openapiv2_opt\", \"allow_merge=true\")\n        args.add(\"--openapiv2_opt\", \"merge_file_name=%s\" % target_name)\n\n        openapi_file = actions.declare_file(\"%s.swagger.json\" % target_name)\n        args.add(\"--openapiv2_out\", openapi_file.dirname)\n\n        args.add_all([f.import_path for f in proto_file_infos])\n\n        actions.run(\n            executable = protoc,\n            tools = [protoc_gen_openapiv2],\n            inputs = depset(\n                direct = extra_inputs,\n                transitive = [transitive_proto_srcs],\n            ),\n            outputs = [openapi_file],\n            arguments = [args],\n        )\n\n        return [openapi_file]\n\n    # TODO(yannic): We may be able to generate all files in a single action,\n    # but that will change at least the semantics of `use_go_template.proto`.\n    openapi_files = []\n    for proto_file_info in proto_file_infos:\n        # TODO(yannic): This probably doesn't work as expected: we only add this\n        # option after we have seen it, so `.proto` sources that happen to be\n        # in the list of `.proto` files before `use_go_template.proto` will be\n        # compiled without this option, and all sources that get compiled after\n        # `use_go_template.proto` will have this option on.\n        if proto_file_info.file.basename == \"use_go_template.proto\":\n            args.add(\"--openapiv2_opt\", \"use_go_templates=true\")\n\n        file_name = \"%s.swagger.json\" % proto_file_info.import_path[:-len(\".proto\")]\n        openapi_file = actions.declare_file(\n            \"_virtual_imports/%s/%s\" % (target_name, file_name),\n        )\n\n        file_args = actions.args()\n\n        offset = len(file_name) + 1  # + '/'.\n        file_args.add(\"--openapiv2_out\", openapi_file.path[:-offset])\n\n        file_args.add(proto_file_info.import_path)\n\n        actions.run(\n            executable = protoc,\n            tools = [protoc_gen_openapiv2],\n            inputs = depset(\n                direct = extra_inputs,\n                transitive = [transitive_proto_srcs],\n            ),\n            outputs = [openapi_file],\n            arguments = [args, file_args],\n        )\n        openapi_files.append(openapi_file)\n\n    return openapi_files\n\ndef _proto_gen_openapi_impl(ctx):\n    proto = ctx.attr.proto[ProtoInfo]\n    return [\n        DefaultInfo(\n            files = depset(\n                _run_proto_gen_openapi(\n                    actions = ctx.actions,\n                    proto_info = proto,\n                    target_name = ctx.attr.name,\n                    transitive_proto_srcs = depset(\n                        direct = ctx.files._well_known_protos,\n                        transitive = [proto.transitive_sources],\n                    ),\n                    protoc = ctx.executable._protoc,\n                    protoc_gen_openapiv2 = ctx.executable._protoc_gen_openapi,\n                    single_output = ctx.attr.single_output,\n                    allow_delete_body = ctx.attr.allow_delete_body,\n                    grpc_api_configuration = ctx.file.grpc_api_configuration,\n                    json_names_for_fields = ctx.attr.json_names_for_fields,\n                    repeated_path_param_separator = ctx.attr.repeated_path_param_separator,\n                    include_package_in_tags = ctx.attr.include_package_in_tags,\n                    fqn_for_openapi_name = ctx.attr.fqn_for_openapi_name,\n                    openapi_naming_strategy = ctx.attr.openapi_naming_strategy,\n                    use_go_templates = ctx.attr.use_go_templates,\n                    go_template_args = ctx.attr.go_template_args,\n                    ignore_comments = ctx.attr.ignore_comments,\n                    remove_internal_comments = ctx.attr.remove_internal_comments,\n                    disable_default_errors = ctx.attr.disable_default_errors,\n                    disable_service_tags = ctx.attr.disable_service_tags,\n                    enums_as_ints = ctx.attr.enums_as_ints,\n                    omit_enum_default_value = ctx.attr.omit_enum_default_value,\n                    output_format = ctx.attr.output_format,\n                    simple_operation_ids = ctx.attr.simple_operation_ids,\n                    proto3_optional_nullable = ctx.attr.proto3_optional_nullable,\n                    openapi_configuration = ctx.file.openapi_configuration,\n                    generate_unbound_methods = ctx.attr.generate_unbound_methods,\n                    visibility_restriction_selectors = ctx.attr.visibility_restriction_selectors,\n                    use_allof_for_refs = ctx.attr.use_allof_for_refs,\n                    omit_array_item_type_when_ref_sibling = ctx.attr.omit_array_item_type_when_ref_sibling,\n                    disable_default_responses = ctx.attr.disable_default_responses,\n                    enable_rpc_deprecation = ctx.attr.enable_rpc_deprecation,\n                    enable_field_deprecation = ctx.attr.enable_field_deprecation,\n                    expand_slashed_path_patterns = ctx.attr.expand_slashed_path_patterns,\n                    preserve_rpc_order = ctx.attr.preserve_rpc_order,\n                    generate_x_go_type = ctx.attr.generate_x_go_type,\n                ),\n            ),\n        ),\n    ]\n\nprotoc_gen_openapiv2 = rule(\n    attrs = {\n        \"proto\": attr.label(\n            mandatory = True,\n            providers = [ProtoInfo],\n        ),\n        \"single_output\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, the rule will generate a single OpenAPI file\",\n        ),\n        \"allow_delete_body\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"unless set, HTTP DELETE methods may not have a body\",\n        ),\n        \"grpc_api_configuration\": attr.label(\n            allow_single_file = True,\n            mandatory = False,\n            doc = \"path to file which describes the gRPC API Configuration in YAML format\",\n        ),\n        \"json_names_for_fields\": attr.bool(\n            default = True,\n            mandatory = False,\n            doc = \"if disabled, the original proto name will be used for generating OpenAPI definitions\",\n        ),\n        \"repeated_path_param_separator\": attr.string(\n            default = \"csv\",\n            mandatory = False,\n            values = [\"csv\", \"pipes\", \"ssv\", \"tsv\"],\n            doc = \"configures how repeated fields should be split.\" +\n                  \" Allowed values are `csv`, `pipes`, `ssv` and `tsv`\",\n        ),\n        \"include_package_in_tags\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if unset, the gRPC service name is added to the `Tags`\" +\n                  \" field of each operation. If set and the `package` directive\" +\n                  \" is shown in the proto file, the package name will be \" +\n                  \" prepended to the service name\",\n        ),\n        \"fqn_for_openapi_name\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, the object's OpenAPI names will use the fully\" +\n                  \" qualified names from the proto definition\" +\n                  \" (ie my.package.MyMessage.MyInnerMessage\",\n        ),\n        \"openapi_naming_strategy\": attr.string(\n            default = \"\",\n            mandatory = False,\n            values = [\"\", \"simple\", \"package\", \"legacy\", \"fqn\"],\n            doc = \"configures how OpenAPI names are determined.\" +\n                  \" Allowed values are `` (empty), `simple`, `package`, `legacy` and `fqn`.\" +\n                  \" If unset, either `legacy` or `fqn` are selected, depending\" +\n                  \" on the value of the `fqn_for_openapi_name` setting\",\n        ),\n        \"use_go_templates\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, you can use Go templates in protofile comments\",\n        ),\n        \"go_template_args\": attr.string_list(\n            mandatory = False,\n            doc = \"specify a key value pair as inputs to the Go template of the protofile\" +\n                  \" comments. Repeat this option to specify multiple template arguments.\" +\n                  \" Requires the `use_go_templates` option to be set.\",\n        ),\n        \"ignore_comments\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, all protofile comments are excluded from output\",\n        ),\n        \"remove_internal_comments\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, removes all substrings in comments that start with \" +\n                  \"`(--` and end with `--)` as specified in \" +\n                  \"https://google.aip.dev/192#internal-comments\",\n        ),\n        \"disable_default_errors\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, disables generation of default errors.\" +\n                  \" This is useful if you have defined custom error handling\",\n        ),\n        \"disable_service_tags\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, disables generation of service tags.\" +\n                  \" This is useful if you do not want to expose the names of your backend grpc services.\",\n        ),\n        \"enums_as_ints\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"whether to render enum values as integers, as opposed to string values\",\n        ),\n        \"omit_enum_default_value\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, omit default enum value\",\n        ),\n        \"output_format\": attr.string(\n            default = \"json\",\n            mandatory = False,\n            values = [\"json\", \"yaml\"],\n            doc = \"output content format. Allowed values are: `json`, `yaml`\",\n        ),\n        \"simple_operation_ids\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"whether to remove the service prefix in the operationID\" +\n                  \" generation. Can introduce duplicate operationIDs, use with caution.\",\n        ),\n        \"proto3_optional_nullable\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"whether Proto3 Optional fields should be marked as x-nullable\",\n        ),\n        \"openapi_configuration\": attr.label(\n            allow_single_file = True,\n            mandatory = False,\n            doc = \"path to file which describes the OpenAPI Configuration in YAML format\",\n        ),\n        \"generate_unbound_methods\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"generate swagger metadata even for RPC methods that have\" +\n                  \" no HttpRule annotation\",\n        ),\n        \"visibility_restriction_selectors\": attr.string_list(\n            mandatory = False,\n            doc = \"list of `google.api.VisibilityRule` visibility labels to include\" +\n                  \" in the generated output when a visibility annotation is defined.\" +\n                  \" Repeat this option to supply multiple values. Elements without\" +\n                  \" visibility annotations are unaffected by this setting.\",\n        ),\n        \"use_allof_for_refs\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, will use allOf as container for $ref to preserve\" +\n                  \" same-level properties.\",\n        ),\n        \"omit_array_item_type_when_ref_sibling\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, will omit 'type: object' in array items when $ref is present\" +\n                  \" to avoid strict no-$ref-siblings rule violations.\",\n        ),\n        \"disable_default_responses\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, disables generation of default responses. Useful\" +\n                  \" if you have to support custom response codes that are\" +\n                  \" not 200.\",\n        ),\n        \"enable_rpc_deprecation\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"whether to process grpc method's deprecated option.\",\n        ),\n        \"enable_field_deprecation\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"whether to process proto field's deprecated option.\",\n        ),\n        \"expand_slashed_path_patterns\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, expands path patterns containing slashes into URI.\" +\n                  \" It also creates a new path parameter for each wildcard in \" +\n                  \" the path pattern.\",\n        ),\n        \"preserve_rpc_order\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, ensures the order of paths emitted in OpenAPI files\" +\n                  \" mirrors the order of RPC methods found in proto files.\" +\n                  \" If false, emitted paths will be ordered alphabetically.\",\n        ),\n        \"use_proto3_field_semantics\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"if set, uses proto3 field semantics for the OpenAPI schema.\" +\n                  \"  This means that fields are required by default.\",\n        ),\n        \"generate_x_go_type\": attr.bool(\n            default = False,\n            mandatory = False,\n            doc = \"Generate x-go-type extension using the go_package option from proto files\",\n        ),\n        \"_protoc\": attr.label(\n            default = \"@com_google_protobuf//:protoc\",\n            executable = True,\n            cfg = \"exec\",\n        ),\n        \"_well_known_protos\": attr.label(\n            default = \"@com_google_protobuf//:well_known_type_protos\",\n            allow_files = True,\n        ),\n        \"_protoc_gen_openapi\": attr.label(\n            default = Label(\"//protoc-gen-openapiv2:protoc-gen-openapiv2\"),\n            executable = True,\n            cfg = \"exec\",\n        ),\n    },\n    implementation = _proto_gen_openapi_impl,\n)\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//protoc-gen-openapiv2:__subpackages__\"])\n\ngo_library(\n    name = \"genopenapi\",\n    srcs = [\n        \"doc.go\",\n        \"format.go\",\n        \"generator.go\",\n        \"helpers.go\",\n        \"helpers_go111_old.go\",\n        \"naming.go\",\n        \"template.go\",\n        \"types.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi\",\n    deps = [\n        \"//internal/casing\",\n        \"//internal/descriptor\",\n        \"//internal/generator\",\n        \"//protoc-gen-openapiv2/options\",\n        \"@in_yaml_go_yaml_v3//:yaml\",\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n        \"@org_golang_google_genproto_googleapis_api//visibility\",\n        \"@org_golang_google_genproto_googleapis_rpc//status\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_protobuf//encoding/protojson\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//reflect/protodesc\",\n        \"@org_golang_google_protobuf//types/descriptorpb\",\n        \"@org_golang_google_protobuf//types/known/anypb\",\n        \"@org_golang_google_protobuf//types/known/structpb\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n        \"@org_golang_x_text//cases\",\n        \"@org_golang_x_text//language\",\n    ],\n)\n\ngo_test(\n    name = \"genopenapi_test\",\n    size = \"small\",\n    srcs = [\n        \"cycle_test.go\",\n        \"format_test.go\",\n        \"generator_test.go\",\n        \"helpers_test.go\",\n        \"naming_test.go\",\n        \"template_fuzz_test.go\",\n        \"template_test.go\",\n        \"types_test.go\",\n    ],\n    data = glob([\"testdata/**\"]),\n    embed = [\":genopenapi\"],\n    deps = [\n        \"//internal/descriptor\",\n        \"//internal/descriptor/openapiconfig\",\n        \"//internal/httprule\",\n        \"//protoc-gen-openapiv2/options\",\n        \"//runtime\",\n        \"@com_github_google_go_cmp//cmp\",\n        \"@in_yaml_go_yaml_v3//:yaml\",\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n        \"@org_golang_google_genproto_googleapis_api//visibility\",\n        \"@org_golang_google_protobuf//encoding/protojson\",\n        \"@org_golang_google_protobuf//encoding/prototext\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//reflect/protodesc\",\n        \"@org_golang_google_protobuf//reflect/protoreflect\",\n        \"@org_golang_google_protobuf//reflect/protoregistry\",\n        \"@org_golang_google_protobuf//types/descriptorpb\",\n        \"@org_golang_google_protobuf//types/known/anypb\",\n        \"@org_golang_google_protobuf//types/known/durationpb\",\n        \"@org_golang_google_protobuf//types/known/emptypb\",\n        \"@org_golang_google_protobuf//types/known/fieldmaskpb\",\n        \"@org_golang_google_protobuf//types/known/structpb\",\n        \"@org_golang_google_protobuf//types/known/timestamppb\",\n        \"@org_golang_google_protobuf//types/known/wrapperspb\",\n        \"@org_golang_google_protobuf//types/pluginpb\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":genopenapi\",\n    visibility = [\"//protoc-gen-openapiv2:__subpackages__\"],\n)\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/cycle_test.go",
    "content": "package genopenapi\n\nimport (\n\t\"testing\"\n)\n\nfunc TestCycle(t *testing.T) {\n\tfor _, tt := range []struct {\n\t\tmax     int\n\t\tattempt int\n\t\te       bool\n\t}{\n\t\t{\n\t\t\tmax:     3,\n\t\t\tattempt: 3,\n\t\t\te:       true,\n\t\t},\n\t\t{\n\t\t\tmax:     5,\n\t\t\tattempt: 6,\n\t\t},\n\t\t{\n\t\t\tmax:     1000,\n\t\t\tattempt: 1001,\n\t\t},\n\t} {\n\n\t\tc := newCycleChecker(tt.max)\n\t\tvar final bool\n\t\tfor i := 0; i < tt.attempt; i++ {\n\t\t\tfinal = c.Check(\"a\")\n\t\t\tif !final {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif final != tt.e {\n\t\t\tt.Errorf(\"got: %t wanted: %t\", final, tt.e)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/doc.go",
    "content": "// Package genopenapi provides a code generator for OpenAPI v2.\npackage genopenapi\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/format.go",
    "content": "package genopenapi\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"io\"\n\n\t\"go.yaml.in/yaml/v3\"\n)\n\ntype Format string\n\nconst (\n\tFormatJSON Format = \"json\"\n\tFormatYAML Format = \"yaml\"\n)\n\ntype ContentEncoder interface {\n\tEncode(v interface{}) (err error)\n}\n\nfunc (f Format) Validate() error {\n\tswitch f {\n\tcase FormatJSON, FormatYAML:\n\t\treturn nil\n\tdefault:\n\t\treturn errors.New(\"unknown format: \" + string(f))\n\t}\n}\n\nfunc (f Format) NewEncoder(w io.Writer) (ContentEncoder, error) {\n\tswitch f {\n\tcase FormatYAML:\n\t\tenc := yaml.NewEncoder(w)\n\t\tenc.SetIndent(2)\n\n\t\treturn enc, nil\n\tcase FormatJSON:\n\t\tenc := json.NewEncoder(w)\n\t\tenc.SetIndent(\"\", \"  \")\n\n\t\treturn enc, nil\n\tdefault:\n\t\treturn nil, errors.New(\"unknown format: \" + string(f))\n\t}\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/format_test.go",
    "content": "package genopenapi_test\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi\"\n\t\"go.yaml.in/yaml/v3\"\n)\n\nfunc TestFormatValidate(t *testing.T) {\n\tt.Parallel()\n\n\ttestCases := [...]struct {\n\t\tFormat genopenapi.Format\n\t\tValid  bool\n\t}{{\n\t\tFormat: genopenapi.FormatJSON,\n\t\tValid:  true,\n\t}, {\n\t\tFormat: genopenapi.FormatYAML,\n\t\tValid:  true,\n\t}, {\n\t\tFormat: genopenapi.Format(\"unknown\"),\n\t\tValid:  false,\n\t}, {\n\t\tFormat: genopenapi.Format(\"\"),\n\t\tValid:  false,\n\t}}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(string(tc.Format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\terr := tc.Format.Validate()\n\t\t\tswitch {\n\t\t\tcase tc.Valid && err != nil:\n\t\t\t\tt.Fatalf(\"expect no validation error, got: %s\", err)\n\t\t\tcase !tc.Valid && err == nil:\n\t\t\t\tt.Fatal(\"expect validation error, got nil\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestFormatEncode(t *testing.T) {\n\tt.Parallel()\n\n\ttype contentDecoder interface {\n\t\tDecode(v interface{}) error\n\t}\n\n\ttestCases := [...]struct {\n\t\tFormat     genopenapi.Format\n\t\tNewDecoder func(r io.Reader) contentDecoder\n\t}{{\n\t\tFormat: genopenapi.FormatJSON,\n\t\tNewDecoder: func(r io.Reader) contentDecoder {\n\t\t\treturn json.NewDecoder(r)\n\t\t},\n\t}, {\n\t\tFormat: genopenapi.FormatYAML,\n\t\tNewDecoder: func(r io.Reader) contentDecoder {\n\t\t\treturn yaml.NewDecoder(r)\n\t\t},\n\t}}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(string(tc.Format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\texpParams := map[string]string{\n\t\t\t\t\"hello\": \"world\",\n\t\t\t}\n\n\t\t\tvar buf bytes.Buffer\n\t\t\tenc, err := tc.Format.NewEncoder(&buf)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"expect no encoder creating error, got: %s\", err)\n\t\t\t}\n\n\t\t\terr = enc.Encode(expParams)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"expect no encoding error, got: %s\", err)\n\t\t\t}\n\n\t\t\tgotParams := make(map[string]string)\n\t\t\terr = tc.NewDecoder(&buf).Decode(&gotParams)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"expect no decoding error, got: %s\", err)\n\t\t\t}\n\n\t\t\tif !reflect.DeepEqual(expParams, gotParams) {\n\t\t\t\tt.Fatalf(\"expected: %+v, actual: %+v\", expParams, gotParams)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/generator.go",
    "content": "package genopenapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\tgen \"github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator\"\n\topenapioptions \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n\t\"go.yaml.in/yaml/v3\"\n\tstatuspb \"google.golang.org/genproto/googleapis/rpc/status\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protodesc\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/known/anypb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nvar errNoTargetService = errors.New(\"no target service defined in the file\")\n\ntype generator struct {\n\treg    *descriptor.Registry\n\tformat Format\n}\n\ntype wrapper struct {\n\tfileName string\n\tswagger  *openapiSwaggerObject\n}\n\ntype GeneratorOptions struct {\n\tRegistry       *descriptor.Registry\n\tRecursiveDepth int\n}\n\n// New returns a new generator which generates grpc gateway files.\nfunc New(reg *descriptor.Registry, format Format) gen.Generator {\n\treturn &generator{\n\t\treg:    reg,\n\t\tformat: format,\n\t}\n}\n\n// Merge a lot of OpenAPI file (wrapper) to single one OpenAPI file\nfunc mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper {\n\tvar mergedTarget *wrapper\n\tfor _, f := range targets {\n\t\tif mergedTarget == nil {\n\t\t\tmergedTarget = &wrapper{\n\t\t\t\tfileName: mergeFileName,\n\t\t\t\tswagger:  f.swagger,\n\t\t\t}\n\t\t} else {\n\t\t\tfor k, v := range f.swagger.Definitions {\n\t\t\t\tmergedTarget.swagger.Definitions[k] = v\n\t\t\t}\n\t\t\tfor k, v := range f.swagger.SecurityDefinitions {\n\t\t\t\tmergedTarget.swagger.SecurityDefinitions[k] = v\n\t\t\t}\n\t\t\tcopy(mergedTarget.swagger.Paths, f.swagger.Paths)\n\t\t\tmergedTarget.swagger.Security = append(mergedTarget.swagger.Security, f.swagger.Security...)\n\t\t}\n\t}\n\treturn mergedTarget\n}\n\n// Q: What's up with the alias types here?\n// A: We don't want to completely override how these structs are marshaled into\n// JSON, we only want to add fields (see below, extensionMarshalJSON).\n// An infinite recursion would happen if we'd call json.Marshal on the struct\n// that has swaggerObject as an embedded field. To avoid that, we'll create\n// type aliases, and those don't have the custom MarshalJSON methods defined\n// on them. See http://choly.ca/post/go-json-marshalling/ (or, if it ever\n// goes away, use\n// https://web.archive.org/web/20190806073003/http://choly.ca/post/go-json-marshalling/).\nfunc (so openapiSwaggerObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiSwaggerObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\n// MarshalYAML implements yaml.Marshaler interface.\n//\n// It is required in order to pass extensions inline.\n//\n// Example:\n//\n//\textensions: {x-key: x-value}\n//\ttype: string\n//\n// It will be rendered as:\n//\n//\tx-key: x-value\n//\ttype: string\n//\n// Use generics when the project will be upgraded to go 1.18+.\nfunc (so openapiSwaggerObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiSwaggerObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\n// Custom json marshaller for openapiPathsObject. Ensures\n// openapiPathsObject is marshalled into expected format in generated\n// swagger.json.\nfunc (po openapiPathsObject) MarshalJSON() ([]byte, error) {\n\tvar buf bytes.Buffer\n\n\tbuf.WriteString(\"{\")\n\tfor i, pd := range po {\n\t\tif i != 0 {\n\t\t\tbuf.WriteString(\",\")\n\t\t}\n\t\t// marshal key\n\t\tkey, err := json.Marshal(pd.Path)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.Write(key)\n\t\tbuf.WriteString(\":\")\n\t\t// marshal value\n\t\tval, err := json.Marshal(pd.PathItemObject)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.Write(val)\n\t}\n\n\tbuf.WriteString(\"}\")\n\treturn buf.Bytes(), nil\n}\n\n// Custom yaml marshaller for openapiPathsObject. Ensures\n// openapiPathsObject is marshalled into expected format in generated\n// swagger.yaml.\nfunc (po openapiPathsObject) MarshalYAML() (interface{}, error) {\n\tvar pathObjectNode yaml.Node\n\tpathObjectNode.Kind = yaml.MappingNode\n\n\tfor _, pathData := range po {\n\t\tvar pathNode yaml.Node\n\n\t\tpathNode.SetString(pathData.Path)\n\t\tpathItemObjectNode, err := pathData.PathItemObject.toYAMLNode()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpathObjectNode.Content = append(pathObjectNode.Content, &pathNode, pathItemObjectNode)\n\t}\n\n\treturn pathObjectNode, nil\n}\n\n// We can simplify this implementation once the go-yaml bug is resolved. See: https://github.com/go-yaml/yaml/issues/643.\n//\n//\tfunc (pio *openapiPathItemObject) toYAMLNode() (*yaml.Node, error) {\n//\t\tvar node yaml.Node\n//\t\tif err := node.Encode(pio); err != nil {\n//\t\t\treturn nil, err\n//\t\t}\n//\t\treturn &node, nil\n//\t}\nfunc (pio *openapiPathItemObject) toYAMLNode() (*yaml.Node, error) {\n\tvar doc yaml.Node\n\tvar buf bytes.Buffer\n\tec := yaml.NewEncoder(&buf)\n\tec.SetIndent(2)\n\tif err := ec.Encode(pio); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := yaml.Unmarshal(buf.Bytes(), &doc); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(doc.Content) == 0 {\n\t\treturn nil, errors.New(\"unexpected number of yaml nodes\")\n\t}\n\treturn doc.Content[0], nil\n}\n\nfunc (so openapiInfoObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiInfoObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\nfunc (so openapiInfoObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiInfoObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\nfunc (so openapiSecuritySchemeObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiSecuritySchemeObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\nfunc (so openapiSecuritySchemeObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiSecuritySchemeObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\nfunc (so openapiOperationObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiOperationObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\nfunc (so openapiOperationObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiOperationObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\nfunc (so openapiResponseObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiResponseObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\nfunc (so openapiResponseObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiResponseObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\nfunc (so openapiSchemaObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiSchemaObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\nfunc (so openapiSchemaObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiSchemaObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\nfunc (so openapiParameterObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiParameterObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\nfunc (so openapiParameterObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiParameterObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\nfunc (so openapiTagObject) MarshalJSON() ([]byte, error) {\n\ttype alias openapiTagObject\n\treturn extensionMarshalJSON(alias(so), so.extensions)\n}\n\nfunc (so openapiTagObject) MarshalYAML() (interface{}, error) {\n\ttype Alias openapiTagObject\n\n\treturn struct {\n\t\tExtension map[string]interface{} `yaml:\",inline\"`\n\t\tAlias     `yaml:\",inline\"`\n\t}{\n\t\tExtension: extensionsToMap(so.extensions),\n\t\tAlias:     Alias(so),\n\t}, nil\n}\n\nfunc extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error) {\n\t// To append arbitrary keys to the struct we'll render into json,\n\t// we're creating another struct that embeds the original one, and\n\t// its extra fields:\n\t//\n\t// The struct will look like\n\t// struct {\n\t//   *openapiCore\n\t//   XGrpcGatewayFoo json.RawMessage `json:\"x-grpc-gateway-foo\"`\n\t//   XGrpcGatewayBar json.RawMessage `json:\"x-grpc-gateway-bar\"`\n\t// }\n\t// and thus render into what we want -- the JSON of openapiCore with the\n\t// extensions appended.\n\tfields := []reflect.StructField{\n\t\t{ // embedded\n\t\t\tName:      \"Embedded\",\n\t\t\tType:      reflect.TypeOf(so),\n\t\t\tAnonymous: true,\n\t\t},\n\t}\n\tfor _, ext := range extensions {\n\t\tfields = append(fields, reflect.StructField{\n\t\t\tName: fieldName(ext.key),\n\t\t\tType: reflect.TypeOf(ext.value),\n\t\t\tTag:  reflect.StructTag(fmt.Sprintf(\"json:\\\"%s\\\"\", ext.key)),\n\t\t})\n\t}\n\n\tt := reflect.StructOf(fields)\n\ts := reflect.New(t).Elem()\n\ts.Field(0).Set(reflect.ValueOf(so))\n\tfor _, ext := range extensions {\n\t\ts.FieldByName(fieldName(ext.key)).Set(reflect.ValueOf(ext.value))\n\t}\n\treturn json.Marshal(s.Interface())\n}\n\n// encodeOpenAPI converts OpenAPI file obj to pluginpb.CodeGeneratorResponse_File\nfunc encodeOpenAPI(file *wrapper, format Format) (*descriptor.ResponseFile, error) {\n\tvar contentBuf bytes.Buffer\n\tenc, err := format.NewEncoder(&contentBuf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := enc.Encode(*file.swagger); err != nil {\n\t\treturn nil, err\n\t}\n\n\tname := file.fileName\n\text := filepath.Ext(name)\n\tbase := strings.TrimSuffix(name, ext)\n\toutput := fmt.Sprintf(\"%s.swagger.\"+string(format), base)\n\treturn &descriptor.ResponseFile{\n\t\tCodeGeneratorResponse_File: &pluginpb.CodeGeneratorResponse_File{\n\t\t\tName:    proto.String(output),\n\t\t\tContent: proto.String(contentBuf.String()),\n\t\t},\n\t}, nil\n}\n\nfunc (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.ResponseFile, error) {\n\tvar files []*descriptor.ResponseFile\n\tif g.reg.IsAllowMerge() {\n\t\tvar mergedTarget *descriptor.File\n\t\t// try to find proto leader\n\t\tfor _, f := range targets {\n\t\t\tif proto.HasExtension(f.Options, openapioptions.E_Openapiv2Swagger) {\n\t\t\t\tmergedTarget = f\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// merge protos to leader\n\t\tfor _, f := range targets {\n\t\t\tif mergedTarget == nil {\n\t\t\t\tmergedTarget = f\n\t\t\t} else if mergedTarget != f {\n\t\t\t\tmergedTarget.Enums = append(mergedTarget.Enums, f.Enums...)\n\t\t\t\tmergedTarget.Messages = append(mergedTarget.Messages, f.Messages...)\n\t\t\t\tmergedTarget.Services = append(mergedTarget.Services, f.Services...)\n\t\t\t}\n\t\t}\n\n\t\ttargets = nil\n\t\ttargets = append(targets, mergedTarget)\n\t}\n\n\tvar openapis []*wrapper\n\tfor _, file := range targets {\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Infof(\"Processing %s\", file.GetName())\n\t\t}\n\t\tswagger, err := applyTemplate(param{File: file, reg: g.reg})\n\t\tif errors.Is(err, errNoTargetService) {\n\t\t\tif grpclog.V(1) {\n\t\t\t\tgrpclog.Infof(\"%s: %v\", file.GetName(), err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\topenapis = append(openapis, &wrapper{\n\t\t\tfileName: file.GetName(),\n\t\t\tswagger:  swagger,\n\t\t})\n\t}\n\n\tif g.reg.IsAllowMerge() {\n\t\ttargetOpenAPI := mergeTargetFile(openapis, g.reg.GetMergeFileName())\n\t\tif !g.reg.IsPreserveRPCOrder() {\n\t\t\ttargetOpenAPI.swagger.sortPathsAlphabetically()\n\t\t}\n\t\tf, err := encodeOpenAPI(targetOpenAPI, g.format)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to encode OpenAPI for %s: %w\", g.reg.GetMergeFileName(), err)\n\t\t}\n\t\tfiles = append(files, f)\n\t\tif grpclog.V(1) {\n\t\t\tgrpclog.Infof(\"New OpenAPI file will emit\")\n\t\t}\n\t} else {\n\t\tfor _, file := range openapis {\n\t\t\tif !g.reg.IsPreserveRPCOrder() {\n\t\t\t\tfile.swagger.sortPathsAlphabetically()\n\t\t\t}\n\t\t\tf, err := encodeOpenAPI(file, g.format)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"failed to encode OpenAPI for %s: %w\", file.fileName, err)\n\t\t\t}\n\t\t\tfiles = append(files, f)\n\t\t\tif grpclog.V(1) {\n\t\t\t\tgrpclog.Infof(\"New OpenAPI file will emit\")\n\t\t\t}\n\t\t}\n\t}\n\treturn files, nil\n}\n\nfunc (so openapiSwaggerObject) sortPathsAlphabetically() {\n\tsort.Slice(so.Paths, func(i, j int) bool {\n\t\treturn so.Paths[i].Path < so.Paths[j].Path\n\t})\n}\n\n// AddErrorDefs Adds google.rpc.Status and google.protobuf.Any\n// to registry (used for error-related API responses)\nfunc AddErrorDefs(reg *descriptor.Registry) error {\n\t// load internal protos\n\tany := protodesc.ToFileDescriptorProto((&anypb.Any{}).ProtoReflect().Descriptor().ParentFile())\n\tany.SourceCodeInfo = new(descriptorpb.SourceCodeInfo)\n\tstatus := protodesc.ToFileDescriptorProto((&statuspb.Status{}).ProtoReflect().Descriptor().ParentFile())\n\tstatus.SourceCodeInfo = new(descriptorpb.SourceCodeInfo)\n\treturn reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\tany,\n\t\t\tstatus,\n\t\t},\n\t})\n}\n\nfunc extensionsToMap(extensions []extension) map[string]interface{} {\n\tm := make(map[string]interface{}, len(extensions))\n\n\tfor _, v := range extensions {\n\t\tm[v.key] = RawExample(v.value)\n\t}\n\n\treturn m\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/generator_test.go",
    "content": "package genopenapi_test\n\nimport (\n\t\"bytes\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi\"\n\t\"go.yaml.in/yaml/v3\"\n\n\t\"google.golang.org/protobuf/encoding/prototext\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nfunc TestGenerate_YAML(t *testing.T) {\n\tt.Parallel()\n\n\treq := &pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{{\n\t\t\tName:    proto.String(\"file.proto\"),\n\t\t\tPackage: proto.String(\"example\"),\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"goexample/v1;goexample\"),\n\t\t\t},\n\t\t}},\n\t\tFileToGenerate: []string{\n\t\t\t\"file.proto\",\n\t\t},\n\t}\n\n\tresp := requireGenerate(t, req, genopenapi.FormatYAML, false, false)\n\tif len(resp) != 1 {\n\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t}\n\n\tvar p map[string]interface{}\n\terr := yaml.Unmarshal([]byte(resp[0].GetContent()), &p)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to unmarshall yaml: %s\", err)\n\t}\n}\n\nfunc TestGenerateExtension(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t\toptions: {\n\t\t\t\t\t[grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field]: {\n\t\t\t\t\t\tdescription: \"This is bar\"\n\t\t\t\t\t\textensions: {\n\t\t\t\t\t\t\tkey: \"x-go-default\"\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\tstring_value: \"0.5s\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/v1/test\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, false, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tif !strings.Contains(content, \"x-go-default\") {\n\t\t\t\tt.Fatal(\"x-go-default not found in content message\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateYAML(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname           string\n\t\tinputProtoText string\n\t\twantYAML       string\n\t}{\n\t\t{\n\t\t\t// It tests https://github.com/grpc-ecosystem/grpc-gateway/issues/3557.\n\t\t\tname:           \"path item object\",\n\t\t\tinputProtoText: \"testdata/generator/path_item_object.prototext\",\n\t\t\twantYAML:       \"testdata/generator/path_item_object.swagger.yaml\",\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\ttt := tt\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tb, err := os.ReadFile(tt.inputProtoText)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tvar req pluginpb.CodeGeneratorRequest\n\t\t\tif err := prototext.Unmarshal(b, &req); err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\n\t\t\tresp := requireGenerate(t, &req, genopenapi.FormatYAML, false, true)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\t\t\tgot := resp[0].GetContent()\n\n\t\t\twant, err := os.ReadFile(tt.wantYAML)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tdiff := cmp.Diff(string(want), got)\n\t\t\tif diff != \"\" {\n\t\t\t\tt.Fatalf(\"content not match\\n%s\", diff)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc requireGenerate(\n\ttb testing.TB,\n\treq *pluginpb.CodeGeneratorRequest,\n\tformat genopenapi.Format,\n\tpreserveRPCOrder bool,\n\tallowMerge bool,\n) []*descriptor.ResponseFile {\n\ttb.Helper()\n\n\treg := descriptor.NewRegistry()\n\treg.SetPreserveRPCOrder(preserveRPCOrder)\n\treg.SetAllowMerge(allowMerge)\n\n\tif err := reg.Load(req); err != nil {\n\t\ttb.Fatalf(\"failed to load request: %s\", err)\n\t}\n\n\tvar targets []*descriptor.File\n\tfor _, target := range req.FileToGenerate {\n\t\tf, err := reg.LookupFile(target)\n\t\tif err != nil {\n\t\t\ttb.Fatalf(\"failed to lookup file: %s\", err)\n\t\t}\n\n\t\ttargets = append(targets, f)\n\t}\n\n\tg := genopenapi.New(reg, format)\n\n\tresp, err := g.Generate(targets)\n\tswitch {\n\tcase err != nil:\n\t\ttb.Fatalf(\"failed to generate targets: %s\", err)\n\tcase len(resp) != len(targets) && !allowMerge:\n\t\ttb.Fatalf(\"invalid count, expected: %d, actual: %d\", len(targets), len(resp))\n\t}\n\n\treturn resp\n}\n\nfunc TestGeneratedYAMLIndent(t *testing.T) {\n\t// It tests https://github.com/grpc-ecosystem/grpc-gateway/issues/2745.\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/exampleproto.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/exampleproto.proto\"\n\t\tpackage: \"repro\"\n\t\tmessage_type: {\n\t\t\tname: \"RollupRequest\"\n\t\t\tfield: {\n\t\t\t\tname: \"type\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_ENUM\n\t\t\t\ttype_name: \".repro.RollupType\"\n\t\t\t\tjson_name: \"type\"\n\t\t\t}\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"RollupResponse\"\n\t\t}\n\t\tenum_type: {\n\t\t\tname: \"RollupType\"\n\t\t\tvalue: {\n\t\t\t\tname: \"UNKNOWN_ROLLUP\"\n\t\t\t\tnumber: 0\n\t\t\t}\n\t\t\tvalue: {\n\t\t\t\tname: \"APPLE\"\n\t\t\t\tnumber: 1\n\t\t\t}\n\t\t\tvalue: {\n\t\t\t\tname: \"BANANA\"\n\t\t\t\tnumber: 2\n\t\t\t}\n\t\t\tvalue: {\n\t\t\t\tname: \"CARROT\"\n\t\t\t\tnumber: 3\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"Repro\"\n\t\t\tmethod: {\n\t\t\t\tname: \"GetRollup\"\n\t\t\t\tinput_type: \".repro.RollupRequest\"\n\t\t\t\toutput_type: \".repro.RollupResponse\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/rollup\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"repro/foobar\"\n\t\t}\n\t\tsource_code_info: {\n\t\t\tlocation: {\n\t\t\t\tpath: 5\n\t\t\t\tpath: 0\n\t\t\t\tpath: 2\n\t\t\t\tpath: 1\n\t\t\t\tspan: 24\n\t\t\t\tspan: 4\n\t\t\t\tspan: 14\n\t\t\t\tleading_comments: \" Apples are good\\n\"\n\t\t\t}\n\t\t\tlocation: {\n\t\t\t\tpath: 5\n\t\t\t\tpath: 0\n\t\t\t\tpath: 2\n\t\t\t\tpath: 3\n\t\t\t\tspan: 28\n\t\t\t\tspan: 4\n\t\t\t\tspan: 15\n\t\t\t\tleading_comments: \" Carrots are mediocre\\n\"\n\t\t\t}\n\t\t}\n\t\tsyntax: \"proto3\"\n\t}\n\t`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tresp := requireGenerate(t, &req, genopenapi.FormatYAML, false, false)\n\tif len(resp) != 1 {\n\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t}\n\n\tcontent := resp[0].GetContent()\n\n\terr := yaml.Unmarshal([]byte(content), map[string]interface{}{})\n\tif err != nil {\n\t\tt.Log(content)\n\t\tt.Fatalf(\"got invalid yaml: %s\", err)\n\t}\n}\n\nfunc TestGenerateRPCOrderPreserved(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, true, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/b/first\", \"/a/second\", \"/c/third\"}\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n\n}\n\nfunc TestGenerateRPCOrderNotPreserved(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, false, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/a/second\", \"/b/first\", \"/c/third\"}\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n\n}\n\nfunc TestGenerateRPCOrderPreservedMultipleServices(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceOne\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/d/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/e/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceTwo\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/g/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, true, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/d/first\", \"/e/second\", \"/c/third\", \"/b/first\", \"/a/second\", \"/g/third\"}\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOrderNotPreservedMultipleServices(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceOne\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/d/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/e/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceTwo\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/g/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, false, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/d/first\", \"/e/second\", \"/c/third\", \"/b/first\", \"/a/second\", \"/g/third\"}\n\t\t\tsort.Strings(expectedPaths)\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOrderPreservedMergeFiles(t *testing.T) {\n\tt.Parallel()\n\n\tconst in1 = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/cpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/bpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/apath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tconst in2 = `\n\tfile_to_generate: \"exampleproto/v2/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v2/example.proto\"\n\t\tpackage: \"example.v2\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/f/fpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/e/epath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/d/dpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v2;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req1, req2 pluginpb.CodeGeneratorRequest\n\n\tif err := prototext.Unmarshal([]byte(in1), &req1); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\tif err := prototext.Unmarshal([]byte(in2), &req2); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\treq1.ProtoFile = append(req1.ProtoFile, req2.ProtoFile...)\n\treq1.FileToGenerate = append(req1.FileToGenerate, req2.FileToGenerate...)\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req1, format, true, true)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/c/cpath\", \"/b/bpath\", \"/a/apath\", \"/f/fpath\", \"/e/epath\", \"/d/dpath\"}\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOrderNotPreservedMergeFiles(t *testing.T) {\n\tt.Parallel()\n\n\tconst in1 = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/cpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/bpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/apath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tconst in2 = `\n\tfile_to_generate: \"exampleproto/v2/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v2/example.proto\"\n\t\tpackage: \"example.v2\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/f/fpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/e/epath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/d/dpath\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v2;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req1, req2 pluginpb.CodeGeneratorRequest\n\n\tif err := prototext.Unmarshal([]byte(in1), &req1); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\tif err := prototext.Unmarshal([]byte(in2), &req2); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\treq1.ProtoFile = append(req1.ProtoFile, req2.ProtoFile...)\n\treq1.FileToGenerate = append(req1.FileToGenerate, req2.FileToGenerate...)\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req1, format, false, true)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/c/cpath\", \"/b/bpath\", \"/a/apath\", \"/f/fpath\", \"/e/epath\", \"/d/dpath\"}\n\t\t\tsort.Strings(expectedPaths)\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOrderPreservedAdditionalBindings(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/a/additional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/z/zAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/b/bAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, true, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/b/first\", \"/a/additional\", \"/a/second\", \"/z/zAdditional\", \"/c/third\", \"/b/bAdditional\"}\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOneOfFieldBodyAdditionalBindings(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\toneof_decl: {\n\t\t\t\tname: \"foo\"\n\t\t\t}\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t\toneof_index: 0\n\t\t\t}\n\t\t\tfield: {\n\t\t\t\tname: \"baz\"\n\t\t\t\tnumber: 2\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t\toneof_index: 0\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tpost: \"/b/foo\"\n\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tpost: \"/b/foo/bar\"\n\t\t\t\t\t\t\tbody: \"bar\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tpost: \"/b/foo/baz\"\n\t\t\t\t\t\t\tbody: \"baz\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, true, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/b/foo\", \"/b/foo/bar\", \"/b/foo/baz\"}\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\n\t\t\t// The input message only contains oneof fields, so no other fields should be mapped to the query.\n\t\t\tif strings.Contains(content, \"query\") {\n\t\t\t\tt.Fatalf(\"Found query in content, expected not to find any\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOrderNotPreservedAdditionalBindings(t *testing.T) {\n\tt.Parallel()\n\n\tconst in = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/a/additional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/z/zAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/b/bAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req, format, false, false)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/b/first\", \"/a/additional\", \"/a/second\", \"/z/zAdditional\", \"/c/third\", \"/b/bAdditional\"}\n\t\t\tsort.Strings(expectedPaths)\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOrderPreservedMergeFilesAdditionalBindingsMultipleServices(t *testing.T) {\n\tt.Parallel()\n\n\tconst in1 = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceOne\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/d/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/e/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceTwo\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/g/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tconst in2 = `\n\tfile_to_generate: \"exampleproto/v2/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v2/example.proto\"\n\t\tpackage: \"example.v2\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/bpath\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/a/additional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/apath\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/z/zAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/cpath\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/b/bAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v2;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req1, req2 pluginpb.CodeGeneratorRequest\n\n\tif err := prototext.Unmarshal([]byte(in1), &req1); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\tif err := prototext.Unmarshal([]byte(in2), &req2); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\treq1.ProtoFile = append(req1.ProtoFile, req2.ProtoFile...)\n\treq1.FileToGenerate = append(req1.FileToGenerate, req2.FileToGenerate...)\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req1, format, true, true)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/d/first\", \"/e/second\", \"/c/third\",\n\t\t\t\t\"/b/first\", \"/a/second\", \"/g/third\", \"/b/bpath\", \"/a/additional\",\n\t\t\t\t\"/a/apath\", \"/z/zAdditional\", \"/c/cpath\", \"/b/bAdditional\"}\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateRPCOrderNotPreservedMergeFilesAdditionalBindingsMultipleServices(t *testing.T) {\n\tt.Parallel()\n\n\tconst in1 = `\n\tfile_to_generate: \"exampleproto/v1/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceOne\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/d/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/e/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestServiceTwo\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/first\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/second\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v1.Foo\"\n\t\t\t\toutput_type: \".example.v1.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/g/third\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v1;exampleproto\"\n\t\t}\n\t}`\n\n\tconst in2 = `\n\tfile_to_generate: \"exampleproto/v2/example.proto\"\n\tparameter: \"output_format=yaml,allow_delete_body=true\"\n\tproto_file: {\n\t\tname: \"exampleproto/v2/example.proto\"\n\t\tpackage: \"example.v2\"\n\t\tmessage_type: {\n\t\t\tname: \"Foo\"\n\t\t\tfield: {\n\t\t\t\tname: \"bar\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"bar\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"TestService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Test1\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/b/bpath\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/a/additional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test2\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/a/apath\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/z/zAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Test3\"\n\t\t\t\tinput_type: \".example.v2.Foo\"\n\t\t\t\toutput_type: \".example.v2.Foo\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/c/cpath\"\n\t\t\t\t\t\tadditional_bindings {\n\t\t\t\t\t\t\tget: \"/b/bAdditional\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"exampleproto/v2;exampleproto\"\n\t\t}\n\t}`\n\n\tvar req1, req2 pluginpb.CodeGeneratorRequest\n\n\tif err := prototext.Unmarshal([]byte(in1), &req1); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\tif err := prototext.Unmarshal([]byte(in2), &req2); err != nil {\n\t\tt.Fatalf(\"failed to marshall yaml: %s\", err)\n\t}\n\n\treq1.ProtoFile = append(req1.ProtoFile, req2.ProtoFile...)\n\treq1.FileToGenerate = append(req1.FileToGenerate, req2.FileToGenerate...)\n\tformats := [...]genopenapi.Format{\n\t\tgenopenapi.FormatJSON,\n\t\tgenopenapi.FormatYAML,\n\t}\n\n\tfor _, format := range formats {\n\t\tformat := format\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tresp := requireGenerate(t, &req1, format, false, true)\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t\t\t}\n\n\t\t\tcontent := resp[0].GetContent()\n\n\t\t\tt.Log(content)\n\n\t\t\tcontentsSlice := strings.Fields(content)\n\t\t\texpectedPaths := []string{\"/d/first\", \"/e/second\", \"/c/third\",\n\t\t\t\t\"/b/first\", \"/a/second\", \"/g/third\", \"/b/bpath\", \"/a/additional\",\n\t\t\t\t\"/a/apath\", \"/z/zAdditional\", \"/c/cpath\", \"/b/bAdditional\"}\n\t\t\tsort.Strings(expectedPaths)\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfor _, contentValue := range contentsSlice {\n\t\t\t\tfindExpectedPaths(&foundPaths, expectedPaths, contentValue)\n\t\t\t}\n\n\t\t\tif allPresent := reflect.DeepEqual(foundPaths, expectedPaths); !allPresent {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, expectedPaths)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// Tries to find expected paths from a provided substring and store them in the foundPaths\n// slice.\nfunc findExpectedPaths(foundPaths *[]string, expectedPaths []string, potentialPath string) {\n\tseenPaths := map[string]struct{}{}\n\n\t// foundPaths may not be empty when this function is called multiple times,\n\t// so we add them to seenPaths map to avoid duplicates.\n\tfor _, path := range *foundPaths {\n\t\tseenPaths[path] = struct{}{}\n\t}\n\n\tfor _, path := range expectedPaths {\n\t\t_, pathAlreadySeen := seenPaths[path]\n\t\tif strings.Contains(potentialPath, path) && !pathAlreadySeen {\n\t\t\t*foundPaths = append(*foundPaths, path)\n\t\t\tseenPaths[path] = struct{}{}\n\t\t}\n\t}\n}\n\nfunc TestFindExpectedPaths(t *testing.T) {\n\tt.Parallel()\n\n\ttestCases := [...]struct {\n\t\ttestName           string\n\t\trequiredPaths      []string\n\t\tpotentialPath      string\n\t\texpectedPathsFound []string\n\t}{\n\t\t{\n\t\t\ttestName:           \"One potential path present\",\n\t\t\trequiredPaths:      []string{\"/d/first\", \"/e/second\", \"/c/third\", \"/b/first\"},\n\t\t\tpotentialPath:      \"[{\\\"path: \\\"/d/first\\\"\",\n\t\t\texpectedPathsFound: []string{\"/d/first\"},\n\t\t},\n\t\t{\n\t\t\ttestName:           \"No potential Paths present\",\n\t\t\trequiredPaths:      []string{\"/d/first\", \"/e/second\", \"/c/third\", \"/b/first\"},\n\t\t\tpotentialPath:      \"[{\\\"path: \\\"/z/zpath\\\"\",\n\t\t\texpectedPathsFound: []string{},\n\t\t},\n\t\t{\n\t\t\ttestName:           \"Multiple potential paths present\",\n\t\t\trequiredPaths:      []string{\"/d/first\", \"/e/second\", \"/c/third\", \"/b/first\", \"/d/first\"},\n\t\t\tpotentialPath:      \"[{\\\"path: \\\"/d/first\\\"someData\\\"/c/third\\\"someData\\\"/b/third\\\"\",\n\t\t\texpectedPathsFound: []string{\"/d/first\", \"/c/third\"},\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(tc.testName, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tfoundPaths := []string{}\n\t\t\tfindExpectedPaths(&foundPaths, tc.requiredPaths, tc.potentialPath)\n\t\t\tif correctPathsFound := reflect.DeepEqual(foundPaths, tc.expectedPathsFound); !correctPathsFound {\n\t\t\t\tt.Fatalf(\"Found paths differed from expected paths. Got: %#v, want %#v\", foundPaths, tc.expectedPathsFound)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGenerateXGoType(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname           string\n\t\tinputProtoText string\n\t\twantYAML       string\n\t}{\n\t\t{\n\t\t\tname:           \"x-go-type extension\",\n\t\t\tinputProtoText: \"testdata/generator/x_go_type.prototext\",\n\t\t\twantYAML:       \"testdata/generator/x_go_type.swagger.yaml\",\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\ttt := tt\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tb, err := os.ReadFile(tt.inputProtoText)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tvar req pluginpb.CodeGeneratorRequest\n\t\t\tif err := prototext.Unmarshal(b, &req); err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\n\t\t\treg := descriptor.NewRegistry()\n\t\t\treg.SetGenerateXGoType(true)\n\t\t\tif err := reg.Load(&req); err != nil {\n\t\t\t\tt.Fatalf(\"failed to load request: %s\", err)\n\t\t\t}\n\n\t\t\tvar targets []*descriptor.File\n\t\t\tfor _, target := range req.FileToGenerate {\n\t\t\t\tf, err := reg.LookupFile(target)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"failed to lookup file: %s\", err)\n\t\t\t\t}\n\t\t\t\ttargets = append(targets, f)\n\t\t\t}\n\n\t\t\tg := genopenapi.New(reg, genopenapi.FormatYAML)\n\t\t\tresp, err := g.Generate(targets)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to generate: %s\", err)\n\t\t\t}\n\n\t\t\tif len(resp) != 1 {\n\t\t\t\tt.Fatalf(\"expected 1 file, got %d\", len(resp))\n\t\t\t}\n\n\t\t\twant, err := os.ReadFile(tt.wantYAML)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\n\t\t\tvar gotMap, wantMap map[string]interface{}\n\t\t\tif err := yaml.Unmarshal([]byte(resp[0].GetContent()), &gotMap); err != nil {\n\t\t\t\tt.Fatalf(\"failed to unmarshal generated YAML: %v\", err)\n\t\t\t}\n\t\t\tif err := yaml.Unmarshal(want, &wantMap); err != nil {\n\t\t\t\tt.Fatalf(\"failed to unmarshal expected YAML: %v\", err)\n\t\t\t}\n\n\t\t\tgotYAML, err := yaml.Marshal(gotMap)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to marshal got YAML: %v\", err)\n\t\t\t}\n\t\t\twantYAML, err := yaml.Marshal(wantMap)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to marshal want YAML: %v\", err)\n\t\t\t}\n\n\t\t\tif !bytes.Equal(gotYAML, wantYAML) {\n\t\t\t\tt.Errorf(\"YAMLs don't match:\\ngot:\\n%s\\nwant:\\n%s\", gotYAML, wantYAML)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// TestIssue5684_UnusedMethodsNotInOpenAPI tests that methods without HTTP bindings\n// do not appear in the OpenAPI definitions.\n// See https://github.com/grpc-ecosystem/grpc-gateway/issues/5684\nfunc TestIssue5684_UnusedMethodsNotInOpenAPI(t *testing.T) {\n\tt.Parallel()\n\n\t// Create a proto definition similar to the issue report:\n\t// - Service with two methods: Add (no HTTP binding) and Show (with HTTP binding)\n\t// - Only Show should appear in the OpenAPI output\n\t// - AddRequest and AddResponse should NOT appear in definitions\n\tconst in = `\n\tfile_to_generate: \"account/account.proto\"\n\tproto_file: {\n\t\tname: \"account/account.proto\"\n\t\tpackage: \"account\"\n\n\t\tmessage_type: {\n\t\t\tname: \"Money\"\n\t\t\tfield: {\n\t\t\t\tname: \"amount\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_INT64\n\t\t\t\tjson_name: \"amount\"\n\t\t\t}\n\t\t}\n\n\t\tmessage_type: {\n\t\t\tname: \"AddRequest\"\n\t\t\tfield: {\n\t\t\t\tname: \"money\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: \".account.Money\"\n\t\t\t\tjson_name: \"money\"\n\t\t\t}\n\t\t}\n\n\t\tmessage_type: {\n\t\t\tname: \"AddResponse\"\n\t\t}\n\n\t\tmessage_type: {\n\t\t\tname: \"ShowRequest\"\n\t\t}\n\n\t\tmessage_type: {\n\t\t\tname: \"ShowResponse\"\n\t\t\tfield: {\n\t\t\t\tname: \"money\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: \".account.Money\"\n\t\t\t\tjson_name: \"money\"\n\t\t\t}\n\t\t}\n\n\t\tservice: {\n\t\t\tname: \"AccountService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Add\"\n\t\t\t\tinput_type: \".account.AddRequest\"\n\t\t\t\toutput_type: \".account.AddResponse\"\n\t\t\t}\n\t\t\tmethod: {\n\t\t\t\tname: \"Show\"\n\t\t\t\tinput_type: \".account.ShowRequest\"\n\t\t\t\toutput_type: \".account.ShowResponse\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/v1/account\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\toptions: {\n\t\t\tgo_package: \"accounts/pkg/account;account\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(in), &req); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal proto: %v\", err)\n\t}\n\n\tresp := requireGenerate(t, &req, genopenapi.FormatYAML, false, false)\n\tif len(resp) != 1 {\n\t\tt.Fatalf(\"invalid count, expected: 1, actual: %d\", len(resp))\n\t}\n\n\tvar openAPIDoc map[string]interface{}\n\tif err := yaml.Unmarshal([]byte(resp[0].GetContent()), &openAPIDoc); err != nil {\n\t\tt.Fatalf(\"failed to parse OpenAPI YAML: %v\", err)\n\t}\n\n\tdefinitions, ok := openAPIDoc[\"definitions\"].(map[string]interface{})\n\tif !ok {\n\t\tt.Fatalf(\"no definitions found in OpenAPI document\")\n\t}\n\n\tif _, exists := definitions[\"accountAddRequest\"]; exists {\n\t\tt.Error(\"accountAddRequest found in definitions, but should be excluded (Add method has no HTTP binding)\")\n\t}\n\n\tif _, exists := definitions[\"accountAddResponse\"]; exists {\n\t\tt.Error(\"accountAddResponse found in definitions, but should be excluded (Add method has no HTTP binding)\")\n\t}\n\n\tif _, exists := definitions[\"accountShowResponse\"]; !exists {\n\t\tt.Error(\"accountShowResponse not found in definitions, but should be included (Show method has HTTP binding)\")\n\t}\n\n\tif _, exists := definitions[\"accountMoney\"]; !exists {\n\t\tt.Error(\"accountMoney not found in definitions, but should be included (referenced by ShowResponse)\")\n\t}\n\n\tpaths, ok := openAPIDoc[\"paths\"].(map[string]interface{})\n\tif !ok {\n\t\tt.Fatalf(\"no paths found in OpenAPI document\")\n\t}\n\n\tif _, exists := paths[\"/v1/account\"]; !exists {\n\t\tt.Error(\"/v1/account path not found, but should be included (Show method)\")\n\t}\n\n\tif len(paths) != 1 {\n\t\tt.Errorf(\"expected exactly 1 path, got %d paths\", len(paths))\n\t}\n}\n\n// TestGenerateMergeFilesWithBodyAndPathParams tests issue #6274:\n// When processing multiple proto files where one file has messages (no services)\n// and another has services with body:\"*\" and path params, the generator should\n// not panic when looking up method FQNs for body definitions.\nfunc TestGenerateMergeFilesWithBodyAndPathParams(t *testing.T) {\n\tt.Parallel()\n\n\t// File 1: messages.proto - defines messages but no services\n\tconst messagesProto = `\n\tfile_to_generate: \"example/messages.proto\"\n\tproto_file: {\n\t\tname: \"example/messages.proto\"\n\t\tpackage: \"example\"\n\t\tmessage_type: {\n\t\t\tname: \"Item\"\n\t\t\tfield: {\n\t\t\t\tname: \"id\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"id\"\n\t\t\t}\n\t\t\tfield: {\n\t\t\t\tname: \"name\"\n\t\t\t\tnumber: 2\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"name\"\n\t\t\t}\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"CreateItemRequest\"\n\t\t\tfield: {\n\t\t\t\tname: \"parent\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"parent\"\n\t\t\t}\n\t\t\tfield: {\n\t\t\t\tname: \"item\"\n\t\t\t\tnumber: 2\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: \".example.Item\"\n\t\t\t\tjson_name: \"item\"\n\t\t\t}\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"CreateItemResponse\"\n\t\t\tfield: {\n\t\t\t\tname: \"item\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: \".example.Item\"\n\t\t\t\tjson_name: \"item\"\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"github.com/example/v1;example\"\n\t\t}\n\t}`\n\n\t// File 2: service.proto - defines a service with body:\"*\" and path params\n\tconst serviceProto = `\n\tfile_to_generate: \"example/service.proto\"\n\tproto_file: {\n\t\tname: \"example/service.proto\"\n\t\tpackage: \"example\"\n\t\tdependency: \"example/messages.proto\"\n\t\tservice: {\n\t\t\tname: \"ItemService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"CreateItem\"\n\t\t\t\tinput_type: \".example.CreateItemRequest\"\n\t\t\t\toutput_type: \".example.CreateItemResponse\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tpost: \"/v1/{parent=projects/*}/items\"\n\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"github.com/example/v1;example\"\n\t\t}\n\t}`\n\n\tvar req1, req2 pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(messagesProto), &req1); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal messages proto: %s\", err)\n\t}\n\tif err := prototext.Unmarshal([]byte(serviceProto), &req2); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal service proto: %s\", err)\n\t}\n\n\t// Combine into a single request with both files as targets\n\treq1.ProtoFile = append(req1.ProtoFile, req2.ProtoFile...)\n\treq1.FileToGenerate = append(req1.FileToGenerate, req2.FileToGenerate...)\n\n\t// This should not panic - the bug was that processing messages.proto first\n\t// would build a cache without method FQNs, causing service.proto to panic\n\t// when looking up method FQNs for body:\"*\" with path params.\n\tresp := requireGenerate(t, &req1, genopenapi.FormatJSON, false, false)\n\n\t// We expect 2 files (one per proto file)\n\tif len(resp) != 2 {\n\t\tt.Fatalf(\"expected 2 response files, got %d\", len(resp))\n\t}\n\n\t// Verify the service file has the expected structure\n\tvar foundService bool\n\tfor _, r := range resp {\n\t\tif strings.Contains(r.GetName(), \"service\") {\n\t\t\tfoundService = true\n\t\t\tcontent := r.GetContent()\n\n\t\t\t// Verify the body definition was created\n\t\t\tif !strings.Contains(content, \"ItemServiceCreateItemBody\") {\n\t\t\t\tt.Errorf(\"expected ItemServiceCreateItemBody definition, not found in output:\\n%s\", content)\n\t\t\t}\n\t\t}\n\t}\n\n\tif !foundService {\n\t\tt.Error(\"service.proto output not found in response\")\n\t}\n}\n\n// requireGenerateWithNamingStrategy is a helper that allows setting the naming strategy\nfunc requireGenerateWithNamingStrategy(\n\ttb testing.TB,\n\treq *pluginpb.CodeGeneratorRequest,\n\tformat genopenapi.Format,\n\tpreserveRPCOrder bool,\n\tallowMerge bool,\n\tnamingStrategy string,\n) []*descriptor.ResponseFile {\n\ttb.Helper()\n\n\treg := descriptor.NewRegistry()\n\treg.SetPreserveRPCOrder(preserveRPCOrder)\n\treg.SetAllowMerge(allowMerge)\n\treg.SetOpenAPINamingStrategy(namingStrategy)\n\n\tif err := reg.Load(req); err != nil {\n\t\ttb.Fatalf(\"failed to load request: %s\", err)\n\t}\n\n\tvar targets []*descriptor.File\n\tfor _, target := range req.FileToGenerate {\n\t\tf, err := reg.LookupFile(target)\n\t\tif err != nil {\n\t\t\ttb.Fatalf(\"failed to lookup file: %s\", err)\n\t\t}\n\n\t\ttargets = append(targets, f)\n\t}\n\n\tg := genopenapi.New(reg, format)\n\n\tresp, err := g.Generate(targets)\n\tswitch {\n\tcase err != nil:\n\t\ttb.Fatalf(\"failed to generate targets: %s\", err)\n\tcase len(resp) != len(targets) && !allowMerge:\n\t\ttb.Fatalf(\"invalid count, expected: %d, actual: %d\", len(targets), len(resp))\n\t}\n\n\treturn resp\n}\n\n// TestGenerateMultiFileNamingConsistency tests issue #6308:\n// When using simple naming strategy with multiple files, $refs and definitions\n// must use consistent names. Previously, renderServices() would use one cache\n// while renderMessagesAsDefinition() would use a different filtered cache,\n// causing $ref mismatches.\nfunc TestGenerateMultiFileNamingConsistency(t *testing.T) {\n\tt.Parallel()\n\n\t// File 1: types.proto - has a nested Status enum that could collide with google.rpc.Status\n\tconst typesProto = `\n\tfile_to_generate: \"myapi/types.proto\"\n\tproto_file: {\n\t\tname: \"myapi/types.proto\"\n\t\tpackage: \"myapi\"\n\t\tmessage_type: {\n\t\t\tname: \"Operation\"\n\t\t\tfield: {\n\t\t\t\tname: \"status\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_ENUM\n\t\t\t\ttype_name: \".myapi.Operation.Status\"\n\t\t\t\tjson_name: \"status\"\n\t\t\t}\n\t\t\tenum_type: {\n\t\t\t\tname: \"Status\"\n\t\t\t\tvalue: { name: \"UNKNOWN\" number: 0 }\n\t\t\t\tvalue: { name: \"RUNNING\" number: 1 }\n\t\t\t\tvalue: { name: \"COMPLETED\" number: 2 }\n\t\t\t}\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"GetOperationRequest\"\n\t\t\tfield: {\n\t\t\t\tname: \"name\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"name\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"OperationService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"GetOperation\"\n\t\t\t\tinput_type: \".myapi.GetOperationRequest\"\n\t\t\t\toutput_type: \".myapi.Operation\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/v1/operations/{name}\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"github.com/myapi/v1;myapi\"\n\t\t}\n\t}`\n\n\t// File 2: service.proto - references google.rpc.Status via default error responses\n\t// but does NOT use Operation.Status\n\tconst serviceProto = `\n\tfile_to_generate: \"myapi/service.proto\"\n\tproto_file: {\n\t\tname: \"myapi/service.proto\"\n\t\tpackage: \"myapi\"\n\t\tmessage_type: {\n\t\t\tname: \"EchoRequest\"\n\t\t\tfield: {\n\t\t\t\tname: \"message\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"message\"\n\t\t\t}\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"EchoResponse\"\n\t\t\tfield: {\n\t\t\t\tname: \"message\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"message\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"EchoService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Echo\"\n\t\t\t\tinput_type: \".myapi.EchoRequest\"\n\t\t\t\toutput_type: \".myapi.EchoResponse\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tpost: \"/v1/echo\"\n\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"github.com/myapi/v1;myapi\"\n\t\t}\n\t}`\n\n\tvar req1, req2 pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(typesProto), &req1); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal types proto: %s\", err)\n\t}\n\tif err := prototext.Unmarshal([]byte(serviceProto), &req2); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal service proto: %s\", err)\n\t}\n\n\t// Combine into single request, processing types.proto first\n\treq1.ProtoFile = append(req1.ProtoFile, req2.ProtoFile...)\n\treq1.FileToGenerate = append(req1.FileToGenerate, req2.FileToGenerate...)\n\n\t// Use \"simple\" naming strategy which is most likely to produce collisions\n\tresp := requireGenerateWithNamingStrategy(t, &req1, genopenapi.FormatJSON, false, false, \"simple\")\n\n\tif len(resp) != 2 {\n\t\tt.Fatalf(\"expected 2 response files, got %d\", len(resp))\n\t}\n\n\t// For each output file, verify that all $refs have matching definitions\n\tfor _, r := range resp {\n\t\tcontent := r.GetContent()\n\n\t\t// Parse the JSON to verify $ref consistency\n\t\tvar doc map[string]interface{}\n\t\tif err := yaml.Unmarshal([]byte(content), &doc); err != nil {\n\t\t\tt.Fatalf(\"failed to parse OpenAPI JSON for %s: %v\", r.GetName(), err)\n\t\t}\n\n\t\tdefinitions, ok := doc[\"definitions\"].(map[string]interface{})\n\t\tif !ok {\n\t\t\t// No definitions is acceptable for some files\n\t\t\tcontinue\n\t\t}\n\n\t\t// Collect all $refs from the document\n\t\trefs := collectRefs(doc)\n\n\t\t// Verify each $ref has a matching definition\n\t\tfor ref := range refs {\n\t\t\t// Extract definition name from $ref (format: \"#/definitions/Name\")\n\t\t\tif !strings.HasPrefix(ref, \"#/definitions/\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdefName := strings.TrimPrefix(ref, \"#/definitions/\")\n\n\t\t\tif _, exists := definitions[defName]; !exists {\n\t\t\t\tt.Errorf(\"file %s: $ref %q has no matching definition. Available definitions: %v\",\n\t\t\t\t\tr.GetName(), ref, getKeys(definitions))\n\t\t\t}\n\t\t}\n\t}\n}\n\n// collectRefs recursively collects all $ref values from a document\nfunc collectRefs(v interface{}) map[string]bool {\n\trefs := make(map[string]bool)\n\tcollectRefsRecursive(v, refs)\n\treturn refs\n}\n\nfunc collectRefsRecursive(v interface{}, refs map[string]bool) {\n\tswitch val := v.(type) {\n\tcase map[string]interface{}:\n\t\tif ref, ok := val[\"$ref\"].(string); ok {\n\t\t\trefs[ref] = true\n\t\t}\n\t\tfor _, child := range val {\n\t\t\tcollectRefsRecursive(child, refs)\n\t\t}\n\tcase []interface{}:\n\t\tfor _, item := range val {\n\t\t\tcollectRefsRecursive(item, refs)\n\t\t}\n\t}\n}\n\nfunc getKeys(m map[string]interface{}) []string {\n\tkeys := make([]string, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\treturn keys\n}\n\n// TestGenerateEnumInNestedMessageMultiComponentPackage tests issue #6366:\n// When a service method returns a message that contains another message with an\n// enum field, and the package has multiple components (e.g. \"example.v1\"),\n// protoc-gen-openapiv2 panicked with \"can't resolve OpenAPI ref from typename\".\n// This was caused by two bugs in PR #6315:\n// 1. collectReferencedNamesForCache pre-populated all message FQMNs before scanning\n//    services, causing collectNestedTypeFQNs to short-circuit on already-visited\n//    entries and miss nested enum types.\n// 2. The package filter compared only the first dot-component against the full\n//    multi-component package name, so it never matched.\nfunc TestGenerateEnumInNestedMessageMultiComponentPackage(t *testing.T) {\n\tt.Parallel()\n\n\t// Single file with multi-component package \"example.v1\":\n\t// service Do(DoRequest) returns (DoResponse)\n\t// DoResponse has field \"what\" of type What\n\t// What has field \"type\" of enum EventType\n\tconst protoText = `\n\tfile_to_generate: \"example/v1/example.proto\"\n\tproto_file: {\n\t\tname: \"example/v1/example.proto\"\n\t\tpackage: \"example.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"DoRequest\"\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"DoResponse\"\n\t\t\tfield: {\n\t\t\t\tname: \"what\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: \".example.v1.What\"\n\t\t\t\tjson_name: \"what\"\n\t\t\t}\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"What\"\n\t\t\tfield: {\n\t\t\t\tname: \"type\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_ENUM\n\t\t\t\ttype_name: \".example.v1.EventType\"\n\t\t\t\tjson_name: \"type\"\n\t\t\t}\n\t\t}\n\t\tenum_type: {\n\t\t\tname: \"EventType\"\n\t\t\tvalue: { name: \"EVENT_TYPE_UNSPECIFIED\" number: 0 }\n\t\t\tvalue: { name: \"EVENT_TYPE_ONE\" number: 1 }\n\t\t}\n\t\tservice: {\n\t\t\tname: \"ExampleService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"Do\"\n\t\t\t\tinput_type: \".example.v1.DoRequest\"\n\t\t\t\toutput_type: \".example.v1.DoResponse\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tpost: \"/v1/do\"\n\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"github.com/example/v1;example\"\n\t\t}\n\t}`\n\n\tvar req pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(protoText), &req); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal proto: %s\", err)\n\t}\n\n\t// This should not panic. Before the fix, it panicked with:\n\t// \"can't resolve OpenAPI ref from typename .example.v1.EventType\"\n\tresp := requireGenerate(t, &req, genopenapi.FormatJSON, false, false)\n\n\tif len(resp) != 1 {\n\t\tt.Fatalf(\"expected 1 response file, got %d\", len(resp))\n\t}\n\n\tcontent := resp[0].GetContent()\n\n\tvar doc map[string]interface{}\n\tif err := yaml.Unmarshal([]byte(content), &doc); err != nil {\n\t\tt.Fatalf(\"failed to parse OpenAPI JSON: %v\", err)\n\t}\n\n\tdefinitions, ok := doc[\"definitions\"].(map[string]interface{})\n\tif !ok {\n\t\tt.Fatal(\"expected definitions in OpenAPI output\")\n\t}\n\n\t// Verify all $refs resolve to existing definitions\n\trefs := collectRefs(doc)\n\tfor ref := range refs {\n\t\tif !strings.HasPrefix(ref, \"#/definitions/\") {\n\t\t\tcontinue\n\t\t}\n\t\tdefName := strings.TrimPrefix(ref, \"#/definitions/\")\n\t\tif _, exists := definitions[defName]; !exists {\n\t\t\tt.Errorf(\"$ref %q has no matching definition. Available definitions: %v\",\n\t\t\t\tref, getKeys(definitions))\n\t\t}\n\t}\n}\n\n// TestGenerateCrossPackageMessageReference tests a scenario related to #6366:\n// When a message in the current file references a message type from a different\n// proto package, the cross-package type must be included in the naming cache.\n// Without this, renderMessagesAsDefinition panics because it renders all\n// messages from the file but the naming cache only contains types reachable\n// from service method request/response types.\nfunc TestGenerateCrossPackageMessageReference(t *testing.T) {\n\tt.Parallel()\n\n\t// File 1: user.proto defines User in package domains.user.v1\n\t// File 2: usercontrol.proto has a service and a message referencing User\n\tconst userProto = `\n\tfile_to_generate: \"domains/user/v1/user.proto\"\n\tproto_file: {\n\t\tname: \"domains/user/v1/user.proto\"\n\t\tpackage: \"domains.user.v1\"\n\t\tmessage_type: {\n\t\t\tname: \"User\"\n\t\t\tfield: {\n\t\t\t\tname: \"name\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_OPTIONAL\n\t\t\t\ttype: TYPE_STRING\n\t\t\t\tjson_name: \"name\"\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"github.com/example/domains/user/v1;user\"\n\t\t}\n\t}`\n\n\tconst usercontrolProto = `\n\tfile_to_generate: \"usercontrol/v1/usercontrol.proto\"\n\tproto_file: {\n\t\tname: \"usercontrol/v1/usercontrol.proto\"\n\t\tpackage: \"usercontrol.v1\"\n\t\tdependency: \"domains/user/v1/user.proto\"\n\t\tmessage_type: {\n\t\t\tname: \"ListUsersRequest\"\n\t\t}\n\t\tmessage_type: {\n\t\t\tname: \"ListUsersResponse\"\n\t\t\tfield: {\n\t\t\t\tname: \"users\"\n\t\t\t\tnumber: 1\n\t\t\t\tlabel: LABEL_REPEATED\n\t\t\t\ttype: TYPE_MESSAGE\n\t\t\t\ttype_name: \".domains.user.v1.User\"\n\t\t\t\tjson_name: \"users\"\n\t\t\t}\n\t\t}\n\t\tservice: {\n\t\t\tname: \"UserControlService\"\n\t\t\tmethod: {\n\t\t\t\tname: \"ListUsers\"\n\t\t\t\tinput_type: \".usercontrol.v1.ListUsersRequest\"\n\t\t\t\toutput_type: \".usercontrol.v1.ListUsersResponse\"\n\t\t\t\toptions: {\n\t\t\t\t\t[google.api.http]: {\n\t\t\t\t\t\tget: \"/v1/users\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toptions: {\n\t\t\tgo_package: \"github.com/example/usercontrol/v1;usercontrol\"\n\t\t}\n\t}`\n\n\tvar req1, req2 pluginpb.CodeGeneratorRequest\n\tif err := prototext.Unmarshal([]byte(userProto), &req1); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal user proto: %s\", err)\n\t}\n\tif err := prototext.Unmarshal([]byte(usercontrolProto), &req2); err != nil {\n\t\tt.Fatalf(\"failed to unmarshal usercontrol proto: %s\", err)\n\t}\n\n\t// Combine: process both files, but only generate usercontrol\n\treq2.ProtoFile = append(req1.ProtoFile, req2.ProtoFile...)\n\treq2.FileToGenerate = []string{\"usercontrol/v1/usercontrol.proto\"}\n\n\t// This should not panic\n\tresp := requireGenerate(t, &req2, genopenapi.FormatJSON, false, false)\n\n\tif len(resp) != 1 {\n\t\tt.Fatalf(\"expected 1 response file, got %d\", len(resp))\n\t}\n\n\tvar doc map[string]interface{}\n\tif err := yaml.Unmarshal([]byte(resp[0].GetContent()), &doc); err != nil {\n\t\tt.Fatalf(\"failed to parse OpenAPI JSON: %v\", err)\n\t}\n\n\tdefinitions, ok := doc[\"definitions\"].(map[string]interface{})\n\tif !ok {\n\t\tt.Fatal(\"expected definitions in OpenAPI output\")\n\t}\n\n\trefs := collectRefs(doc)\n\tfor ref := range refs {\n\t\tif !strings.HasPrefix(ref, \"#/definitions/\") {\n\t\t\tcontinue\n\t\t}\n\t\tdefName := strings.TrimPrefix(ref, \"#/definitions/\")\n\t\tif _, exists := definitions[defName]; !exists {\n\t\t\tt.Errorf(\"$ref %q has no matching definition. Available definitions: %v\",\n\t\t\t\tref, getKeys(definitions))\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/helpers.go",
    "content": "//go:build go1.12\n// +build go1.12\n\npackage genopenapi\n\nimport (\n\t\"strings\"\n\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n)\n\nfunc fieldName(k string) string {\n\treturn strings.ReplaceAll(cases.Title(language.AmericanEnglish).String(k), \"-\", \"_\")\n}\n\n// this method will filter the same fields and return the unique one\nfunc getUniqueFields(schemaFieldsRequired []string, fieldsRequired []string) []string {\n\tvar unique []string\n\tvar index *int\n\n\tfor j, schemaFieldRequired := range schemaFieldsRequired {\n\t\tindex = nil\n\t\tfor i, fieldRequired := range fieldsRequired {\n\t\t\ti := i\n\t\t\tif schemaFieldRequired == fieldRequired {\n\t\t\t\tindex = &i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif index == nil {\n\t\t\tunique = append(unique, schemaFieldsRequired[j])\n\t\t}\n\t}\n\treturn unique\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/helpers_go111_old.go",
    "content": "//go:build !go1.12\n// +build !go1.12\n\npackage genopenapi\n\nimport \"strings\"\n\nfunc fieldName(k string) string {\n\treturn strings.Replace(strings.Title(k), \"-\", \"_\", -1)\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/helpers_test.go",
    "content": "package genopenapi\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc Test_getUniqueFields(t *testing.T) {\n\ttype args struct {\n\t\tschemaFieldsRequired []string\n\t\tfieldsRequired       []string\n\t}\n\tvar tests = []struct {\n\t\tname string\n\t\targs args\n\t\twant []string\n\t}{\n\t\t{\n\t\t\tname: \"test_1\",\n\t\t\targs: args{\n\t\t\t\tschemaFieldsRequired: []string{\"Field_1\", \"Field_2\", \"Field_3\"},\n\t\t\t\tfieldsRequired:       []string{\"Field_2\"},\n\t\t\t},\n\t\t\twant: []string{\"Field_1\", \"Field_3\"},\n\t\t},\n\t\t{\n\t\t\tname: \"test_2\",\n\t\t\targs: args{\n\t\t\t\tschemaFieldsRequired: []string{\"Field_1\", \"Field_2\", \"Field_3\"},\n\t\t\t\tfieldsRequired:       []string{\"Field_3\"},\n\t\t\t},\n\t\t\twant: []string{\"Field_1\", \"Field_2\"},\n\t\t},\n\t\t{\n\t\t\tname: \"test_3\",\n\t\t\targs: args{\n\t\t\t\tschemaFieldsRequired: []string{\"Field_1\", \"Field_2\", \"Field_3\"},\n\t\t\t\tfieldsRequired:       []string{\"Field_4\"},\n\t\t\t},\n\t\t\twant: []string{\"Field_1\", \"Field_2\", \"Field_3\"},\n\t\t},\n\t\t{\n\t\t\tname: \"test_4\",\n\t\t\targs: args{\n\t\t\t\tschemaFieldsRequired: []string{\"Field_1\", \"Field_2\", \"Field_3\", \"Field_4\", \"Field_5\", \"Field_6\"},\n\t\t\t\tfieldsRequired:       []string{\"Field_6\", \"Field_4\", \"Field_1\"},\n\t\t\t},\n\t\t\twant: []string{\"Field_2\", \"Field_3\", \"Field_5\"},\n\t\t},\n\t\t{\n\t\t\tname: \"test_5\",\n\t\t\targs: args{\n\t\t\t\tschemaFieldsRequired: []string{\"Field_1\", \"Field_2\", \"Field_3\"},\n\t\t\t\tfieldsRequired:       []string{},\n\t\t\t},\n\t\t\twant: []string{\"Field_1\", \"Field_2\", \"Field_3\"},\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tif got := getUniqueFields(tt.args.schemaFieldsRequired, tt.args.fieldsRequired); !reflect.DeepEqual(got, tt.want) {\n\t\t\t\tt.Errorf(\"getUniqueFields() = %v, want %v\", got, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/naming.go",
    "content": "package genopenapi\n\nimport (\n\t\"reflect\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// LookupNamingStrategy looks up the given naming strategy and returns the naming\n// strategy function for it. The naming strategy function takes in the list of all\n// fully-qualified proto message names, and returns a mapping from fully-qualified\n// name to OpenAPI name.\nfunc LookupNamingStrategy(strategyName string) func([]string) map[string]string {\n\tswitch strings.ToLower(strategyName) {\n\tcase \"fqn\":\n\t\treturn resolveNamesFQN\n\tcase \"legacy\":\n\t\treturn resolveNamesLegacy\n\tcase \"simple\":\n\t\treturn resolveNamesSimple\n\tcase \"package\":\n\t\treturn resolveNamesPackage\n\t}\n\treturn nil\n}\n\n// resolveNamesFQN uses the fully-qualified proto message name as the\n// OpenAPI name, stripping the leading dot.\nfunc resolveNamesFQN(messages []string) map[string]string {\n\tuniqueNames := make(map[string]string, len(messages))\n\tfor _, p := range messages {\n\t\t// strip leading dot from proto fqn\n\t\tuniqueNames[p] = p[1:]\n\t}\n\treturn uniqueNames\n}\n\n// resolveNamesLegacy takes the names of all proto messages and generates unique references by\n// applying the legacy heuristics for deriving unique names: starting from the bottom of the name hierarchy, it\n// determines the minimum number of components necessary to yield a unique name, adds one\n// to that number, and then concatenates those last components with no separator in between\n// to form a unique name.\n//\n// E.g., if the fully qualified name is `.a.b.C.D`, and there are other messages with fully\n// qualified names ending in `.D` but not in `.C.D`, it assigns the unique name `bCD`.\nfunc resolveNamesLegacy(messages []string) map[string]string {\n\treturn resolveNamesUniqueWithContext(messages, 1, \"\", false)\n}\n\n// resolveNamesSimple takes the names of all proto messages and generates unique references by using a simple\n// heuristic: starting from the bottom of the name hierarchy, it determines the minimum\n// number of components necessary to yield a unique name, and then concatenates those last\n// components with a \".\" separator in between to form a unique name.\n//\n// E.g., if the fully qualified name is `.a.b.C.D`, and there are other messages with\n// fully qualified names ending in `.D` but not in `.C.D`, it assigns the unique name `C.D`.\nfunc resolveNamesSimple(messages []string) map[string]string {\n\treturn resolveNamesUniqueWithContext(messages, 0, \".\", false)\n}\n\n// resolveNamesPackage takes the names of all proto messages and generates unique references by\n// starting with the package-scoped name (with nested message types qualified by their containing\n// \"parent\" types), and then following the \"simple\" heuristic above to add package name components\n// until each message has a unique name with a \".\" between each component.\n//\n// E.g., if the fully qualified name is `.a.b.C.D`, the name is `C.D` unless there is another\n// package-scoped name ending in \"C.D\", in  which case it would be `b.C.D` (unless that also\n// conflicted, in which case the name would be the fully-qualified `a.b.C`).\nfunc resolveNamesPackage(messages []string) map[string]string {\n\treturn resolveNamesUniqueWithContext(messages, 0, \".\", true)\n}\n\n// For the \"package\" naming strategy, we rely on the convention that package names are lowercase\n// but message names are capitalized.\nvar pkgEndRegexp = regexp.MustCompile(`\\.[A-Z]`)\n\n// Take the names of every proto message and generates a unique reference by:\n// first, separating each message name into its components by splitting at dots. Then,\n// take the shortest suffix slice from each components slice that is unique among all\n// messages, and convert it into a component name by taking extraContext additional\n// components into consideration and joining all components with componentSeparator.\nfunc resolveNamesUniqueWithContext(messages []string, extraContext int, componentSeparator string, qualifyNestedMessages bool) map[string]string {\n\tpackagesByDepth := make(map[int][][]string)\n\tuniqueNames := make(map[string]string)\n\n\thierarchy := func(pkg string) []string {\n\t\tif !qualifyNestedMessages {\n\t\t\treturn strings.Split(pkg, \".\")\n\t\t}\n\t\tpkgEnd := pkgEndRegexp.FindStringIndex(pkg)\n\t\tif pkgEnd == nil {\n\t\t\t// Fall back to non-qualified behavior if search based on convention fails.\n\t\t\treturn strings.Split(pkg, \".\")\n\t\t}\n\t\t// Return each package component as an element, followed by the full message name\n\t\t// (potentially qualified, if nested) as a single element.\n\t\tqualifiedPkgName := pkg[:pkgEnd[0]]\n\t\tnestedTypeName := pkg[pkgEnd[0]+1:]\n\t\treturn append(strings.Split(qualifiedPkgName, \".\"), nestedTypeName)\n\t}\n\n\tfor _, p := range messages {\n\t\th := hierarchy(p)\n\t\tfor depth := range h {\n\t\t\tif _, ok := packagesByDepth[depth]; !ok {\n\t\t\t\tpackagesByDepth[depth] = make([][]string, 0)\n\t\t\t}\n\t\t\tpackagesByDepth[depth] = append(packagesByDepth[depth], h[len(h)-depth:])\n\t\t}\n\t}\n\n\tcount := func(list [][]string, item []string) int {\n\t\ti := 0\n\t\tfor _, element := range list {\n\t\t\tif reflect.DeepEqual(element, item) {\n\t\t\t\ti++\n\t\t\t}\n\t\t}\n\t\treturn i\n\t}\n\n\tfor _, p := range messages {\n\t\th := hierarchy(p)\n\t\tdepth := 0\n\t\tfor ; depth < len(h); depth++ {\n\t\t\t// depth + extraContext > 0 ensures that we only break for values of depth when the\n\t\t\t// resulting slice of name components is non-empty. Otherwise, we would return the\n\t\t\t// empty string as the concise unique name is len(messages) == 1 (which is\n\t\t\t// technically correct).\n\t\t\tif depth+extraContext > 0 && count(packagesByDepth[depth], h[len(h)-depth:]) == 1 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tstart := len(h) - depth - extraContext\n\t\tif start < 0 {\n\t\t\tstart = 0\n\t\t}\n\t\tcomponents := h[start:]\n\t\t// When using empty separator (legacy mode), apply camelCase by title-casing\n\t\t// intermediate lowercase package components. E.g., \"google.rpc.Status\" -> \"googleRpcStatus\"\n\t\t// We only title-case components that are entirely lowercase (package names),\n\t\t// not message names which are already PascalCase.\n\t\t// Skip the first non-empty component (keep it lowercase for camelCase).\n\t\tif componentSeparator == \"\" && len(components) > 1 {\n\t\t\tfirstNonEmpty := -1\n\t\t\tfor i := 0; i < len(components); i++ {\n\t\t\t\tif components[i] != \"\" {\n\t\t\t\t\tfirstNonEmpty = i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor i := firstNonEmpty + 1; i < len(components); i++ {\n\t\t\t\tif len(components[i]) > 0 && components[i] == strings.ToLower(components[i]) {\n\t\t\t\t\tcomponents[i] = strings.ToUpper(components[i][:1]) + components[i][1:]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tuniqueNames[p] = strings.Join(components, componentSeparator)\n\t}\n\treturn uniqueNames\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/naming_test.go",
    "content": "package genopenapi\n\nimport \"testing\"\n\nfunc TestNaming(t *testing.T) {\n\ttype expectedNames struct {\n\t\tfqn, legacy, simple, pkg string\n\t}\n\tmessageNameToExpected := map[string]expectedNames{\n\t\t\".A\":     {\"A\", \"A\", \"A\", \"A\"},\n\t\t\".a.B.C\": {\"a.B.C\", \"aBC\", \"B.C\", \"B.C\"},\n\t\t\".a.D.C\": {\"a.D.C\", \"aDC\", \"D.C\", \"D.C\"},\n\t\t\".a.E.F\": {\"a.E.F\", \"aEF\", \"a.E.F\", \"a.E.F\"},\n\t\t\".b.E.F\": {\"b.E.F\", \"bEF\", \"b.E.F\", \"b.E.F\"},\n\t\t\".c.G.H\": {\"c.G.H\", \"GH\", \"H\", \"G.H\"},\n\t}\n\n\tallMessageNames := make([]string, 0, len(messageNameToExpected))\n\tfor msgName := range messageNameToExpected {\n\t\tallMessageNames = append(allMessageNames, msgName)\n\t}\n\n\tt.Run(\"fqn\", func(t *testing.T) {\n\t\tuniqueNames := resolveNamesFQN(allMessageNames)\n\t\tfor _, msgName := range allMessageNames {\n\t\t\texpected := messageNameToExpected[msgName].fqn\n\t\t\tactual := uniqueNames[msgName]\n\t\t\tif expected != actual {\n\t\t\t\tt.Errorf(\"fqn unique name %q does not match expected name %q\", actual, expected)\n\t\t\t}\n\t\t}\n\t})\n\tt.Run(\"legacy\", func(t *testing.T) {\n\t\tuniqueNames := resolveNamesLegacy(allMessageNames)\n\t\tfor _, msgName := range allMessageNames {\n\t\t\texpected := messageNameToExpected[msgName].legacy\n\t\t\tactual := uniqueNames[msgName]\n\t\t\tif expected != actual {\n\t\t\t\tt.Errorf(\"legacy unique name %q does not match expected name %q\", actual, expected)\n\t\t\t}\n\t\t}\n\t})\n\tt.Run(\"simple\", func(t *testing.T) {\n\t\tuniqueNames := resolveNamesSimple(allMessageNames)\n\t\tfor _, msgName := range allMessageNames {\n\t\t\texpected := messageNameToExpected[msgName].simple\n\t\t\tactual := uniqueNames[msgName]\n\t\t\tif expected != actual {\n\t\t\t\tt.Errorf(\"simple unique name %q does not match expected name %q\", actual, expected)\n\t\t\t}\n\t\t}\n\t})\n\tt.Run(\"package\", func(t *testing.T) {\n\t\tuniqueNames := resolveNamesPackage(allMessageNames)\n\t\tfor _, msgName := range allMessageNames {\n\t\t\texpected := messageNameToExpected[msgName].pkg\n\t\t\tactual := uniqueNames[msgName]\n\t\t\tif expected != actual {\n\t\t\t\tt.Errorf(\"package unique name %q does not match expected name %q\", actual, expected)\n\t\t\t}\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/template.go",
    "content": "package genopenapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"net/textproto\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"slices\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"text/template\"\n\t\"time\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\topenapi_options \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n\t\"google.golang.org/genproto/googleapis/api/annotations\"\n\t\"google.golang.org/genproto/googleapis/api/visibility\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/known/structpb\"\n)\n\n// The OpenAPI specification does not allow for more than one endpoint with the same HTTP method and path.\n// This prevents multiple gRPC service methods from sharing the same stripped version of the path and method.\n// For example: `GET /v1/{name=organizations/*}/roles` and `GET /v1/{name=users/*}/roles` both get stripped to `GET /v1/{name}/roles`.\n// We must make the URL unique by adding a suffix and an incrementing index to each path parameter\n// to differentiate the endpoints.\n// Since path parameter names do not affect the request contents (i.e. they're replaced in the path)\n// this will be hidden from the real grpc gateway consumer.\nconst pathParamUniqueSuffixDeliminator = \"_\"\n\nconst paragraphDeliminator = \"\\n\\n\"\n\n// wktSchemas are the schemas of well-known-types.\n// The schemas must match with the behavior of the JSON unmarshaler in\n// https://github.com/protocolbuffers/protobuf-go/blob/v1.25.0/encoding/protojson/well_known_types.go\nvar wktSchemas = map[string]schemaCore{\n\t\".google.protobuf.FieldMask\": {\n\t\tType: \"string\",\n\t},\n\t\".google.protobuf.Timestamp\": {\n\t\tType:   \"string\",\n\t\tFormat: \"date-time\",\n\t},\n\t\".google.protobuf.Duration\": {\n\t\tType: \"string\",\n\t},\n\t\".google.protobuf.StringValue\": {\n\t\tType: \"string\",\n\t},\n\t\".google.protobuf.BytesValue\": {\n\t\tType:   \"string\",\n\t\tFormat: \"byte\",\n\t},\n\t\".google.protobuf.Int32Value\": {\n\t\tType:   \"integer\",\n\t\tFormat: \"int32\",\n\t},\n\t\".google.protobuf.UInt32Value\": {\n\t\tType:   \"integer\",\n\t\tFormat: \"int64\",\n\t},\n\t\".google.protobuf.Int64Value\": {\n\t\tType:   \"string\",\n\t\tFormat: \"int64\",\n\t},\n\t\".google.protobuf.UInt64Value\": {\n\t\tType:   \"string\",\n\t\tFormat: \"uint64\",\n\t},\n\t\".google.protobuf.FloatValue\": {\n\t\tType:   \"number\",\n\t\tFormat: \"float\",\n\t},\n\t\".google.protobuf.DoubleValue\": {\n\t\tType:   \"number\",\n\t\tFormat: \"double\",\n\t},\n\t\".google.protobuf.BoolValue\": {\n\t\tType: \"boolean\",\n\t},\n\t\".google.protobuf.Empty\": {\n\t\tType: \"object\",\n\t},\n\t\".google.protobuf.Struct\": {\n\t\tType: \"object\",\n\t},\n\t\".google.protobuf.Value\": {},\n\t\".google.protobuf.ListValue\": {\n\t\tType: \"array\",\n\t\tItems: (*openapiItemsObject)(&openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t}),\n\t},\n\t\".google.protobuf.NullValue\": {\n\t\tType: \"string\",\n\t},\n}\n\nfunc listEnumNames(reg *descriptor.Registry, enum *descriptor.Enum) interface{} {\n\tvar names []string\n\tfor _, value := range enum.GetValue() {\n\t\tif !isVisible(getEnumValueVisibilityOption(value), reg) {\n\t\t\tcontinue\n\t\t}\n\t\tif reg.GetOmitEnumDefaultValue() && value.GetNumber() == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tnames = append(names, value.GetName())\n\t}\n\n\tif len(names) > 0 {\n\t\treturn names\n\t}\n\n\treturn nil\n}\n\nfunc listEnumNumbers(reg *descriptor.Registry, enum *descriptor.Enum) interface{} {\n\tvar numbers []int\n\tfor _, value := range enum.GetValue() {\n\t\tif reg.GetOmitEnumDefaultValue() && value.GetNumber() == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif !isVisible(getEnumValueVisibilityOption(value), reg) {\n\t\t\tcontinue\n\t\t}\n\t\tnumbers = append(numbers, int(value.GetNumber()))\n\t}\n\n\tif len(numbers) > 0 {\n\t\treturn numbers\n\t}\n\n\treturn nil\n}\n\nfunc getEnumDefault(reg *descriptor.Registry, enum *descriptor.Enum) interface{} {\n\tif !reg.GetOmitEnumDefaultValue() {\n\t\tfor _, value := range enum.GetValue() {\n\t\t\tif value.GetNumber() == 0 {\n\t\t\t\tif !isVisible(getEnumValueVisibilityOption(value), reg) {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\treturn value.GetName()\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getEnumDefaultNumber(reg *descriptor.Registry, enum *descriptor.Enum) interface{} {\n\tif !reg.GetOmitEnumDefaultValue() {\n\t\tfor _, value := range enum.GetValue() {\n\t\t\tif value.GetNumber() == 0 {\n\t\t\t\treturn int(value.GetNumber())\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// messageToQueryParameters converts a message to a list of OpenAPI query parameters.\nfunc messageToQueryParameters(message *descriptor.Message, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body, httpMethod string) (params []openapiParameterObject, err error) {\n\tfor _, field := range message.Fields {\n\t\t// When body is set to oneof field, we want to skip other fields in the oneof group.\n\t\tif isBodySameOneOf(body, field) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !isVisible(getFieldVisibilityOption(field), reg) {\n\t\t\tcontinue\n\t\t}\n\t\tif reg.GetAllowPatchFeature() && field.GetTypeName() == \".google.protobuf.FieldMask\" && field.GetName() == \"update_mask\" && httpMethod == \"PATCH\" && len(body.FieldPath) != 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tp, err := queryParams(message, field, \"\", reg, pathParams, body, reg.GetRecursiveDepth())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparams = append(params, p...)\n\t}\n\treturn params, nil\n}\n\nfunc isBodySameOneOf(body *descriptor.Body, field *descriptor.Field) bool {\n\tif field.OneofIndex == nil {\n\t\treturn false\n\t}\n\n\tif body == nil || len(body.FieldPath) == 0 {\n\t\treturn false\n\t}\n\n\tif body.FieldPath[0].Target.OneofIndex == nil {\n\t\treturn false\n\t}\n\n\treturn *body.FieldPath[0].Target.OneofIndex == *field.OneofIndex\n}\n\n// queryParams converts a field to a list of OpenAPI query parameters recursively through the use of nestedQueryParams.\nfunc queryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body, recursiveCount int) (params []openapiParameterObject, err error) {\n\treturn nestedQueryParams(message, field, prefix, reg, pathParams, body, newCycleChecker(recursiveCount))\n}\n\ntype cycleChecker struct {\n\tm     map[string]int\n\tcount int\n}\n\nfunc newCycleChecker(recursive int) *cycleChecker {\n\treturn &cycleChecker{\n\t\tm:     make(map[string]int),\n\t\tcount: recursive,\n\t}\n}\n\n// Check returns whether name is still within recursion\n// toleration\nfunc (c *cycleChecker) Check(name string) bool {\n\tcount, ok := c.m[name]\n\tcount += 1\n\tisCycle := count > c.count\n\n\tif isCycle {\n\t\treturn false\n\t}\n\n\t// provision map entry if not available\n\tif !ok {\n\t\tc.m[name] = 1\n\t\treturn true\n\t}\n\n\tc.m[name] = count\n\n\treturn true\n}\n\nfunc (c *cycleChecker) Branch() *cycleChecker {\n\tcopy := &cycleChecker{\n\t\tcount: c.count,\n\t\tm:     make(map[string]int, len(c.m)),\n\t}\n\n\tfor k, v := range c.m {\n\t\tcopy.m[k] = v\n\t}\n\n\treturn copy\n}\n\n// nestedQueryParams converts a field to a list of OpenAPI query parameters recursively.\n// This function is a helper function for queryParams, that keeps track of cyclical message references\n// through the use of\n//\n//\ttouched map[string]int\n//\n// If a cycle is discovered, an error is returned, as cyclical data structures are dangerous\n// in query parameters.\nfunc nestedQueryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body, cycle *cycleChecker) (params []openapiParameterObject, err error) {\n\t// make sure the parameter is not already listed as a path parameter\n\tfor _, pathParam := range pathParams {\n\t\tif pathParam.Target == field {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\t// make sure the parameter is not already listed as a body parameter\n\tif body != nil {\n\t\tif body.FieldPath == nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tfor _, fieldPath := range body.FieldPath {\n\t\t\tif fieldPath.Target == field {\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t}\n\t}\n\tschema := schemaOfField(field, reg, nil)\n\tfieldType := field.GetTypeName()\n\tif message.File != nil {\n\t\tcomments := fieldProtoComments(reg, message, field)\n\t\tif err := updateOpenAPIDataFromComments(reg, &schema, message, comments, false); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tisEnum := field.GetType() == descriptorpb.FieldDescriptorProto_TYPE_ENUM\n\titems := schema.Items\n\tif schema.Type != \"\" || isEnum {\n\t\tif schema.Type == \"object\" {\n\t\t\tlocation := \"\"\n\t\t\tif ix := strings.LastIndex(field.Message.FQMN(), \".\"); ix > 0 {\n\t\t\t\tlocation = field.Message.FQMN()[0:ix]\n\t\t\t}\n\t\t\tif m, err := reg.LookupMsg(location, field.GetTypeName()); err == nil {\n\t\t\t\tif opt := m.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry {\n\t\t\t\t\tk := m.GetField()[0]\n\t\t\t\t\tkType, err := getMapParamKey(k.GetType())\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\t// This will generate a query in the format map_name[key_type]\n\t\t\t\t\tfName := fmt.Sprintf(\"%s[%s]\", *field.Name, kType)\n\t\t\t\t\tfield.Name = proto.String(fName)\n\t\t\t\t\tschema.Type = schema.AdditionalProperties.schemaCore.Type\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif items != nil && (items.Type == \"\" || items.Type == \"object\") && !isEnum {\n\t\t\treturn nil, nil // TODO: currently, mapping object in query parameter is not supported\n\t\t}\n\t\tdesc := mergeDescription(schema)\n\n\t\t// verify if the field is required\n\t\trequired := false\n\t\tfor _, fieldName := range schema.Required {\n\t\t\tif fieldName == reg.FieldName(field) {\n\t\t\t\trequired = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// verify if the field is required in message options\n\t\tif messageSchema, err := extractSchemaOptionFromMessageDescriptor(message.DescriptorProto); err == nil {\n\t\t\tfor _, fieldName := range messageSchema.GetJsonSchema().GetRequired() {\n\t\t\t\t// Required fields can be field names or json_name values\n\t\t\t\tif fieldName == field.GetJsonName() || fieldName == field.GetName() {\n\t\t\t\t\trequired = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// verify if the field is deprecated, either via proto or annotation\n\t\tprotoDeprecated := field.GetOptions().GetDeprecated() && reg.GetEnableFieldDeprecation()\n\t\tannotationDeprecated := getFieldConfiguration(reg, field).GetDeprecated()\n\t\tdeprecated := protoDeprecated || annotationDeprecated\n\n\t\tparam := openapiParameterObject{\n\t\t\tDescription: desc,\n\t\t\tIn:          \"query\",\n\t\t\tDefault:     schema.Default,\n\t\t\tType:        schema.Type,\n\t\t\tItems:       schema.Items,\n\t\t\tFormat:      schema.Format,\n\t\t\tPattern:     schema.Pattern,\n\t\t\tRequired:    required,\n\t\t\tDeprecated:  deprecated,\n\t\t\tUniqueItems: schema.UniqueItems,\n\t\t\textensions:  schema.extensions,\n\t\t\tEnum:        schema.Enum,\n\t\t}\n\t\tif param.Type == \"array\" {\n\t\t\tparam.CollectionFormat = \"multi\"\n\t\t}\n\n\t\tparam.Name = prefix + reg.FieldName(field)\n\n\t\tif isEnum {\n\t\t\tenum, err := reg.LookupEnum(\"\", fieldType)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"unknown enum type %s\", fieldType)\n\t\t\t}\n\t\t\tif items != nil { // array\n\t\t\t\tparam.Items = &openapiItemsObject{\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\tEnum: listEnumNames(reg, enum),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tif reg.GetEnumsAsInts() {\n\t\t\t\t\tparam.Items.Type = \"integer\"\n\t\t\t\t\tparam.Items.Enum = listEnumNumbers(reg, enum)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tparam.Type = \"string\"\n\t\t\t\tparam.Enum = listEnumNames(reg, enum)\n\t\t\t\tparam.Default = getEnumDefault(reg, enum)\n\t\t\t\tif reg.GetEnumsAsInts() {\n\t\t\t\t\tparam.Type = \"integer\"\n\t\t\t\t\tparam.Enum = listEnumNumbers(reg, enum)\n\t\t\t\t\tparam.Default = getEnumDefaultNumber(reg, enum)\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalueComments := enumValueProtoComments(reg, enum)\n\t\t\tif valueComments != \"\" {\n\t\t\t\tparam.Description = strings.TrimLeft(param.Description+\"\\n\\n \"+valueComments, \"\\n\")\n\t\t\t}\n\t\t}\n\t\treturn []openapiParameterObject{param}, nil\n\t}\n\n\t// nested type, recurse\n\tmsg, err := reg.LookupMsg(\"\", fieldType)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unknown message type %s\", fieldType)\n\t}\n\n\t// Check for cyclical message reference:\n\tif ok := cycle.Check(*msg.Name); !ok {\n\t\treturn nil, fmt.Errorf(\"exceeded recursive count (%d) for query parameter %q\", cycle.count, fieldType)\n\t}\n\n\t// Construct a new map with the message name so a cycle further down the recursive path can be detected.\n\t// Do not keep anything in the original touched reference and do not pass that reference along.  This will\n\t// prevent clobbering adjacent records while recursing.\n\ttouchedOut := cycle.Branch()\n\n\tfor _, nestedField := range msg.Fields {\n\t\tif !isVisible(getFieldVisibilityOption(nestedField), reg) {\n\t\t\tcontinue\n\t\t}\n\n\t\tfieldName := reg.FieldName(field)\n\t\tp, err := nestedQueryParams(msg, nestedField, prefix+fieldName+\".\", reg, pathParams, body, touchedOut)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparams = append(params, p...)\n\t}\n\treturn params, nil\n}\n\nfunc getMapParamKey(t descriptorpb.FieldDescriptorProto_Type) (string, error) {\n\ttType, f, ok := primitiveSchema(t)\n\tif !ok || f == \"byte\" || f == \"float\" || f == \"double\" {\n\t\treturn \"\", fmt.Errorf(\"unsupported type: %q\", f)\n\t}\n\treturn tType, nil\n}\n\n// findServicesMessagesAndEnumerations discovers all messages and enums defined in the RPC methods of the service.\nfunc findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descriptor.Registry, m messageMap, ms messageMap, e enumMap, refs refMap) {\n\tfor _, svc := range s {\n\t\tif !isVisible(getServiceVisibilityOption(svc), reg) {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, meth := range svc.Methods {\n\t\t\t// Request may be fully included in query\n\t\t\t{\n\t\t\t\tif !isVisible(getMethodVisibilityOption(meth), reg) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Only process methods with HTTP bindings (exposed via HTTP annotations)\n\t\t\t\t// This prevents unused message definitions from appearing in the OpenAPI document\n\t\t\t\tif len(meth.Bindings) == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tswgReqName, ok := fullyQualifiedNameToOpenAPIName(meth.RequestType.FQMN(), reg)\n\t\t\t\tif !ok {\n\t\t\t\t\tgrpclog.Errorf(\"couldn't resolve OpenAPI name for FQMN %q\", meth.RequestType.FQMN())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif _, ok := refs[fmt.Sprintf(\"#/definitions/%s\", swgReqName)]; ok {\n\t\t\t\t\tif !skipRenderingRef(meth.RequestType.FQMN()) {\n\t\t\t\t\t\tm[swgReqName] = meth.RequestType\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswgRspName, ok := fullyQualifiedNameToOpenAPIName(meth.ResponseType.FQMN(), reg)\n\t\t\tif !ok && !skipRenderingRef(meth.ResponseType.FQMN()) {\n\t\t\t\tgrpclog.Errorf(\"couldn't resolve OpenAPI name for FQMN %q\", meth.ResponseType.FQMN())\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfindNestedMessagesAndEnumerations(meth.RequestType, reg, m, e)\n\n\t\t\tif !skipRenderingRef(meth.ResponseType.FQMN()) {\n\t\t\t\tm[swgRspName] = meth.ResponseType\n\t\t\t}\n\t\t\tfindNestedMessagesAndEnumerations(meth.ResponseType, reg, m, e)\n\t\t}\n\t}\n}\n\n// findNestedMessagesAndEnumerations those can be generated by the services.\nfunc findNestedMessagesAndEnumerations(message *descriptor.Message, reg *descriptor.Registry, m messageMap, e enumMap) {\n\t// Iterate over all the fields that\n\tfor _, t := range message.Fields {\n\t\tif !isVisible(getFieldVisibilityOption(t), reg) {\n\t\t\tcontinue\n\t\t}\n\n\t\tfieldType := t.GetTypeName()\n\t\t// If the type is an empty string then it is a proto primitive\n\t\tif fieldType != \"\" {\n\t\t\tif _, ok := m[fieldType]; !ok {\n\t\t\t\tmsg, err := reg.LookupMsg(\"\", fieldType)\n\t\t\t\tif err != nil {\n\t\t\t\t\tenum, err := reg.LookupEnum(\"\", fieldType)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tpanic(err)\n\t\t\t\t\t}\n\t\t\t\t\te[fieldType] = enum\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tm[fieldType] = msg\n\t\t\t\tfindNestedMessagesAndEnumerations(msg, reg, m, e)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// collectReferencedNamesForCache scans services and messages to collect all\n// FQMNs/FQENs that will be referenced, WITHOUT using the naming cache.\n// This allows us to build the cache with the correct filtered names BEFORE\n// any code tries to use it.\nfunc collectReferencedNamesForCache(services []*descriptor.Service, messages []*descriptor.Message, reg *descriptor.Registry) map[string]bool {\n\trefs := make(map[string]bool)\n\n\t// Scan services FIRST so collectNestedTypeFQNs fully traverses\n\t// message graphs without being short-circuited by pre-populated entries.\n\tfor _, svc := range services {\n\t\tif !isVisible(getServiceVisibilityOption(svc), reg) {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, meth := range svc.Methods {\n\t\t\tif !isVisible(getMethodVisibilityOption(meth), reg) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif len(meth.Bindings) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Add method FQN (needed for body:\"*\" with path params)\n\t\t\trefs[meth.FQMN()] = true\n\n\t\t\t// Add request/response types\n\t\t\trefs[meth.RequestType.FQMN()] = true\n\t\t\trefs[meth.ResponseType.FQMN()] = true\n\n\t\t\t// Recursively add nested types\n\t\t\tcollectNestedTypeFQNs(meth.RequestType, reg, refs)\n\t\t\tcollectNestedTypeFQNs(meth.ResponseType, reg, refs)\n\t\t}\n\t}\n\n\t// Add messages from the current file AFTER service scanning.\n\t// This must come after the service loop's collectNestedTypeFQNs calls,\n\t// otherwise pre-populated message entries cause the traversal to\n\t// short-circuit and miss nested types like enums inside referenced messages.\n\t// We also traverse each message's nested types here because\n\t// renderMessagesAsDefinition renders ALL messages from the file, not just\n\t// those reachable from service methods. Without this, cross-package types\n\t// referenced by non-service messages would be missing from the naming cache.\n\tfor _, msg := range messages {\n\t\trefs[msg.FQMN()] = true\n\t\tcollectNestedTypeFQNs(msg, reg, refs)\n\t}\n\n\t// Add google.rpc.Status if default errors enabled\n\tif !reg.GetDisableDefaultErrors() {\n\t\trefs[\".google.rpc.Status\"] = true\n\t\t// Also add nested types of Status\n\t\tif statusMsg, err := reg.LookupMsg(\"google.rpc\", \"Status\"); err == nil {\n\t\t\tcollectNestedTypeFQNs(statusMsg, reg, refs)\n\t\t}\n\t}\n\n\treturn refs\n}\n\n// collectNestedTypeFQNs recursively collects FQMNs/FQENs for all nested types\n// of a message. Does NOT use the naming cache.\nfunc collectNestedTypeFQNs(message *descriptor.Message, reg *descriptor.Registry, refs map[string]bool) {\n\tfor _, field := range message.Fields {\n\t\tif !isVisible(getFieldVisibilityOption(field), reg) {\n\t\t\tcontinue\n\t\t}\n\t\tfieldType := field.GetTypeName()\n\t\tif fieldType == \"\" {\n\t\t\tcontinue // primitive type\n\t\t}\n\t\tif refs[fieldType] {\n\t\t\tcontinue // already visited\n\t\t}\n\t\trefs[fieldType] = true\n\n\t\t// If it's a message, recurse\n\t\tif msg, err := reg.LookupMsg(\"\", fieldType); err == nil {\n\t\t\tcollectNestedTypeFQNs(msg, reg, refs)\n\t\t}\n\t\t// Enums don't have nested types, no recursion needed\n\t}\n}\n\nfunc skipRenderingRef(refName string) bool {\n\t_, ok := wktSchemas[refName]\n\treturn ok\n}\n\nfunc renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry, customRefs refMap, pathParams []descriptor.Parameter) (openapiSchemaObject, error) {\n\tschema := openapiSchemaObject{\n\t\tschemaCore: schemaCore{\n\t\t\tType: \"object\",\n\t\t},\n\t}\n\n\tif reg.GetGenerateXGoType() && msg.File.GoPkg.Path != \"\" {\n\t\tif schema.extensions == nil {\n\t\t\tschema.extensions = []extension{}\n\t\t}\n\t\tgoTypeName := msg.GetName()\n\n\t\tgoTypeName = casing.JSONCamelCase(goTypeName)\n\t\tschema.extensions = append(schema.extensions, extension{\n\t\t\tkey: \"x-go-type\",\n\t\t\tvalue: json.RawMessage(`{\n                \"import\": {\n                    \"package\": \"` + msg.File.GoPkg.Path + `\"\n                },\n                \"type\": \"` + goTypeName + `\"\n            }`),\n\t\t})\n\t}\n\n\tmsgComments := protoComments(reg, msg.File, msg.Outers, \"MessageType\", int32(msg.Index))\n\tif err := updateOpenAPIDataFromComments(reg, &schema, msg, msgComments, false); err != nil {\n\t\treturn openapiSchemaObject{}, err\n\t}\n\topts, err := getMessageOpenAPIOption(reg, msg)\n\tif err != nil {\n\t\treturn openapiSchemaObject{}, err\n\t}\n\tif opts != nil {\n\t\tprotoSchema := openapiSchemaFromProtoSchema(opts, reg, customRefs, msg)\n\n\t\t// Warning: Make sure not to overwrite any fields already set on the schema type.\n\t\tschema.ExternalDocs = protoSchema.ExternalDocs\n\t\tschema.ReadOnly = protoSchema.ReadOnly\n\t\tschema.MultipleOf = protoSchema.MultipleOf\n\t\tschema.Maximum = protoSchema.Maximum\n\t\tschema.ExclusiveMaximum = protoSchema.ExclusiveMaximum\n\t\tschema.Minimum = protoSchema.Minimum\n\t\tschema.ExclusiveMinimum = protoSchema.ExclusiveMinimum\n\t\tschema.MaxLength = protoSchema.MaxLength\n\t\tschema.MinLength = protoSchema.MinLength\n\t\tschema.Pattern = protoSchema.Pattern\n\t\tschema.Default = protoSchema.Default\n\t\tschema.MaxItems = protoSchema.MaxItems\n\t\tschema.MinItems = protoSchema.MinItems\n\t\tschema.UniqueItems = protoSchema.UniqueItems\n\t\tschema.MaxProperties = protoSchema.MaxProperties\n\t\tschema.MinProperties = protoSchema.MinProperties\n\t\tschema.Required = protoSchema.Required\n\t\tschema.XNullable = protoSchema.XNullable\n\t\tschema.extensions = protoSchema.extensions\n\t\tif protoSchema.schemaCore.Type != \"\" || protoSchema.schemaCore.Ref != \"\" {\n\t\t\tschema.schemaCore = protoSchema.schemaCore\n\t\t}\n\t\tif protoSchema.Title != \"\" {\n\t\t\tschema.Title = protoSchema.Title\n\t\t}\n\t\tif protoSchema.Description != \"\" {\n\t\t\tschema.Description = protoSchema.Description\n\t\t}\n\t\tif protoSchema.Example != nil {\n\t\t\tschema.Example = protoSchema.Example\n\t\t}\n\t}\n\n\tschema.Required = filterOutExcludedFields(schema.Required, pathParams)\n\n\tfor _, f := range msg.Fields {\n\t\tif !isVisible(getFieldVisibilityOption(f), reg) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif shouldExcludeField(f.GetName(), pathParams) {\n\t\t\tcontinue\n\t\t}\n\t\tsubPathParams := subPathParams(f.GetName(), pathParams)\n\t\tfieldSchema, err := renderFieldAsDefinition(f, reg, customRefs, subPathParams)\n\t\tif err != nil {\n\t\t\treturn openapiSchemaObject{}, err\n\t\t}\n\t\tcomments := fieldProtoComments(reg, msg, f)\n\t\tif err := updateOpenAPIDataFromComments(reg, &fieldSchema, f, comments, false); err != nil {\n\t\t\treturn openapiSchemaObject{}, err\n\t\t}\n\n\t\tif requiredIdx := find(schema.Required, *f.Name); requiredIdx != -1 && reg.GetUseJSONNamesForFields() {\n\t\t\tschema.Required[requiredIdx] = f.GetJsonName()\n\t\t}\n\n\t\tif fieldSchema.Required != nil {\n\t\t\t// Only hoist required fields to parent if there are no path params inside this field.\n\t\t\tif len(subPathParams) == 0 {\n\t\t\t\tschema.Required = getUniqueFields(schema.Required, fieldSchema.Required)\n\t\t\t\tschema.Required = append(schema.Required, fieldSchema.Required...)\n\t\t\t\t// To avoid populating both the field schema require and message schema require, unset the field schema require.\n\t\t\t\t// See issue #2635.\n\t\t\t\tfieldSchema.Required = nil\n\t\t\t} else {\n\t\t\t\t// When there are path params, we need to separate field-level required from nested required.\n\t\t\t\t// The field name itself (if required) should be in parent's required, but nested field names\n\t\t\t\t// should stay in the nested schema's required.\n\t\t\t\tfieldName := f.GetName()\n\t\t\t\tif reg.GetUseJSONNamesForFields() {\n\t\t\t\t\tfieldName = f.GetJsonName()\n\t\t\t\t}\n\t\t\t\t// Check if the field name is in the fieldSchema.Required (it would be if the field is marked REQUIRED)\n\t\t\t\tvar nestedRequired []string\n\t\t\t\tfieldIsRequired := false\n\t\t\t\tfor _, req := range fieldSchema.Required {\n\t\t\t\t\tif req == fieldName {\n\t\t\t\t\t\tfieldIsRequired = true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnestedRequired = append(nestedRequired, req)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Add the field name to parent's required if the field itself is required\n\t\t\t\tif fieldIsRequired && find(schema.Required, fieldName) == -1 {\n\t\t\t\t\tschema.Required = append(schema.Required, fieldName)\n\t\t\t\t}\n\t\t\t\t// Keep only the nested required fields in the field schema\n\t\t\t\tfieldSchema.Required = nestedRequired\n\t\t\t}\n\t\t}\n\n\t\tif reg.GetUseAllOfForRefs() {\n\t\t\tif fieldSchema.Ref != \"\" {\n\t\t\t\t// Per the JSON Reference syntax: Any members other than \"$ref\" in a JSON Reference object SHALL be ignored.\n\t\t\t\t// https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3\n\t\t\t\t// However, use allOf to specify Title/Description/Example/readOnly fields.\n\t\t\t\tif fieldSchema.Title != \"\" || fieldSchema.Description != \"\" || len(fieldSchema.Example) > 0 || fieldSchema.ReadOnly {\n\t\t\t\t\tfieldSchema = openapiSchemaObject{\n\t\t\t\t\t\tTitle:       fieldSchema.Title,\n\t\t\t\t\t\tDescription: fieldSchema.Description,\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tExample: fieldSchema.Example,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tReadOnly: fieldSchema.ReadOnly,\n\t\t\t\t\t\tAllOf:    []allOfEntry{{Ref: fieldSchema.Ref}},\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfieldSchema = openapiSchemaObject{schemaCore: schemaCore{Ref: fieldSchema.Ref}}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tkv := keyVal{Value: fieldSchema}\n\t\tkv.Key = reg.FieldName(f)\n\t\tif schema.Properties == nil {\n\t\t\tschema.Properties = &openapiSchemaObjectProperties{}\n\t\t}\n\t\t*schema.Properties = append(*schema.Properties, kv)\n\t}\n\n\tif msg.FQMN() == \".google.protobuf.Any\" {\n\t\ttransformAnyForJSON(&schema, reg.GetUseJSONNamesForFields())\n\t}\n\n\treturn schema, nil\n}\n\nfunc renderFieldAsDefinition(f *descriptor.Field, reg *descriptor.Registry, refs refMap, pathParams []descriptor.Parameter) (openapiSchemaObject, error) {\n\tif len(pathParams) == 0 {\n\t\treturn schemaOfField(f, reg, refs), nil\n\t}\n\tlocation := \"\"\n\tif ix := strings.LastIndex(f.Message.FQMN(), \".\"); ix > 0 {\n\t\tlocation = f.Message.FQMN()[0:ix]\n\t}\n\tmsg, err := reg.LookupMsg(location, f.GetTypeName())\n\tif err != nil {\n\t\treturn openapiSchemaObject{}, err\n\t}\n\tschema, err := renderMessageAsDefinition(msg, reg, refs, pathParams)\n\tif err != nil {\n\t\treturn openapiSchemaObject{}, err\n\t}\n\tcomments := fieldProtoComments(reg, f.Message, f)\n\tif len(comments) > 0 {\n\t\t// Use title and description from field instead of nested message if present.\n\t\tparagraphs := strings.Split(comments, paragraphDeliminator)\n\t\tfirstParagraph := strings.TrimSpace(paragraphs[0])\n\t\tif !strings.Contains(firstParagraph, \"\\n\") {\n\t\t\tschema.Title = firstParagraph\n\t\t\tschema.Description = strings.TrimSpace(strings.Join(paragraphs[1:], paragraphDeliminator))\n\t\t} else {\n\t\t\tschema.Description = strings.TrimSpace(comments)\n\t\t}\n\t}\n\n\t// to handle case where path param is present inside the field of descriptorpb.FieldDescriptorProto_TYPE_MESSAGE type\n\t// it still needs to consider the behaviour of the field which was being done by schemaOfField() in case there are no path params\n\tif j, err := getFieldBehaviorOption(reg, f); err == nil {\n\t\tupdateSwaggerObjectFromFieldBehavior(&schema, j, reg, f)\n\t}\n\n\treturn schema, nil\n}\n\n// transformAnyForJSON should be called when the schema object represents a google.protobuf.Any, and will replace the\n// Properties slice with a single value for '@type'. We mutate the incorrectly named field so that we inherit the same\n// documentation as specified on the original field in the protobuf descriptors.\nfunc transformAnyForJSON(schema *openapiSchemaObject, useJSONNames bool) {\n\tvar typeFieldName string\n\tif useJSONNames {\n\t\ttypeFieldName = \"typeUrl\"\n\t} else {\n\t\ttypeFieldName = \"type_url\"\n\t}\n\n\tfor _, property := range *schema.Properties {\n\t\tif property.Key == typeFieldName {\n\t\t\tschema.AdditionalProperties = &openapiSchemaObject{}\n\t\t\tschema.Properties = &openapiSchemaObjectProperties{keyVal{\n\t\t\t\tKey:   \"@type\",\n\t\t\t\tValue: property.Value,\n\t\t\t}}\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, reg *descriptor.Registry, customRefs refMap, pathParams []descriptor.Parameter) error {\n\tfor name, msg := range messages {\n\t\tswgName, ok := fullyQualifiedNameToOpenAPIName(msg.FQMN(), reg)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"can't resolve OpenAPI name from %q\", msg.FQMN())\n\t\t}\n\t\tif skipRenderingRef(name) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif opt := msg.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry {\n\t\t\tcontinue\n\t\t}\n\t\tvar err error\n\t\td[swgName], err = renderMessageAsDefinition(msg, reg, customRefs, pathParams)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// isVisible checks if a field/RPC is visible based on the visibility restriction\n// combined with the `visibility_restriction_selectors`.\n// Elements with an overlap on `visibility_restriction_selectors` are visible, those without are not visible.\n// Elements without `google.api.VisibilityRule` annotations entirely are always visible.\nfunc isVisible(r *visibility.VisibilityRule, reg *descriptor.Registry) bool {\n\tif r == nil {\n\t\treturn true\n\t}\n\n\trestrictions := strings.Split(strings.TrimSpace(r.Restriction), \",\")\n\t// No restrictions results in the element always being visible\n\tif len(restrictions) == 0 {\n\t\treturn true\n\t}\n\n\tfor _, restriction := range restrictions {\n\t\tif reg.GetVisibilityRestrictionSelectors()[strings.TrimSpace(restriction)] {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc shouldExcludeField(name string, excluded []descriptor.Parameter) bool {\n\tfor _, p := range excluded {\n\t\tif len(p.FieldPath) == 1 && name == p.FieldPath[0].Name {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc filterOutExcludedFields(fields []string, excluded []descriptor.Parameter) []string {\n\tvar filtered []string\n\tfor _, f := range fields {\n\t\tif !shouldExcludeField(f, excluded) {\n\t\t\tfiltered = append(filtered, f)\n\t\t}\n\t}\n\treturn filtered\n}\n\n// schemaOfFieldBase returns a base Schema Object for a protobuf field.\nfunc schemaOfFieldBase(f *descriptor.Field, reg *descriptor.Registry, refs refMap) openapiSchemaObject {\n\tconst (\n\t\tsingular = 0\n\t\tarray    = 1\n\t\tobject   = 2\n\t)\n\tvar (\n\t\tcore      schemaCore\n\t\taggregate int\n\t)\n\n\tfd := f.FieldDescriptorProto\n\tlocation := \"\"\n\tif ix := strings.LastIndex(f.Message.FQMN(), \".\"); ix > 0 {\n\t\tlocation = f.Message.FQMN()[0:ix]\n\t}\n\tif m, err := reg.LookupMsg(location, f.GetTypeName()); err == nil {\n\t\tif opt := m.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry {\n\t\t\tfd = m.GetField()[1]\n\t\t\taggregate = object\n\t\t}\n\t}\n\tif fd.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED {\n\t\taggregate = array\n\t}\n\n\tvar props *openapiSchemaObjectProperties\n\n\tswitch ft := fd.GetType(); ft {\n\tcase descriptorpb.FieldDescriptorProto_TYPE_ENUM, descriptorpb.FieldDescriptorProto_TYPE_MESSAGE, descriptorpb.FieldDescriptorProto_TYPE_GROUP:\n\t\tif wktSchema, ok := wktSchemas[fd.GetTypeName()]; ok {\n\t\t\tcore = wktSchema\n\t\t\tif fd.GetTypeName() == \".google.protobuf.Empty\" {\n\t\t\t\tprops = &openapiSchemaObjectProperties{}\n\t\t\t}\n\t\t} else {\n\t\t\tswgRef, ok := fullyQualifiedNameToOpenAPIName(fd.GetTypeName(), reg)\n\t\t\tif !ok {\n\t\t\t\tpanic(fmt.Sprintf(\"can't resolve OpenAPI ref from typename %q\", fd.GetTypeName()))\n\t\t\t}\n\t\t\tcore = schemaCore{\n\t\t\t\tRef: \"#/definitions/\" + swgRef,\n\t\t\t}\n\t\t\tif refs != nil {\n\t\t\t\trefs[fd.GetTypeName()] = struct{}{}\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tftype, format, ok := primitiveSchema(ft)\n\t\tif ok {\n\t\t\tcore = schemaCore{Type: ftype, Format: format}\n\t\t} else {\n\t\t\tcore = schemaCore{Type: ft.String(), Format: \"UNKNOWN\"}\n\t\t}\n\t}\n\n\tvar ret openapiSchemaObject\n\n\tswitch aggregate {\n\tcase array:\n\t\t// Only set core.Type = \"object\" for MESSAGE types with $ref if the flag is not set.\n\t\t// When omitArrayItemTypeWhenRefSibling is true, we omit \"type: object\" to avoid\n\t\t// no-$ref-siblings violations in OpenAPI v2, since $ref already implies the type is object.\n\t\tif !reg.GetOmitArrayItemTypeWhenRefSibling() {\n\t\t\tif _, ok := wktSchemas[fd.GetTypeName()]; !ok && fd.GetType() == descriptorpb.FieldDescriptorProto_TYPE_MESSAGE {\n\t\t\t\tcore.Type = \"object\"\n\t\t\t}\n\t\t}\n\t\tret = openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType:  \"array\",\n\t\t\t\tItems: (*openapiItemsObject)(&openapiSchemaObject{schemaCore: core}),\n\t\t\t},\n\t\t}\n\tcase object:\n\t\tret = openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tAdditionalProperties: &openapiSchemaObject{Properties: props, schemaCore: core},\n\t\t}\n\tdefault:\n\t\tret = openapiSchemaObject{\n\t\t\tschemaCore: core,\n\t\t\tProperties: props,\n\t\t}\n\t}\n\treturn ret\n}\n\n// schemaOfField returns a OpenAPI Schema Object for a protobuf field.\nfunc schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) openapiSchemaObject {\n\tret := schemaOfFieldBase(f, reg, refs)\n\n\tif j, err := getFieldOpenAPIOption(reg, f); err == nil {\n\t\tupdateswaggerObjectFromJSONSchema(&ret, j, reg, f)\n\t}\n\n\tif j, err := getFieldBehaviorOption(reg, f); err == nil {\n\t\tupdateSwaggerObjectFromFieldBehavior(&ret, j, reg, f)\n\t}\n\n\tfor i, required := range ret.Required {\n\t\tif required == f.GetName() {\n\t\t\tret.Required[i] = reg.FieldName(f)\n\t\t}\n\t}\n\n\tslices.Sort(ret.Required)\n\tret.Required = slices.Compact(ret.Required)\n\n\tif reg.GetProto3OptionalNullable() && f.GetProto3Optional() {\n\t\tret.XNullable = true\n\t}\n\n\treturn ret\n}\n\n// primitiveSchema returns a pair of \"Type\" and \"Format\" in JSON Schema for\n// the given primitive field type.\n// The last return parameter is true iff the field type is actually primitive.\nfunc primitiveSchema(t descriptorpb.FieldDescriptorProto_Type) (ftype, format string, ok bool) {\n\tswitch t {\n\tcase descriptorpb.FieldDescriptorProto_TYPE_DOUBLE:\n\t\treturn \"number\", \"double\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_FLOAT:\n\t\treturn \"number\", \"float\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_INT64:\n\t\treturn \"string\", \"int64\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_UINT64:\n\t\t// 64bit integer types are marshaled as string in the default JSONPb marshaler.\n\t\t// TODO(yugui) Add an option to declare 64bit integers as int64.\n\t\t//\n\t\t// NOTE: uint64 is not a predefined format of integer type in OpenAPI spec.\n\t\t// So we cannot expect that uint64 is commonly supported by OpenAPI processor.\n\t\treturn \"string\", \"uint64\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_INT32:\n\t\treturn \"integer\", \"int32\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_FIXED64:\n\t\t// Ditto.\n\t\treturn \"string\", \"uint64\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_FIXED32:\n\t\t// Ditto.\n\t\treturn \"integer\", \"int64\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_BOOL:\n\t\t// NOTE: in OpenAPI specification, format should be empty on boolean type\n\t\treturn \"boolean\", \"\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_STRING:\n\t\t// NOTE: in OpenAPI specification, can be empty on string type\n\t\t// see: https://swagger.io/specification/v2/#data-types\n\t\treturn \"string\", \"\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_BYTES:\n\t\treturn \"string\", \"byte\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_UINT32:\n\t\t// Ditto.\n\t\treturn \"integer\", \"int64\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_SFIXED32:\n\t\treturn \"integer\", \"int32\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_SFIXED64:\n\t\treturn \"string\", \"int64\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_SINT32:\n\t\treturn \"integer\", \"int32\", true\n\tcase descriptorpb.FieldDescriptorProto_TYPE_SINT64:\n\t\treturn \"string\", \"int64\", true\n\tdefault:\n\t\treturn \"\", \"\", false\n\t}\n}\n\n// renderEnumerationsAsDefinition inserts enums into the definitions object.\nfunc renderEnumerationsAsDefinition(enums enumMap, d openapiDefinitionsObject, reg *descriptor.Registry, customRefs refMap) {\n\tfor _, enum := range enums {\n\t\tswgName, ok := fullyQualifiedNameToOpenAPIName(enum.FQEN(), reg)\n\t\tif !ok {\n\t\t\tpanic(fmt.Sprintf(\"can't resolve OpenAPI name from FQEN %q\", enum.FQEN()))\n\t\t}\n\t\tenumComments := protoComments(reg, enum.File, enum.Outers, \"EnumType\", int32(enum.Index))\n\n\t\t// it may be necessary to sort the result of the GetValue function.\n\t\tenumNames := listEnumNames(reg, enum)\n\t\tdefaultValue := getEnumDefault(reg, enum)\n\t\tvalueComments := enumValueProtoComments(reg, enum)\n\t\tif valueComments != \"\" {\n\t\t\tenumComments = strings.TrimLeft(enumComments+\"\\n\\n \"+valueComments, \"\\n\")\n\t\t}\n\t\tenumSchemaObject := openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType:    \"string\",\n\t\t\t\tEnum:    enumNames,\n\t\t\t\tDefault: defaultValue,\n\t\t\t},\n\t\t}\n\n\t\tif reg.GetEnumsAsInts() {\n\t\t\tenumSchemaObject.Type = \"integer\"\n\t\t\tenumSchemaObject.Format = \"int32\"\n\t\t\tenumSchemaObject.Default = getEnumDefaultNumber(reg, enum)\n\t\t\tenumSchemaObject.Enum = listEnumNumbers(reg, enum)\n\t\t}\n\t\topts, err := getEnumOpenAPIOption(reg, enum)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tif opts != nil {\n\t\t\tprotoSchema := openapiSchemaFromProtoEnumSchema(opts, reg, customRefs, enum)\n\t\t\t// Warning: Make sure not to overwrite any fields already set on the schema type.\n\t\t\t// This is only a subset of the fields from JsonSchema since most of them only apply to arrays or objects not enums\n\t\t\tenumSchemaObject.ExternalDocs = protoSchema.ExternalDocs\n\t\t\tenumSchemaObject.ReadOnly = protoSchema.ReadOnly\n\t\t\tenumSchemaObject.extensions = protoSchema.extensions\n\t\t\tif protoSchema.Type != \"\" || protoSchema.Ref != \"\" {\n\t\t\t\tenumSchemaObject.schemaCore = protoSchema.schemaCore\n\t\t\t}\n\t\t\tif protoSchema.Title != \"\" {\n\t\t\t\tenumSchemaObject.Title = protoSchema.Title\n\t\t\t}\n\t\t\tif protoSchema.Description != \"\" {\n\t\t\t\tenumSchemaObject.Description = protoSchema.Description\n\t\t\t}\n\t\t\tif protoSchema.Example != nil {\n\t\t\t\tenumSchemaObject.Example = protoSchema.Example\n\t\t\t}\n\t\t}\n\t\tif err := updateOpenAPIDataFromComments(reg, &enumSchemaObject, enum, enumComments, false); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\td[swgName] = enumSchemaObject\n\t}\n}\n\n// Take in a FQMN or FQEN and return a OpenAPI safe version of the FQMN and\n// a boolean indicating if FQMN was properly resolved.\nfunc fullyQualifiedNameToOpenAPIName(fqn string, reg *descriptor.Registry) (string, bool) {\n\tregistriesSeenMutex.Lock()\n\tdefer registriesSeenMutex.Unlock()\n\tif mapping, present := registriesSeen[reg]; present {\n\t\tret, ok := mapping[fqn]\n\t\treturn ret, ok\n\t}\n\tmapping := resolveFullyQualifiedNameToOpenAPINames(append(reg.GetAllFQMNs(), append(reg.GetAllFQENs(), reg.GetAllFQMethNs()...)...), reg.GetOpenAPINamingStrategy())\n\tregistriesSeen[reg] = mapping\n\tret, ok := mapping[fqn]\n\treturn ret, ok\n}\n\n// Lookup message type by location.name and return an openapiv2-safe version\n// of its FQMN.\nfunc lookupMsgAndOpenAPIName(location, name string, reg *descriptor.Registry) (*descriptor.Message, string, error) {\n\tmsg, err := reg.LookupMsg(location, name)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tswgName, ok := fullyQualifiedNameToOpenAPIName(msg.FQMN(), reg)\n\tif !ok {\n\t\treturn nil, \"\", fmt.Errorf(\"can't map OpenAPI name from FQMN %q\", msg.FQMN())\n\t}\n\treturn msg, swgName, nil\n}\n\n// registriesSeen is used to memoise calls to resolveFullyQualifiedNameToOpenAPINames so\n// we don't repeat it unnecessarily, since it can take some time.\nvar (\n\tregistriesSeen      = map[*descriptor.Registry]map[string]string{}\n\tregistriesSeenMutex sync.Mutex\n)\n\n// Take the names of every proto message and generate a unique reference for each, according to the given strategy.\nfunc resolveFullyQualifiedNameToOpenAPINames(messages []string, namingStrategy string) map[string]string {\n\tstrategyFn := LookupNamingStrategy(namingStrategy)\n\tif strategyFn == nil {\n\t\treturn nil\n\t}\n\treturn strategyFn(messages)\n}\n\nvar canRegexp = regexp.MustCompile(\"{([a-zA-Z][a-zA-Z0-9_.-]*)([^}]*)}\")\n\n// templateToParts splits a URL template into path segments for use by `partsToOpenAPIPath` and `partsToRegexpMap`.\n//\n// Parameters:\n//   - path:\tThe URL template as defined by https://github.com/googleapis/googleapis/blob/master/google/api/http.proto\n//   - reg:\tThe descriptor registry used to read compiler flags\n//   - fields:\tThe fields of the request message, only used when `useJSONNamesForFields` is true\n//   - msgs:\tThe Messages of the service binding, only used when `useJSONNamesForFields` is true\n//\n// Returns:\n//\n//\tThe path segments of the URL template.\nfunc templateToParts(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) []string {\n\t// It seems like the right thing to do here is to just use\n\t// strings.Split(path, \"/\") but that breaks badly when you hit a url like\n\t// /{my_field=prefix/*}/ and end up with 2 sections representing my_field.\n\t// Instead do the right thing and write a small pushdown (counter) automata\n\t// for it.\n\tvar parts []string\n\tdepth := 0\n\tbuffer := \"\"\n\tfor i, char := range path {\n\t\tswitch char {\n\t\tcase '{':\n\t\t\t// Push on the stack\n\t\t\tdepth++\n\t\t\tbuffer += string(char)\n\t\tcase '}':\n\t\t\tif depth == 0 {\n\t\t\t\tpanic(\"Encountered } without matching { before it.\")\n\t\t\t}\n\t\t\t// Pop from the stack\n\t\t\tdepth--\n\t\t\tif !reg.GetUseJSONNamesForFields() {\n\t\t\t\tbuffer += string(char)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tparamNameProto := strings.SplitN(buffer[1:], \"=\", 2)[0]\n\t\t\tparamNameCamelCase := lowerCamelCase(paramNameProto, fields, msgs)\n\t\t\tbuffer = strings.Join([]string{\"{\", paramNameCamelCase, buffer[len(paramNameProto)+1:], \"}\"}, \"\")\n\t\tcase '/':\n\t\t\tif depth == 0 {\n\t\t\t\tparts = append(parts, buffer)\n\t\t\t\tbuffer = \"\"\n\t\t\t\t// Since the stack was empty when we hit the '/' we are done with this\n\t\t\t\t// section.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbuffer += string(char)\n\t\tcase ':':\n\t\t\tif depth == 0 {\n\t\t\t\t// Only treat this as a verb if we're at the end of the path or\n\t\t\t\t// if there are no more path segments (only more literals after the colon)\n\t\t\t\tremainingPath := path[i:]\n\t\t\t\tif !strings.Contains(remainingPath, \"/\") {\n\t\t\t\t\tparts = append(parts, buffer)\n\t\t\t\t\tverbSegment := remainingPath\n\t\t\t\t\tif reg.GetUseJSONNamesForFields() {\n\t\t\t\t\t\tverbSegment = processParametersInSegment(verbSegment, fields, msgs)\n\t\t\t\t\t}\n\t\t\t\t\tparts = append(parts, verbSegment)\n\t\t\t\t\treturn parts\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuffer += string(char)\n\t\tdefault:\n\t\t\tbuffer += string(char)\n\t\t}\n\t}\n\n\t// Now append the last element to parts\n\tparts = append(parts, buffer)\n\n\treturn parts\n}\n\n// processParametersInSegment processes a path segment (like \":verb/{param}\") to convert\n// parameter names to camelCase while preserving the overall structure\nfunc processParametersInSegment(segment string, fields []*descriptor.Field, msgs []*descriptor.Message) string {\n\tresult := segment\n\tdepth := 0\n\tvar paramStart int\n\tfor i, char := range segment {\n\t\tswitch char {\n\t\tcase '{':\n\t\t\tif depth == 0 {\n\t\t\t\tparamStart = i\n\t\t\t}\n\t\t\tdepth++\n\t\tcase '}':\n\t\t\tdepth--\n\t\t\tif depth == 0 {\n\t\t\t\tparamContent := segment[paramStart+1 : i]\n\t\t\t\tparamNameProto := strings.SplitN(paramContent, \"=\", 2)[0]\n\t\t\t\tparamNameCamelCase := lowerCamelCase(paramNameProto, fields, msgs)\n\n\t\t\t\toldParam := \"{\" + paramContent + \"}\"\n\t\t\t\tnewParam := \"{\" + paramNameCamelCase\n\t\t\t\tif strings.Contains(paramContent, \"=\") {\n\t\t\t\t\tnewParam += paramContent[len(paramNameProto):]\n\t\t\t\t}\n\t\t\t\tnewParam += \"}\"\n\n\t\t\t\tresult = strings.Replace(result, oldParam, newParam, 1)\n\t\t\t}\n\t\t}\n\t}\n\treturn result\n}\n\n// partsToOpenAPIPath converts each path part of the form /path/{string_value=strprefix/*} which is defined in\n// https://github.com/googleapis/googleapis/blob/master/google/api/http.proto to the OpenAPI expected form /path/{string_value}.\n// For example this would replace the path segment of \"{foo=bar/*}\" with \"{foo}\" or \"prefix{bang=bash/**}\" with \"prefix{bang}\".\n// OpenAPI 2 only allows simple path parameters with the constraints on that parameter specified in the OpenAPI\n// schema's \"pattern\" instead of in the path parameter itself.\nfunc partsToOpenAPIPath(parts []string, overrides map[string]string) string {\n\tfor index, part := range parts {\n\t\tpart = canRegexp.ReplaceAllString(part, \"{$1}\")\n\n\t\tif override, ok := overrides[part]; ok {\n\t\t\tpart = override\n\t\t}\n\t\tparts[index] = part\n\t}\n\tif last := len(parts) - 1; strings.HasPrefix(parts[last], \":\") {\n\t\t// Last item is a verb (\":\" LITERAL).\n\t\treturn strings.Join(parts[:last], \"/\") + parts[last]\n\t}\n\treturn strings.Join(parts, \"/\")\n}\n\n// partsToRegexpMap returns a map of parameter name to ECMA 262 patterns\n// which is what the \"pattern\" field on an OpenAPI parameter expects.\n// See https://swagger.io/specification/v2/ (Parameter Object) and\n// https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3.\n// The expression is generated based on expressions defined by https://github.com/googleapis/googleapis/blob/master/google/api/http.proto\n// \"Path Template Syntax\" section which allow for a \"param_name=foobar/*/bang/**\" style expressions inside\n// the path parameter placeholders that indicate constraints on the values of those parameters.\n// This function will scan the split parts of a path template for parameters and\n// outputs a map of the name of the parameter to a ECMA regular expression.  See the http.proto file for descriptions\n// of the supported syntax. This function will ignore any path parameters that don't contain a \"=\" after the\n// parameter name.  For supported parameters, we assume \"*\" represent all characters except \"/\" as it's\n// intended to match a single path element and we assume \"**\" matches any character as it's intended to match multiple\n// path elements.\n// For example \"{name=organizations/*/roles/*}\" would produce the regular expression for the \"name\" parameter of\n// \"organizations/[^/]+/roles/[^/]+\" or \"{bar=bing/*/bang/**}\" would produce the regular expression for the \"bar\"\n// parameter of \"bing/[^/]+/bang/.+\".\n//\n// Note that OpenAPI does not actually support path parameters with \"/\", see https://github.com/OAI/OpenAPI-Specification/issues/892\nfunc partsToRegexpMap(parts []string) map[string]string {\n\tregExps := make(map[string]string)\n\tfor _, part := range parts {\n\t\tif strings.Contains(part, \"/\") {\n\t\t\tgrpclog.Warningf(\"Path parameter %q contains '/', which is not supported in OpenAPI\", part)\n\t\t}\n\t\tif submatch := canRegexp.FindStringSubmatch(part); len(submatch) > 2 {\n\t\t\tif strings.HasPrefix(submatch[2], \"=\") { // this part matches the standard and should be made into a regular expression\n\t\t\t\t// assume the string's characters other than \"**\" and \"*\" are literals (not necessarily a good assumption 100% of the times, but it will support most use cases)\n\t\t\t\tregex := submatch[2][1:]\n\t\t\t\tregex = strings.ReplaceAll(regex, \"**\", \".+\")   // ** implies any character including \"/\"\n\t\t\t\tregex = strings.ReplaceAll(regex, \"*\", \"[^/]+\") // * implies any character except \"/\"\n\t\t\t\tregExps[submatch[1]] = regex\n\t\t\t}\n\t\t}\n\t}\n\treturn regExps\n}\n\nfunc renderServiceTags(services []*descriptor.Service, reg *descriptor.Registry) []openapiTagObject {\n\tvar tags []openapiTagObject\n\tfor _, svc := range services {\n\t\tif !isVisible(getServiceVisibilityOption(svc), reg) {\n\t\t\tcontinue\n\t\t}\n\t\ttagName := svc.GetName()\n\t\tif pkg := svc.File.GetPackage(); pkg != \"\" && reg.IsIncludePackageInTags() {\n\t\t\ttagName = pkg + \".\" + tagName\n\t\t}\n\n\t\ttag := openapiTagObject{\n\t\t\tName: tagName,\n\t\t}\n\n\t\topts, err := getServiceOpenAPIOption(reg, svc)\n\t\tif err != nil {\n\t\t\tgrpclog.Error(err)\n\t\t\treturn nil\n\t\t}\n\t\tif opts != nil {\n\t\t\ttag.Description = opts.Description\n\t\t\tif reg.GetUseGoTemplate() {\n\t\t\t\ttag.Description = goTemplateComments(tag.Description, svc, reg)\n\t\t\t}\n\t\t\tif opts.ExternalDocs != nil {\n\t\t\t\ttag.ExternalDocs = &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: opts.ExternalDocs.Description,\n\t\t\t\t\tURL:         opts.ExternalDocs.Url,\n\t\t\t\t}\n\t\t\t\tif reg.GetUseGoTemplate() {\n\t\t\t\t\ttag.ExternalDocs.Description = goTemplateComments(opts.ExternalDocs.Description, svc, reg)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif opts.GetName() != \"\" {\n\t\t\t\ttag.Name = opts.GetName()\n\t\t\t}\n\t\t}\n\t\ttags = append(tags, tag)\n\t}\n\treturn tags\n}\n\n// expandPathPatterns searches the URI parts for path parameters with pattern and when the pattern contains a sub-path,\n// it expands the pattern into the URI parts and adds the new path parameters to the pathParams slice.\n//\n// Parameters:\n//   - pathParts:\tthe URI parts parsed from the path template with `templateToParts` function\n//   - pathParams: the path parameters of the service binding\n//\n// Returns:\n//\n//\tThe modified pathParts and pathParams slice.\nfunc expandPathPatterns(pathParts []string, pathParams []descriptor.Parameter, reg *descriptor.Registry) ([]string, []descriptor.Parameter) {\n\texpandedPathParts := []string{}\n\tmodifiedPathParams := pathParams\n\tfor _, pathPart := range pathParts {\n\t\tif !strings.HasPrefix(pathPart, \"{\") || !strings.HasSuffix(pathPart, \"}\") {\n\t\t\texpandedPathParts = append(expandedPathParts, pathPart)\n\t\t\tcontinue\n\t\t}\n\t\twoBraces := pathPart[1 : len(pathPart)-1]\n\t\tparamPattern := strings.SplitN(woBraces, \"=\", 2)\n\t\tif len(paramPattern) != 2 {\n\t\t\texpandedPathParts = append(expandedPathParts, pathPart)\n\t\t\tcontinue\n\t\t}\n\t\tparamName := paramPattern[0]\n\t\tpattern := paramPattern[1]\n\t\tif pattern == \"*\" {\n\t\t\texpandedPathParts = append(expandedPathParts, pathPart)\n\t\t\tcontinue\n\t\t}\n\t\tpathParamIndex := slices.IndexFunc(modifiedPathParams, func(p descriptor.Parameter) bool {\n\t\t\tif !reg.GetUseJSONNamesForFields() {\n\t\t\t\treturn p.FieldPath.String() == paramName\n\t\t\t}\n\t\t\tfieldPath := casing.JSONCamelCase(p.FieldPath.String())\n\t\t\treturn fieldPath == paramName\n\t\t})\n\t\tif pathParamIndex == -1 {\n\t\t\tpanic(fmt.Sprintf(\"Path parameter %q not found in path parameters\", paramName))\n\t\t}\n\t\tpathParam := modifiedPathParams[pathParamIndex]\n\t\tpatternParts := strings.Split(pattern, \"/\")\n\t\tfor _, patternPart := range patternParts {\n\t\t\tif patternPart != \"*\" {\n\t\t\t\texpandedPathParts = append(expandedPathParts, patternPart)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlastPart := expandedPathParts[len(expandedPathParts)-1]\n\t\t\tparamName := strings.TrimSuffix(lastPart, \"s\")\n\t\t\tif reg.GetUseJSONNamesForFields() {\n\t\t\t\tparamName = casing.JSONCamelCase(paramName)\n\t\t\t}\n\t\t\texpandedPathParts = append(expandedPathParts, \"{\"+paramName+\"}\")\n\t\t\tnewParam := descriptor.Parameter{\n\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\tName: proto.String(paramName),\n\t\t\t\t\t\tType: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t},\n\t\t\t\t\tMessage:           pathParam.Target.Message,\n\t\t\t\t\tFieldMessage:      pathParam.Target.FieldMessage,\n\t\t\t\t\tForcePrefixedName: pathParam.Target.ForcePrefixedName,\n\t\t\t\t},\n\t\t\t\tFieldPath: []descriptor.FieldPathComponent{{\n\t\t\t\t\tName:   paramName,\n\t\t\t\t\tTarget: nil,\n\t\t\t\t}},\n\t\t\t\tMethod: nil,\n\t\t\t}\n\t\t\tmodifiedPathParams = append(modifiedPathParams, newParam)\n\t\t\tif pathParamIndex != -1 {\n\t\t\t\t// the new parameter from the pattern replaces the old path parameter\n\t\t\t\tmodifiedPathParams = append(modifiedPathParams[:pathParamIndex], modifiedPathParams[pathParamIndex+1:]...)\n\t\t\t\tpathParamIndex = -1\n\t\t\t}\n\t\t}\n\t}\n\treturn expandedPathParts, modifiedPathParams\n}\n\nfunc renderServices(services []*descriptor.Service, paths *openapiPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap, msgs []*descriptor.Message, defs openapiDefinitionsObject) error {\n\t// Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array.\n\tsvcBaseIdx := 0\n\tvar lastFile *descriptor.File = nil\n\tfor svcIdx, svc := range services {\n\t\tif svc.File != lastFile {\n\t\t\tlastFile = svc.File\n\t\t\tsvcBaseIdx = svcIdx\n\t\t}\n\n\t\tif !isVisible(getServiceVisibilityOption(svc), reg) {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor methIdx, meth := range svc.Methods {\n\t\t\tif !isVisible(getMethodVisibilityOption(meth), reg) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdeprecated := reg.GetEnableRpcDeprecation() && meth.GetOptions().GetDeprecated()\n\n\t\t\tfor bIdx, b := range meth.Bindings {\n\t\t\t\toperationFunc := operationForMethod(b.HTTPMethod)\n\t\t\t\t// Iterate over all the OpenAPI parameters\n\t\t\t\tparameters := openapiParametersObject{}\n\t\t\t\t// split the path template into its parts\n\t\t\t\tparts := templateToParts(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs)\n\t\t\t\tpathParams := b.PathParams\n\t\t\t\tif reg.GetExpandSlashedPathPatterns() {\n\t\t\t\t\tparts, pathParams = expandPathPatterns(parts, pathParams, reg)\n\t\t\t\t}\n\t\t\t\t// extract any constraints specified in the path placeholders into ECMA regular expressions\n\t\t\t\tpathParamRegexpMap := partsToRegexpMap(parts)\n\t\t\t\t// Keep track of path parameter overrides\n\t\t\t\tpathParamNames := make(map[string]string)\n\t\t\t\tfor _, parameter := range pathParams {\n\n\t\t\t\t\tvar paramType, paramFormat, desc, collectionFormat string\n\t\t\t\t\tvar defaultValue interface{}\n\t\t\t\t\tvar enumNames interface{}\n\t\t\t\t\tvar items *openapiItemsObject\n\t\t\t\t\tvar minItems *int\n\t\t\t\t\tvar extensions []extension\n\t\t\t\t\tswitch pt := parameter.Target.GetType(); pt {\n\t\t\t\t\tcase descriptorpb.FieldDescriptorProto_TYPE_GROUP, descriptorpb.FieldDescriptorProto_TYPE_MESSAGE:\n\t\t\t\t\t\tif descriptor.IsWellKnownType(parameter.Target.GetTypeName()) {\n\t\t\t\t\t\t\tif parameter.IsRepeated() {\n\t\t\t\t\t\t\t\treturn errors.New(\"only primitive and enum types are allowed in repeated path parameters\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tschema := schemaOfField(parameter.Target, reg, customRefs)\n\t\t\t\t\t\t\tparamType = schema.Type\n\t\t\t\t\t\t\tparamFormat = schema.Format\n\t\t\t\t\t\t\tdesc = schema.Description\n\t\t\t\t\t\t\tdefaultValue = schema.Default\n\t\t\t\t\t\t\textensions = schema.extensions\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn errors.New(\"only primitive and well-known types are allowed in path parameters\")\n\t\t\t\t\t\t}\n\t\t\t\t\tcase descriptorpb.FieldDescriptorProto_TYPE_ENUM:\n\t\t\t\t\t\tenum, err := reg.LookupEnum(\"\", parameter.Target.GetTypeName())\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparamType = \"string\"\n\t\t\t\t\t\tparamFormat = \"\"\n\t\t\t\t\t\tenumNames = listEnumNames(reg, enum)\n\t\t\t\t\t\tif reg.GetEnumsAsInts() {\n\t\t\t\t\t\t\tparamType = \"integer\"\n\t\t\t\t\t\t\tparamFormat = \"\"\n\t\t\t\t\t\t\tenumNames = listEnumNumbers(reg, enum)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tschema := schemaOfField(parameter.Target, reg, customRefs)\n\t\t\t\t\t\tdesc = schema.Description\n\t\t\t\t\t\tdefaultValue = schema.Default\n\t\t\t\t\t\textensions = schema.extensions\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar ok bool\n\t\t\t\t\t\tparamType, paramFormat, ok = primitiveSchema(pt)\n\t\t\t\t\t\tif !ok {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"unknown field type %v\", pt)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tschema := schemaOfField(parameter.Target, reg, customRefs)\n\t\t\t\t\t\tdesc = schema.Description\n\t\t\t\t\t\tdefaultValue = schema.Default\n\t\t\t\t\t\textensions = schema.extensions\n\t\t\t\t\t\t// If there is no mandatory format based on the field,\n\t\t\t\t\t\t// allow it to be overridden by the user\n\t\t\t\t\t\tif paramFormat == \"\" {\n\t\t\t\t\t\t\tparamFormat = schema.Format\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif parameter.IsRepeated() {\n\t\t\t\t\t\tcore := schemaCore{Type: paramType, Format: paramFormat}\n\t\t\t\t\t\tif parameter.IsEnum() {\n\t\t\t\t\t\t\tcore.Enum = enumNames\n\t\t\t\t\t\t\tenumNames = nil\n\t\t\t\t\t\t}\n\t\t\t\t\t\titems = (*openapiItemsObject)(&openapiSchemaObject{schemaCore: core})\n\t\t\t\t\t\tparamType = \"array\"\n\t\t\t\t\t\tparamFormat = \"\"\n\t\t\t\t\t\tcollectionFormat = reg.GetRepeatedPathParamSeparatorName()\n\t\t\t\t\t\tminItems = new(int)\n\t\t\t\t\t\t*minItems = 1\n\t\t\t\t\t}\n\n\t\t\t\t\tif desc == \"\" {\n\t\t\t\t\t\tdesc = fieldProtoComments(reg, parameter.Target.Message, parameter.Target)\n\t\t\t\t\t}\n\t\t\t\t\tparameterString := parameter.String()\n\t\t\t\t\tif reg.GetUseJSONNamesForFields() {\n\t\t\t\t\t\tparameterString = lowerCamelCase(parameterString, meth.RequestType.Fields, msgs)\n\t\t\t\t\t}\n\t\t\t\t\tvar pattern string\n\t\t\t\t\tif regExp, ok := pathParamRegexpMap[parameterString]; ok {\n\t\t\t\t\t\tpattern = regExp\n\t\t\t\t\t}\n\t\t\t\t\tfc := getFieldConfiguration(reg, parameter.Target)\n\t\t\t\t\tif fc != nil {\n\t\t\t\t\t\tpathParamName := fc.GetPathParamName()\n\t\t\t\t\t\tif pathParamName != \"\" && pathParamName != parameterString {\n\t\t\t\t\t\t\tpathParamNames[\"{\"+parameterString+\"}\"] = \"{\" + pathParamName + \"}\"\n\t\t\t\t\t\t\tparameterString, _, _ = strings.Cut(pathParamName, \"=\")\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// verify if the parameter is deprecated, either via proto or annotation\n\t\t\t\t\tprotoDeprecated := parameter.Target.GetOptions().GetDeprecated() && reg.GetEnableFieldDeprecation()\n\t\t\t\t\tannotationDeprecated := fc.GetDeprecated()\n\t\t\t\t\tdeprecated := protoDeprecated || annotationDeprecated\n\n\t\t\t\t\tparameters = append(parameters, openapiParameterObject{\n\t\t\t\t\t\tName:        parameterString,\n\t\t\t\t\t\tDescription: desc,\n\t\t\t\t\t\tIn:          \"path\",\n\t\t\t\t\t\tRequired:    true,\n\t\t\t\t\t\tDeprecated:  deprecated,\n\t\t\t\t\t\tDefault:     defaultValue,\n\t\t\t\t\t\t// Parameters in gRPC-Gateway can only be strings?\n\t\t\t\t\t\tType:             paramType,\n\t\t\t\t\t\tFormat:           paramFormat,\n\t\t\t\t\t\tEnum:             enumNames,\n\t\t\t\t\t\tItems:            items,\n\t\t\t\t\t\tCollectionFormat: collectionFormat,\n\t\t\t\t\t\tMinItems:         minItems,\n\t\t\t\t\t\tPattern:          pattern,\n\t\t\t\t\t\textensions:       extensions,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t// Now check if there is a body parameter\n\t\t\t\tif b.Body != nil {\n\t\t\t\t\t// Recursively render fields as definitions as long as they contain path parameters.\n\t\t\t\t\t// Special case for top level body if we don't have a body field.\n\t\t\t\t\tvar schema openapiSchemaObject\n\t\t\t\t\tdesc := \"\"\n\t\t\t\t\tvar bodyFieldName string\n\t\t\t\t\tschema = openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{},\n\t\t\t\t\t}\n\t\t\t\t\tif len(b.Body.FieldPath) == 0 {\n\t\t\t\t\t\t// No field for body, use type.\n\t\t\t\t\t\tbodyFieldName = \"body\"\n\t\t\t\t\t\twknSchemaCore, isWkn := wktSchemas[meth.RequestType.FQMN()]\n\t\t\t\t\t\tif isWkn {\n\t\t\t\t\t\t\tschema.schemaCore = wknSchemaCore\n\t\t\t\t\t\t\t// Special workaround for Empty: it's well-known type but wknSchemas only returns schema.schemaCore; but we need to set schema.Properties which is a level higher.\n\t\t\t\t\t\t\tif meth.RequestType.FQMN() == \".google.protobuf.Empty\" {\n\t\t\t\t\t\t\t\tschema.Properties = &openapiSchemaObjectProperties{}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmessageSchema, err := renderMessageAsDefinition(meth.RequestType, reg, customRefs, b.PathParams)\n\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif len(b.PathParams) == 0 {\n\t\t\t\t\t\t\t\tif err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg); err != nil {\n\t\t\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdesc = messageSchema.Description\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif meth.Name != nil {\n\t\t\t\t\t\t\t\t\tmethFQN, ok := fullyQualifiedNameToOpenAPIName(meth.FQMN(), reg)\n\t\t\t\t\t\t\t\t\tif !ok {\n\t\t\t\t\t\t\t\t\t\tpanic(fmt.Errorf(\"failed to resolve method FQN: '%s'\", meth.FQMN()))\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefName := methFQN + \"Body\"\n\t\t\t\t\t\t\t\t\tschema.Ref = fmt.Sprintf(\"#/definitions/%s\", defName)\n\t\t\t\t\t\t\t\t\tdefs[defName] = messageSchema\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tschema = messageSchema\n\t\t\t\t\t\t\t\t\tif schema.Properties == nil || len(*schema.Properties) == 0 {\n\t\t\t\t\t\t\t\t\t\tgrpclog.Warningf(\"created a body with 0 properties in the message, this might be unintended: %s\", *meth.RequestType)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Body field path is limited to one path component. From google.api.HttpRule.body:\n\t\t\t\t\t\t// \"NOTE: the referred field must be present at the top-level of the request message type.\"\n\t\t\t\t\t\t// Ref: https://github.com/googleapis/googleapis/blob/b3397f5febbf21dfc69b875ddabaf76bee765058/google/api/http.proto#L350-L352\n\t\t\t\t\t\tif len(b.Body.FieldPath) > 1 {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"body of request %q is not a top level field: '%v'\", meth.Service.GetName(), b.Body.FieldPath)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbodyField := b.Body.FieldPath[0]\n\t\t\t\t\t\tif reg.GetUseJSONNamesForFields() {\n\t\t\t\t\t\t\tbodyFieldName = lowerCamelCase(bodyField.Name, meth.RequestType.Fields, msgs)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbodyFieldName = bodyField.Name\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Align pathParams with body field path.\n\t\t\t\t\t\tpathParams := subPathParams(bodyField.Name, b.PathParams)\n\n\t\t\t\t\t\tif len(pathParams) == 0 {\n\t\t\t\t\t\t\t// When there are no path parameters, we only need the base schema of the field.\n\t\t\t\t\t\t\t// https://github.com/grpc-ecosystem/grpc-gateway/issues/3058\n\t\t\t\t\t\t\tschema = schemaOfFieldBase(bodyField.Target, reg, customRefs)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar err error\n\t\t\t\t\t\t\tschema, err = renderFieldAsDefinition(bodyField.Target, reg, customRefs, pathParams)\n\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// renderFieldAsDefinition may add the body field name to the schema's required array\n\t\t\t\t\t\t\t// via updateSwaggerObjectFromFieldBehavior. However, for body parameters, the schema\n\t\t\t\t\t\t\t// represents the field's type, not the containing message. The body field name should\n\t\t\t\t\t\t\t// only be in the schema's required array if it's actually a property of the schema.\n\t\t\t\t\t\t\t// Remove the body field name from required if it's not a property to avoid invalid entries.\n\t\t\t\t\t\t\tif schema.Required != nil && schema.Properties != nil {\n\t\t\t\t\t\t\t\t// Build a set of property names\n\t\t\t\t\t\t\t\tpropertyNames := make(map[string]bool)\n\t\t\t\t\t\t\t\tfor _, prop := range *schema.Properties {\n\t\t\t\t\t\t\t\t\tpropertyNames[prop.Key] = true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Filter required array: keep field names that are either:\n\t\t\t\t\t\t\t\t// 1. Not the body field name, OR\n\t\t\t\t\t\t\t\t// 2. The body field name AND it's actually a property\n\t\t\t\t\t\t\t\tfilteredRequired := make([]string, 0, len(schema.Required))\n\t\t\t\t\t\t\t\tseenBodyFieldName := false\n\t\t\t\t\t\t\t\tfor _, req := range schema.Required {\n\t\t\t\t\t\t\t\t\tif req == bodyFieldName {\n\t\t\t\t\t\t\t\t\t\tif propertyNames[req] {\n\t\t\t\t\t\t\t\t\t\t\t// It's a property, keep it (but only once)\n\t\t\t\t\t\t\t\t\t\t\tif !seenBodyFieldName {\n\t\t\t\t\t\t\t\t\t\t\t\tfilteredRequired = append(filteredRequired, req)\n\t\t\t\t\t\t\t\t\t\t\t\tseenBodyFieldName = true\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// else: It's not a property, skip it\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// Not the body field name, keep it\n\t\t\t\t\t\t\t\t\t\tfilteredRequired = append(filteredRequired, req)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tschema.Required = filteredRequired\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif schema.Title != \"\" {\n\t\t\t\t\t\t\tdesc = mergeDescription(schema)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdesc = fieldProtoComments(reg, bodyField.Target.Message, bodyField.Target)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif meth.GetClientStreaming() {\n\t\t\t\t\t\tdesc += \" (streaming inputs)\"\n\t\t\t\t\t}\n\t\t\t\t\tparameters = append(parameters, openapiParameterObject{\n\t\t\t\t\t\tName:        bodyFieldName,\n\t\t\t\t\t\tDescription: desc,\n\t\t\t\t\t\tIn:          \"body\",\n\t\t\t\t\t\tRequired:    true,\n\t\t\t\t\t\tSchema:      &schema,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// add the parameters to the query string\n\t\t\t\tqueryParams, err := messageToQueryParameters(meth.RequestType, reg, b.PathParams, b.Body, b.HTTPMethod)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tparameters = append(parameters, queryParams...)\n\n\t\t\t\tpath := partsToOpenAPIPath(parts, pathParamNames)\n\n\t\t\t\tpathItemObject, ok := getPathItemObject(*paths, path)\n\n\t\t\t\tif !ok {\n\t\t\t\t\tpathItemObject = openapiPathItemObject{}\n\t\t\t\t} else {\n\t\t\t\t\t// handle case where we have an existing mapping for the same path and method\n\t\t\t\t\texistingOperationObject := operationFunc(&pathItemObject)\n\t\t\t\t\tif existingOperationObject != nil {\n\t\t\t\t\t\tvar firstPathParameter *openapiParameterObject\n\t\t\t\t\t\tvar firstParamIndex int\n\t\t\t\t\t\tfor index, param := range parameters {\n\t\t\t\t\t\t\tparam := param\n\t\t\t\t\t\t\tif param.In == \"path\" {\n\t\t\t\t\t\t\t\tfirstPathParameter = &param\n\t\t\t\t\t\t\t\tfirstParamIndex = index\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif firstPathParameter == nil {\n\t\t\t\t\t\t\t// Without a path parameter, there is nothing to vary to support multiple mappings of the same path/method.\n\t\t\t\t\t\t\t// Previously this did not log an error and only overwrote the mapping, we now log the error but\n\t\t\t\t\t\t\t// still overwrite the mapping\n\t\t\t\t\t\t\tgrpclog.Errorf(\"Duplicate mapping for path %s %s\", b.HTTPMethod, path)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewPathCount := 0\n\t\t\t\t\t\t\tvar newPath string\n\t\t\t\t\t\t\tvar newPathElement string\n\t\t\t\t\t\t\t// Iterate until there is not an existing operation that matches the same escaped path.\n\t\t\t\t\t\t\t// Most of the time this will only be a single iteration, but a large API could technically have\n\t\t\t\t\t\t\t// a pretty large amount of these if it used similar patterns for all its functions.\n\t\t\t\t\t\t\tfor existingOperationObject != nil {\n\t\t\t\t\t\t\t\tnewPathCount += 1\n\t\t\t\t\t\t\t\tnewPathElement = firstPathParameter.Name + pathParamUniqueSuffixDeliminator + strconv.Itoa(newPathCount)\n\t\t\t\t\t\t\t\tnewPath = strings.ReplaceAll(path, \"{\"+firstPathParameter.Name+\"}\", \"{\"+newPathElement+\"}\")\n\n\t\t\t\t\t\t\t\tif newPathItemObject, ok := getPathItemObject(*paths, newPath); ok {\n\t\t\t\t\t\t\t\t\texistingOperationObject = operationFunc(&newPathItemObject)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\texistingOperationObject = nil\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// update the pathItemObject we are adding to with the new path\n\t\t\t\t\t\t\tpathItemObject, _ = getPathItemObject(*paths, newPath)\n\t\t\t\t\t\t\tfirstPathParameter.Name = newPathElement\n\t\t\t\t\t\t\tpath = newPath\n\t\t\t\t\t\t\tparameters[firstParamIndex] = *firstPathParameter\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmethProtoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.ServiceDescriptorProto)(nil)), \"Method\")\n\t\t\t\tdesc := \"A successful response.\"\n\t\t\t\tvar responseSchema openapiSchemaObject\n\n\t\t\t\tif b.ResponseBody == nil || len(b.ResponseBody.FieldPath) == 0 {\n\t\t\t\t\tresponseSchema = openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{},\n\t\t\t\t\t}\n\n\t\t\t\t\t// Don't link to a full definition for\n\t\t\t\t\t// empty; it's overly verbose.\n\t\t\t\t\t// schema.Properties{} renders it as\n\t\t\t\t\t// well, without a definition\n\t\t\t\t\twknSchemaCore, isWkn := wktSchemas[meth.ResponseType.FQMN()]\n\t\t\t\t\tif !isWkn {\n\t\t\t\t\t\tif err := responseSchema.setRefFromFQN(meth.ResponseType.FQMN(), reg); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresponseSchema.schemaCore = wknSchemaCore\n\n\t\t\t\t\t\t// Special workaround for Empty: it's well-known type but wknSchemas only returns schema.schemaCore; but we need to set schema.Properties which is a level higher.\n\t\t\t\t\t\tif meth.ResponseType.FQMN() == \".google.protobuf.Empty\" {\n\t\t\t\t\t\t\tresponseSchema.Properties = &openapiSchemaObjectProperties{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// This is resolving the value of response_body in the google.api.HttpRule\n\t\t\t\t\tlastField := b.ResponseBody.FieldPath[len(b.ResponseBody.FieldPath)-1]\n\t\t\t\t\tresponseSchema = schemaOfField(lastField.Target, reg, customRefs)\n\t\t\t\t\tif responseSchema.Description != \"\" {\n\t\t\t\t\t\tdesc = responseSchema.Description\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdesc = fieldProtoComments(reg, lastField.Target.Message, lastField.Target)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif meth.GetServerStreaming() {\n\t\t\t\t\tdesc += \"(streaming responses)\"\n\t\t\t\t\tresponseSchema.Type = \"object\"\n\t\t\t\t\tswgRef, _ := fullyQualifiedNameToOpenAPIName(meth.ResponseType.FQMN(), reg)\n\t\t\t\t\tresponseSchema.Title = \"Stream result of \" + swgRef\n\n\t\t\t\t\tprops := openapiSchemaObjectProperties{\n\t\t\t\t\t\tkeyVal{\n\t\t\t\t\t\t\tKey: \"result\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tRef: responseSchema.Ref,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tif !reg.GetDisableDefaultErrors() {\n\t\t\t\t\t\tstatusDef, hasStatus := fullyQualifiedNameToOpenAPIName(\".google.rpc.Status\", reg)\n\t\t\t\t\t\tif hasStatus {\n\t\t\t\t\t\t\tprops = append(props, keyVal{\n\t\t\t\t\t\t\t\tKey: \"error\",\n\t\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\t\tRef: fmt.Sprintf(\"#/definitions/%s\", statusDef),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Special case HttpBody responses, they will be unformatted bytes\n\t\t\t\t\tif meth.ResponseType.FQMN() == \".google.api.HttpBody\" {\n\t\t\t\t\t\tresponseSchema.Type = \"string\"\n\t\t\t\t\t\tresponseSchema.Format = \"binary\"\n\t\t\t\t\t\tresponseSchema.Title = \"Free form byte stream\"\n\t\t\t\t\t\t// The error response is still JSON, but technically the full response\n\t\t\t\t\t\t// is still unformatted, so don't include the error response structure.\n\t\t\t\t\t\tprops = nil\n\t\t\t\t\t}\n\n\t\t\t\t\tresponseSchema.Properties = &props\n\t\t\t\t\tresponseSchema.Ref = \"\"\n\t\t\t\t}\n\n\t\t\t\toperationObject := &openapiOperationObject{\n\t\t\t\t\tParameters: parameters,\n\t\t\t\t\tResponses:  openapiResponsesObject{},\n\t\t\t\t\tDeprecated: deprecated,\n\t\t\t\t}\n\n\t\t\t\tif !reg.GetDisableDefaultResponses() {\n\t\t\t\t\toperationObject.Responses[\"200\"] = openapiResponseObject{\n\t\t\t\t\t\tDescription: desc,\n\t\t\t\t\t\tSchema:      responseSchema,\n\t\t\t\t\t\tHeaders:     openapiHeadersObject{},\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif !reg.GetDisableServiceTags() {\n\t\t\t\t\ttag := svc.GetName()\n\t\t\t\t\tif pkg := svc.File.GetPackage(); pkg != \"\" && reg.IsIncludePackageInTags() {\n\t\t\t\t\t\ttag = pkg + \".\" + tag\n\t\t\t\t\t}\n\t\t\t\t\toperationObject.Tags = []string{tag}\n\t\t\t\t}\n\n\t\t\t\tif !reg.GetDisableDefaultErrors() {\n\t\t\t\t\terrDef, hasErrDef := fullyQualifiedNameToOpenAPIName(\".google.rpc.Status\", reg)\n\t\t\t\t\tif hasErrDef {\n\t\t\t\t\t\t// https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object\n\t\t\t\t\t\toperationObject.Responses[\"default\"] = openapiResponseObject{\n\t\t\t\t\t\t\tDescription: \"An unexpected error response.\",\n\t\t\t\t\t\t\tSchema: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tRef: fmt.Sprintf(\"#/definitions/%s\", errDef),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\toperationObject.OperationID = fmt.Sprintf(\"%s_%s\", svc.GetName(), meth.GetName())\n\t\t\t\tif reg.GetSimpleOperationIDs() {\n\t\t\t\t\toperationObject.OperationID = meth.GetName()\n\t\t\t\t}\n\t\t\t\tif bIdx != 0 {\n\t\t\t\t\t// OperationID must be unique in an OpenAPI v2 definition.\n\t\t\t\t\toperationObject.OperationID += strconv.Itoa(bIdx + 1)\n\t\t\t\t}\n\n\t\t\t\t// Fill reference map with referenced request messages\n\t\t\t\tfor _, param := range operationObject.Parameters {\n\t\t\t\t\tif param.Schema != nil && param.Schema.Ref != \"\" {\n\t\t\t\t\t\trequestResponseRefs[param.Schema.Ref] = struct{}{}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmethComments := protoComments(reg, svc.File, nil, \"Service\", int32(svcIdx-svcBaseIdx), methProtoPath, int32(methIdx))\n\t\t\t\tif err := updateOpenAPIDataFromComments(reg, operationObject, meth, methComments, false); err != nil {\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\n\t\t\t\tsvcOpts, err := getServiceOpenAPIOption(reg, svc)\n\t\t\t\tif err != nil {\n\t\t\t\t\tgrpclog.Error(err)\n\t\t\t\t\treturn err\n\t\t\t\t}\n\n\t\t\t\t// Set Tag with the user-defined service name\n\t\t\t\tif svcOpts.GetName() != \"\" {\n\t\t\t\t\toperationObject.Tags = []string{svcOpts.GetName()}\n\t\t\t\t}\n\n\t\t\t\topts, err := getMethodOpenAPIOption(reg, meth)\n\t\t\t\tif opts != nil {\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tpanic(err)\n\t\t\t\t\t}\n\t\t\t\t\toperationObject.ExternalDocs = protoExternalDocumentationToOpenAPIExternalDocumentation(opts.ExternalDocs, reg, meth)\n\n\t\t\t\t\tif opts.Deprecated {\n\t\t\t\t\t\toperationObject.Deprecated = true\n\t\t\t\t\t}\n\n\t\t\t\t\tif opts.Summary != \"\" {\n\t\t\t\t\t\toperationObject.Summary = opts.Summary\n\t\t\t\t\t}\n\t\t\t\t\tif opts.Description != \"\" {\n\t\t\t\t\t\toperationObject.Description = opts.Description\n\t\t\t\t\t}\n\t\t\t\t\tif len(opts.Tags) > 0 {\n\t\t\t\t\t\toperationObject.Tags = make([]string, len(opts.Tags))\n\t\t\t\t\t\tcopy(operationObject.Tags, opts.Tags)\n\t\t\t\t\t}\n\t\t\t\t\tif opts.OperationId != \"\" {\n\t\t\t\t\t\toperationObject.OperationID = opts.OperationId\n\t\t\t\t\t}\n\t\t\t\t\tif opts.Security != nil {\n\t\t\t\t\t\tnewSecurity := []openapiSecurityRequirementObject{}\n\t\t\t\t\t\tif operationObject.Security != nil {\n\t\t\t\t\t\t\tnewSecurity = *operationObject.Security\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor _, secReq := range opts.Security {\n\t\t\t\t\t\t\tnewSecReq := openapiSecurityRequirementObject{}\n\t\t\t\t\t\t\tfor secReqKey, secReqValue := range secReq.SecurityRequirement {\n\t\t\t\t\t\t\t\tif secReqValue == nil {\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tnewSecReqValue := make([]string, len(secReqValue.Scope))\n\t\t\t\t\t\t\t\tcopy(newSecReqValue, secReqValue.Scope)\n\t\t\t\t\t\t\t\tnewSecReq[secReqKey] = newSecReqValue\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif len(newSecReq) > 0 {\n\t\t\t\t\t\t\t\tnewSecurity = append(newSecurity, newSecReq)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\toperationObject.Security = &newSecurity\n\t\t\t\t\t}\n\t\t\t\t\tif opts.Responses != nil {\n\t\t\t\t\t\tfor name, resp := range opts.Responses {\n\t\t\t\t\t\t\t// Merge response data into default response if available.\n\t\t\t\t\t\t\trespObj := operationObject.Responses[name]\n\t\t\t\t\t\t\tif resp.Description != \"\" {\n\t\t\t\t\t\t\t\trespObj.Description = resp.Description\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif resp.Schema != nil {\n\t\t\t\t\t\t\t\trespObj.Schema = openapiSchemaFromProtoSchema(resp.Schema, reg, customRefs, meth)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif resp.Examples != nil {\n\t\t\t\t\t\t\t\trespObj.Examples = openapiExamplesFromProtoExamples(resp.Examples)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif resp.Headers != nil {\n\t\t\t\t\t\t\t\thdrs, err := processHeaders(resp.Headers)\n\t\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\trespObj.Headers = hdrs\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif resp.Extensions != nil {\n\t\t\t\t\t\t\t\texts, err := processExtensions(resp.Extensions)\n\t\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\trespObj.extensions = exts\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toperationObject.Responses[name] = respObj\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif opts.Extensions != nil {\n\t\t\t\t\t\texts, err := processExtensions(opts.Extensions)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\toperationObject.extensions = exts\n\t\t\t\t\t}\n\n\t\t\t\t\tif len(opts.Consumes) > 0 {\n\t\t\t\t\t\toperationObject.Consumes = make([]string, len(opts.Consumes))\n\t\t\t\t\t\tcopy(operationObject.Consumes, opts.Consumes)\n\t\t\t\t\t}\n\n\t\t\t\t\tif len(opts.Produces) > 0 {\n\t\t\t\t\t\toperationObject.Produces = make([]string, len(opts.Produces))\n\t\t\t\t\t\tcopy(operationObject.Produces, opts.Produces)\n\t\t\t\t\t}\n\n\t\t\t\t\tif params := opts.Parameters; params != nil && len(params.Headers) > 0 {\n\t\t\t\t\t\tfor _, header := range params.Headers {\n\t\t\t\t\t\t\tparam := openapiParameterObject{\n\t\t\t\t\t\t\t\tIn:          \"header\",\n\t\t\t\t\t\t\t\tName:        header.Name,\n\t\t\t\t\t\t\t\tDescription: header.Description,\n\t\t\t\t\t\t\t\tRequired:    header.Required,\n\t\t\t\t\t\t\t\tFormat:      header.Format,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tswitch header.Type {\n\t\t\t\t\t\t\tcase openapi_options.HeaderParameter_STRING:\n\t\t\t\t\t\t\t\tparam.Type = \"string\"\n\t\t\t\t\t\t\tcase openapi_options.HeaderParameter_NUMBER:\n\t\t\t\t\t\t\t\tparam.Type = \"number\"\n\t\t\t\t\t\t\tcase openapi_options.HeaderParameter_INTEGER:\n\t\t\t\t\t\t\t\tparam.Type = \"integer\"\n\t\t\t\t\t\t\tcase openapi_options.HeaderParameter_BOOLEAN:\n\t\t\t\t\t\t\t\tparam.Type = \"boolean\"\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn fmt.Errorf(\"invalid header parameter type: %+v\", header.Type)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\toperationObject.Parameters = append(operationObject.Parameters, param)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// TODO(ivucica): add remaining fields of operation object\n\t\t\t\t}\n\n\t\t\t\tswitch b.HTTPMethod {\n\t\t\t\tcase \"DELETE\":\n\t\t\t\t\tpathItemObject.Delete = operationObject\n\t\t\t\tcase \"GET\":\n\t\t\t\t\tpathItemObject.Get = operationObject\n\t\t\t\tcase \"POST\":\n\t\t\t\t\tpathItemObject.Post = operationObject\n\t\t\t\tcase \"PUT\":\n\t\t\t\t\tpathItemObject.Put = operationObject\n\t\t\t\tcase \"PATCH\":\n\t\t\t\t\tpathItemObject.Patch = operationObject\n\t\t\t\tcase \"HEAD\":\n\t\t\t\t\tpathItemObject.Head = operationObject\n\t\t\t\tcase \"OPTIONS\":\n\t\t\t\t\tpathItemObject.Options = operationObject\n\t\t\t\t}\n\n\t\t\t\tupdatePaths(paths, path, pathItemObject)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Success! return nil on the error object\n\treturn nil\n}\n\n// Returns the openapiPathItemObject associated with a path. If path is not present, returns\n// empty openapiPathItemObject and false.\nfunc getPathItemObject(paths openapiPathsObject, path string) (openapiPathItemObject, bool) {\n\tfor _, pathData := range paths {\n\t\tif pathData.Path == path {\n\t\t\treturn pathData.PathItemObject, true\n\t\t}\n\t}\n\n\treturn openapiPathItemObject{}, false\n}\n\n// If a path already exists in openapiPathsObject, updates that path's openapiPathItemObject. If not,\n// appends a new path and openapiPathItemObject to the openapiPathsObject.\nfunc updatePaths(paths *openapiPathsObject, path string, pathItemObject openapiPathItemObject) {\n\tfor i, p := range *paths {\n\t\tif p.Path == path {\n\t\t\t(*paths)[i].PathItemObject = pathItemObject\n\t\t\treturn\n\t\t}\n\t}\n\t*paths = append(*paths, pathData{\n\t\tPath:           path,\n\t\tPathItemObject: pathItemObject,\n\t})\n}\n\nfunc mergeDescription(schema openapiSchemaObject) string {\n\tdesc := schema.Description\n\tif schema.Title != \"\" { // join title because title of parameter object will be ignored\n\t\tdesc = strings.TrimSpace(schema.Title + paragraphDeliminator + schema.Description)\n\t}\n\treturn desc\n}\n\nfunc operationForMethod(httpMethod string) func(*openapiPathItemObject) *openapiOperationObject {\n\tswitch httpMethod {\n\tcase \"GET\":\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Get }\n\tcase \"POST\":\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Post }\n\tcase \"PUT\":\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Put }\n\tcase \"DELETE\":\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Delete }\n\tcase \"PATCH\":\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Patch }\n\tcase \"HEAD\":\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Head }\n\tcase \"OPTIONS\":\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Options }\n\tdefault:\n\t\treturn func(obj *openapiPathItemObject) *openapiOperationObject { return nil }\n\t}\n}\n\n// This function is called with a param which contains the entire definition of a method.\nfunc applyTemplate(p param) (*openapiSwaggerObject, error) {\n\t// Create the basic template object. This is the object that everything is\n\t// defined off of.\n\ts := openapiSwaggerObject{\n\t\t// OpenAPI 2.0 is the version of this document\n\t\tSwagger:     \"2.0\",\n\t\tConsumes:    []string{\"application/json\"},\n\t\tProduces:    []string{\"application/json\"},\n\t\tPaths:       openapiPathsObject{},\n\t\tDefinitions: make(openapiDefinitionsObject),\n\t\tInfo: openapiInfoObject{\n\t\t\tTitle:   *p.File.Name,\n\t\t\tVersion: \"version not set\",\n\t\t},\n\t}\n\n\t// IMPORTANT: Initialize the naming cache BEFORE any code that uses fullyQualifiedNameToOpenAPIName.\n\t// This ensures consistent naming between renderServices (which generates $refs) and\n\t// renderMessagesAsDefinition (which generates definitions).\n\t//\n\t// Pre-scan to collect referenced names WITHOUT using the naming cache.\n\t// This allows us to build the cache with the correct filtered names upfront.\n\treferencedNames := collectReferencedNamesForCache(p.Services, p.Messages, p.reg)\n\n\t// Get all names from the registry\n\tallFQMNs := p.reg.GetAllFQMNs()\n\tallFQENs := p.reg.GetAllFQENs()\n\tallFQMethNs := p.reg.GetAllFQMethNs()\n\tallNames := append(append(allFQMNs, allFQENs...), allFQMethNs...)\n\n\t// Filter: EXCLUDE names that are from a DIFFERENT package AND are NOT referenced\n\t// This way we keep all names from the current package, and all referenced names from other packages\n\tcurrentPackage := p.File.GetPackage()\n\tfilteredNames := make([]string, 0, len(allNames))\n\tfor _, name := range allNames {\n\t\ttrimmedName := strings.TrimPrefix(name, \".\")\n\t\tif trimmedName == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\t// Include if: (1) from current package, OR (2) actually referenced, OR (3) from google.*/grpc.* packages\n\t\tisCurrentPackage := strings.HasPrefix(trimmedName, currentPackage+\".\")\n\t\tisGoogle := strings.HasPrefix(trimmedName, \"google.\")\n\t\tisGRPC := strings.HasPrefix(trimmedName, \"grpc.\")\n\t\tif isCurrentPackage || referencedNames[name] || isGoogle || isGRPC {\n\t\t\tfilteredNames = append(filteredNames, name)\n\t\t}\n\t}\n\n\t// Initialize the naming cache BEFORE renderServices so all lookups use consistent naming\n\tregistriesSeenMutex.Lock()\n\tresolvedNames := resolveFullyQualifiedNameToOpenAPINames(filteredNames, p.reg.GetOpenAPINamingStrategy())\n\tregistriesSeen[p.reg] = resolvedNames\n\tregistriesSeenMutex.Unlock()\n\n\t// Loops through all the services and their exposed GET/POST/PUT/DELETE definitions\n\t// and create entries for all of them.\n\t// Also adds custom user specified references to second map.\n\t// NOTE: This now uses the naming cache initialized above.\n\trequestResponseRefs, customRefs := refMap{}, refMap{}\n\tif err := renderServices(p.Services, &s.Paths, p.reg, requestResponseRefs, customRefs, p.Messages, s.Definitions); err != nil {\n\t\tpanic(err)\n\t}\n\n\tmessages := messageMap{}\n\tstreamingMessages := messageMap{}\n\tenums := enumMap{}\n\n\tif !p.reg.GetDisableDefaultErrors() {\n\t\t// Add the error type to the message map\n\t\truntimeError, swgRef, err := lookupMsgAndOpenAPIName(\"google.rpc\", \"Status\", p.reg)\n\t\tif err == nil {\n\t\t\tmessages[swgRef] = runtimeError\n\t\t} else {\n\t\t\t// just in case there is an error looking up runtimeError\n\t\t\tgrpclog.Error(err)\n\t\t}\n\t}\n\n\t// Find all the service's messages and enumerations that are defined (recursively)\n\t// and write request, response and other custom (but referenced) types out as definition objects.\n\t// NOTE: This uses the same naming cache that was used by renderServices above.\n\tfindServicesMessagesAndEnumerations(p.Services, p.reg, messages, streamingMessages, enums, requestResponseRefs)\n\n\tif err := renderMessagesAsDefinition(messages, s.Definitions, p.reg, customRefs, nil); err != nil {\n\t\treturn nil, err\n\t}\n\trenderEnumerationsAsDefinition(enums, s.Definitions, p.reg, requestResponseRefs)\n\n\t// File itself might have some comments and metadata.\n\tpackageProtoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), \"Package\")\n\tpackageComments := protoComments(p.reg, p.File, nil, \"Package\", packageProtoPath)\n\tif err := updateOpenAPIDataFromComments(p.reg, &s, p, packageComments, true); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// There may be additional options in the OpenAPI option in the proto.\n\tspb, err := getFileOpenAPIOption(p.reg, p.File)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif spb != nil {\n\t\tif spb.Swagger != \"\" {\n\t\t\ts.Swagger = spb.Swagger\n\t\t}\n\t\tif spb.Info != nil {\n\t\t\tif spb.Info.Title != \"\" {\n\t\t\t\ts.Info.Title = spb.Info.Title\n\t\t\t}\n\t\t\tif spb.Info.Description != \"\" {\n\t\t\t\ts.Info.Description = spb.Info.Description\n\t\t\t}\n\t\t\tif spb.Info.TermsOfService != \"\" {\n\t\t\t\ts.Info.TermsOfService = spb.Info.TermsOfService\n\t\t\t}\n\t\t\tif spb.Info.Version != \"\" {\n\t\t\t\ts.Info.Version = spb.Info.Version\n\t\t\t}\n\t\t\tif spb.Info.Contact != nil {\n\t\t\t\tif s.Info.Contact == nil {\n\t\t\t\t\ts.Info.Contact = &openapiContactObject{}\n\t\t\t\t}\n\t\t\t\tif spb.Info.Contact.Name != \"\" {\n\t\t\t\t\ts.Info.Contact.Name = spb.Info.Contact.Name\n\t\t\t\t}\n\t\t\t\tif spb.Info.Contact.Url != \"\" {\n\t\t\t\t\ts.Info.Contact.URL = spb.Info.Contact.Url\n\t\t\t\t}\n\t\t\t\tif spb.Info.Contact.Email != \"\" {\n\t\t\t\t\ts.Info.Contact.Email = spb.Info.Contact.Email\n\t\t\t\t}\n\t\t\t}\n\t\t\tif spb.Info.License != nil {\n\t\t\t\tif s.Info.License == nil {\n\t\t\t\t\ts.Info.License = &openapiLicenseObject{}\n\t\t\t\t}\n\t\t\t\tif spb.Info.License.Name != \"\" {\n\t\t\t\t\ts.Info.License.Name = spb.Info.License.Name\n\t\t\t\t}\n\t\t\t\tif spb.Info.License.Url != \"\" {\n\t\t\t\t\ts.Info.License.URL = spb.Info.License.Url\n\t\t\t\t}\n\t\t\t}\n\t\t\tif spb.Info.Extensions != nil {\n\t\t\t\texts, err := processExtensions(spb.Info.Extensions)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\ts.Info.extensions = exts\n\t\t\t}\n\t\t}\n\t\tif spb.Host != \"\" {\n\t\t\ts.Host = spb.Host\n\t\t}\n\t\tif spb.BasePath != \"\" {\n\t\t\ts.BasePath = spb.BasePath\n\t\t}\n\t\tif len(spb.Schemes) > 0 {\n\t\t\ts.Schemes = make([]string, len(spb.Schemes))\n\t\t\tfor i, scheme := range spb.Schemes {\n\t\t\t\ts.Schemes[i] = strings.ToLower(scheme.String())\n\t\t\t}\n\t\t}\n\t\tif len(spb.Consumes) > 0 {\n\t\t\ts.Consumes = make([]string, len(spb.Consumes))\n\t\t\tcopy(s.Consumes, spb.Consumes)\n\t\t}\n\t\tif len(spb.Produces) > 0 {\n\t\t\ts.Produces = make([]string, len(spb.Produces))\n\t\t\tcopy(s.Produces, spb.Produces)\n\t\t}\n\t\tif spb.SecurityDefinitions != nil && spb.SecurityDefinitions.Security != nil {\n\t\t\tif s.SecurityDefinitions == nil {\n\t\t\t\ts.SecurityDefinitions = openapiSecurityDefinitionsObject{}\n\t\t\t}\n\t\t\tfor secDefKey, secDefValue := range spb.SecurityDefinitions.Security {\n\t\t\t\tvar newSecDefValue openapiSecuritySchemeObject\n\t\t\t\tif oldSecDefValue, ok := s.SecurityDefinitions[secDefKey]; !ok {\n\t\t\t\t\tnewSecDefValue = openapiSecuritySchemeObject{}\n\t\t\t\t} else {\n\t\t\t\t\tnewSecDefValue = oldSecDefValue\n\t\t\t\t}\n\t\t\t\tif secDefValue.Type != openapi_options.SecurityScheme_TYPE_INVALID {\n\t\t\t\t\tswitch secDefValue.Type {\n\t\t\t\t\tcase openapi_options.SecurityScheme_TYPE_BASIC:\n\t\t\t\t\t\tnewSecDefValue.Type = \"basic\"\n\t\t\t\t\tcase openapi_options.SecurityScheme_TYPE_API_KEY:\n\t\t\t\t\t\tnewSecDefValue.Type = \"apiKey\"\n\t\t\t\t\tcase openapi_options.SecurityScheme_TYPE_OAUTH2:\n\t\t\t\t\t\tnewSecDefValue.Type = \"oauth2\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif secDefValue.Description != \"\" {\n\t\t\t\t\tnewSecDefValue.Description = secDefValue.Description\n\t\t\t\t}\n\t\t\t\tif secDefValue.Name != \"\" {\n\t\t\t\t\tnewSecDefValue.Name = secDefValue.Name\n\t\t\t\t}\n\t\t\t\tif secDefValue.In != openapi_options.SecurityScheme_IN_INVALID {\n\t\t\t\t\tswitch secDefValue.In {\n\t\t\t\t\tcase openapi_options.SecurityScheme_IN_QUERY:\n\t\t\t\t\t\tnewSecDefValue.In = \"query\"\n\t\t\t\t\tcase openapi_options.SecurityScheme_IN_HEADER:\n\t\t\t\t\t\tnewSecDefValue.In = \"header\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif secDefValue.Flow != openapi_options.SecurityScheme_FLOW_INVALID {\n\t\t\t\t\tswitch secDefValue.Flow {\n\t\t\t\t\tcase openapi_options.SecurityScheme_FLOW_IMPLICIT:\n\t\t\t\t\t\tnewSecDefValue.Flow = \"implicit\"\n\t\t\t\t\tcase openapi_options.SecurityScheme_FLOW_PASSWORD:\n\t\t\t\t\t\tnewSecDefValue.Flow = \"password\"\n\t\t\t\t\tcase openapi_options.SecurityScheme_FLOW_APPLICATION:\n\t\t\t\t\t\tnewSecDefValue.Flow = \"application\"\n\t\t\t\t\tcase openapi_options.SecurityScheme_FLOW_ACCESS_CODE:\n\t\t\t\t\t\tnewSecDefValue.Flow = \"accessCode\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif secDefValue.AuthorizationUrl != \"\" {\n\t\t\t\t\tnewSecDefValue.AuthorizationURL = secDefValue.AuthorizationUrl\n\t\t\t\t}\n\t\t\t\tif secDefValue.TokenUrl != \"\" {\n\t\t\t\t\tnewSecDefValue.TokenURL = secDefValue.TokenUrl\n\t\t\t\t}\n\t\t\t\tif secDefValue.Scopes != nil {\n\t\t\t\t\tif newSecDefValue.Scopes == nil {\n\t\t\t\t\t\tnewSecDefValue.Scopes = openapiScopesObject{}\n\t\t\t\t\t}\n\t\t\t\t\tfor scopeKey, scopeDesc := range secDefValue.Scopes.Scope {\n\t\t\t\t\t\tnewSecDefValue.Scopes[scopeKey] = scopeDesc\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif secDefValue.Extensions != nil {\n\t\t\t\t\texts, err := processExtensions(secDefValue.Extensions)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\tnewSecDefValue.extensions = exts\n\t\t\t\t}\n\t\t\t\ts.SecurityDefinitions[secDefKey] = newSecDefValue\n\t\t\t}\n\t\t}\n\t\tif spb.Security != nil {\n\t\t\tvar newSecurity []openapiSecurityRequirementObject\n\t\t\tif s.Security != nil {\n\t\t\t\tnewSecurity = s.Security\n\t\t\t}\n\t\t\tfor _, secReq := range spb.Security {\n\t\t\t\tnewSecReq := openapiSecurityRequirementObject{}\n\t\t\t\tfor secReqKey, secReqValue := range secReq.SecurityRequirement {\n\t\t\t\t\tif secReqValue == nil {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"malformed security requirement spec for key %q; value is required\", secReqKey)\n\t\t\t\t\t}\n\t\t\t\t\tnewSecReqValue := make([]string, len(secReqValue.Scope))\n\t\t\t\t\tcopy(newSecReqValue, secReqValue.Scope)\n\t\t\t\t\tnewSecReq[secReqKey] = newSecReqValue\n\t\t\t\t}\n\t\t\t\tnewSecurity = append(newSecurity, newSecReq)\n\t\t\t}\n\t\t\ts.Security = newSecurity\n\t\t}\n\t\ts.ExternalDocs = protoExternalDocumentationToOpenAPIExternalDocumentation(spb.ExternalDocs, p.reg, spb)\n\t\t// Populate all Paths with Responses set at top level,\n\t\t// preferring Responses already set over those at the top level.\n\t\tif spb.Responses != nil {\n\t\t\tfor _, verbs := range s.Paths {\n\t\t\t\tvar maps []openapiResponsesObject\n\t\t\t\tif verbs.PathItemObject.Delete != nil {\n\t\t\t\t\tmaps = append(maps, verbs.PathItemObject.Delete.Responses)\n\t\t\t\t}\n\t\t\t\tif verbs.PathItemObject.Get != nil {\n\t\t\t\t\tmaps = append(maps, verbs.PathItemObject.Get.Responses)\n\t\t\t\t}\n\t\t\t\tif verbs.PathItemObject.Post != nil {\n\t\t\t\t\tmaps = append(maps, verbs.PathItemObject.Post.Responses)\n\t\t\t\t}\n\t\t\t\tif verbs.PathItemObject.Put != nil {\n\t\t\t\t\tmaps = append(maps, verbs.PathItemObject.Put.Responses)\n\t\t\t\t}\n\t\t\t\tif verbs.PathItemObject.Patch != nil {\n\t\t\t\t\tmaps = append(maps, verbs.PathItemObject.Patch.Responses)\n\t\t\t\t}\n\n\t\t\t\tfor k, v := range spb.Responses {\n\t\t\t\t\tfor _, respMap := range maps {\n\t\t\t\t\t\tif _, ok := respMap[k]; ok {\n\t\t\t\t\t\t\t// Don't overwrite already existing Responses\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\trespMap[k] = openapiResponseObject{\n\t\t\t\t\t\t\tDescription: v.Description,\n\t\t\t\t\t\t\tSchema:      openapiSchemaFromProtoSchema(v.Schema, p.reg, customRefs, nil),\n\t\t\t\t\t\t\tExamples:    openapiExamplesFromProtoExamples(v.Examples),\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif spb.Extensions != nil {\n\t\t\texts, err := processExtensions(spb.Extensions)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ts.extensions = exts\n\t\t}\n\n\t\tif spb.Tags != nil {\n\t\t\tfor _, v := range spb.Tags {\n\t\t\t\tnewTag := openapiTagObject{}\n\t\t\t\tnewTag.Name = v.Name\n\t\t\t\tnewTag.Description = v.Description\n\t\t\t\tif p.reg.GetUseGoTemplate() {\n\t\t\t\t\tnewTag.Description = goTemplateComments(newTag.Description, nil, p.reg)\n\t\t\t\t}\n\t\t\t\tif v.ExternalDocs != nil {\n\t\t\t\t\tnewTag.ExternalDocs = &openapiExternalDocumentationObject{\n\t\t\t\t\t\tDescription: v.ExternalDocs.Description,\n\t\t\t\t\t\tURL:         v.ExternalDocs.Url,\n\t\t\t\t\t}\n\t\t\t\t\tif p.reg.GetUseGoTemplate() {\n\t\t\t\t\t\tnewTag.ExternalDocs.Description = goTemplateComments(v.ExternalDocs.Description, nil, p.reg)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif v.Extensions != nil {\n\t\t\t\t\texts, err := processExtensions(v.Extensions)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\tnewTag.extensions = exts\n\t\t\t\t}\n\t\t\t\ts.Tags = append(s.Tags, newTag)\n\t\t\t}\n\t\t}\n\n\t\t// Additional fields on the OpenAPI v2 spec's \"OpenAPI\" object\n\t\t// should be added here, once supported in the proto.\n\t}\n\n\tif !p.reg.GetDisableServiceTags() {\n\t\ts.Tags = mergeTags(s.Tags, renderServiceTags(p.Services, p.reg))\n\t}\n\n\t// Finally add any references added by users that aren't\n\t// otherwise rendered.\n\tif err := addCustomRefs(s.Definitions, p.reg, customRefs); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &s, nil\n}\n\nfunc mergeTags(existingTags []openapiTagObject, tags []openapiTagObject) []openapiTagObject {\n\tfor _, tag := range tags {\n\t\tmatched := false\n\t\tfor i, existingTag := range existingTags {\n\t\t\tif existingTag.Name == tag.Name {\n\t\t\t\tif existingTag.Description == \"\" {\n\t\t\t\t\texistingTags[i].Description = tag.Description\n\t\t\t\t}\n\t\t\t\tif existingTag.ExternalDocs == nil {\n\t\t\t\t\texistingTags[i].ExternalDocs = tag.ExternalDocs\n\t\t\t\t} else if tag.ExternalDocs != nil {\n\t\t\t\t\tif existingTag.ExternalDocs.Description == \"\" {\n\t\t\t\t\t\texistingTags[i].ExternalDocs.Description = tag.ExternalDocs.Description\n\t\t\t\t\t}\n\t\t\t\t\tif existingTag.ExternalDocs.URL == \"\" {\n\t\t\t\t\t\texistingTags[i].ExternalDocs.URL = tag.ExternalDocs.URL\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif existingTag.extensions == nil {\n\t\t\t\t\texistingTags[i].extensions = tag.extensions\n\t\t\t\t} else if tag.extensions != nil {\n\t\t\t\t\tfor _, ext := range tag.extensions {\n\t\t\t\t\t\tmatchedExt := false\n\t\t\t\t\t\tfor _, existingExt := range existingTag.extensions {\n\t\t\t\t\t\t\tif existingExt.key == ext.key {\n\t\t\t\t\t\t\t\tmatchedExt = true\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif !matchedExt {\n\t\t\t\t\t\t\texistingTags[i].extensions = append(existingTags[i].extensions, ext)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmatched = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !matched {\n\t\t\texistingTags = append(existingTags, tag)\n\t\t}\n\t}\n\treturn existingTags\n}\n\nfunc processExtensions(inputExts map[string]*structpb.Value) ([]extension, error) {\n\texts := make([]extension, 0, len(inputExts))\n\tfor k, v := range inputExts {\n\t\tif !strings.HasPrefix(k, \"x-\") {\n\t\t\treturn nil, fmt.Errorf(\"extension keys need to start with \\\"x-\\\": %q\", k)\n\t\t}\n\t\text, err := (&protojson.MarshalOptions{Indent: \"  \"}).Marshal(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\texts = append(exts, extension{key: k, value: ext})\n\t}\n\tsort.Slice(exts, func(i, j int) bool { return exts[i].key < exts[j].key })\n\treturn exts, nil\n}\n\nfunc validateHeaderTypeAndFormat(headerType, format string) error {\n\t// The type of the object. The value MUST be one of \"string\", \"number\", \"integer\", \"boolean\", or \"array\"\n\t// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject\n\t// Note: currently not implementing array as we are only implementing this in the operation response context\n\tswitch headerType {\n\t// the format property is an open string-valued property, and can have any value to support documentation needs\n\t// primary check for format is to ensure that the number/integer formats are extensions of the specified type\n\t// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#dataTypeFormat\n\tcase \"string\":\n\t\treturn nil\n\tcase \"number\":\n\t\tswitch format {\n\t\tcase \"uint\",\n\t\t\t\"uint8\",\n\t\t\t\"uint16\",\n\t\t\t\"uint32\",\n\t\t\t\"uint64\",\n\t\t\t\"int\",\n\t\t\t\"int8\",\n\t\t\t\"int16\",\n\t\t\t\"int32\",\n\t\t\t\"int64\",\n\t\t\t\"float\",\n\t\t\t\"float32\",\n\t\t\t\"float64\",\n\t\t\t\"complex64\",\n\t\t\t\"complex128\",\n\t\t\t\"double\",\n\t\t\t\"byte\",\n\t\t\t\"rune\",\n\t\t\t\"uintptr\",\n\t\t\t\"\":\n\t\t\treturn nil\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"the provided format %q is not a valid extension of the type %q\", format, headerType)\n\t\t}\n\tcase \"integer\":\n\t\tswitch format {\n\t\tcase \"uint\",\n\t\t\t\"uint8\",\n\t\t\t\"uint16\",\n\t\t\t\"uint32\",\n\t\t\t\"uint64\",\n\t\t\t\"int\",\n\t\t\t\"int8\",\n\t\t\t\"int16\",\n\t\t\t\"int32\",\n\t\t\t\"int64\",\n\t\t\t\"\":\n\t\t\treturn nil\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"the provided format %q is not a valid extension of the type %q\", format, headerType)\n\t\t}\n\tcase \"boolean\":\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"the provided header type %q is not supported\", headerType)\n}\n\nfunc validateDefaultValueTypeAndFormat(headerType string, defaultValue string, format string) error {\n\tswitch headerType {\n\tcase \"string\":\n\t\tif !isQuotedString(defaultValue) {\n\t\t\treturn fmt.Errorf(\"the provided default value %q does not match provider type %q, or is not properly quoted with escaped quotations\", defaultValue, headerType)\n\t\t}\n\t\tswitch format {\n\t\tcase \"date-time\":\n\t\t\tunquoteTime := strings.Trim(defaultValue, `\"`)\n\t\t\tif _, err := time.Parse(time.RFC3339, unquoteTime); err != nil {\n\t\t\t\treturn fmt.Errorf(\"the provided default value %q is not a valid RFC3339 date-time string\", defaultValue)\n\t\t\t}\n\t\tcase \"date\":\n\t\t\tconst layoutRFC3339Date = \"2006-01-02\"\n\t\t\tunquoteDate := strings.Trim(defaultValue, `\"`)\n\t\t\tif _, err := time.Parse(layoutRFC3339Date, unquoteDate); err != nil {\n\t\t\t\treturn fmt.Errorf(\"the provided default value %q is not a valid RFC3339 date-time string\", defaultValue)\n\t\t\t}\n\t\t}\n\tcase \"number\":\n\t\tif err := isJSONNumber(defaultValue, headerType); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"integer\":\n\t\tswitch format {\n\t\tcase \"int32\":\n\t\t\tif _, err := strconv.ParseInt(defaultValue, 0, 32); err != nil {\n\t\t\t\treturn fmt.Errorf(\"the provided default value %q does not match provided format %q\", defaultValue, format)\n\t\t\t}\n\t\tcase \"uint32\":\n\t\t\tif _, err := strconv.ParseUint(defaultValue, 0, 32); err != nil {\n\t\t\t\treturn fmt.Errorf(\"the provided default value %q does not match provided format %q\", defaultValue, format)\n\t\t\t}\n\t\tcase \"int64\":\n\t\t\tif _, err := strconv.ParseInt(defaultValue, 0, 64); err != nil {\n\t\t\t\treturn fmt.Errorf(\"the provided default value %q does not match provided format %q\", defaultValue, format)\n\t\t\t}\n\t\tcase \"uint64\":\n\t\t\tif _, err := strconv.ParseUint(defaultValue, 0, 64); err != nil {\n\t\t\t\treturn fmt.Errorf(\"the provided default value %q does not match provided format %q\", defaultValue, format)\n\t\t\t}\n\t\tdefault:\n\t\t\tif _, err := strconv.ParseInt(defaultValue, 0, 64); err != nil {\n\t\t\t\treturn fmt.Errorf(\"the provided default value %q does not match provided type %q\", defaultValue, headerType)\n\t\t\t}\n\t\t}\n\tcase \"boolean\":\n\t\tif !isBool(defaultValue) {\n\t\t\treturn fmt.Errorf(\"the provided default value %q does not match provider type %q\", defaultValue, headerType)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc isQuotedString(s string) bool {\n\treturn len(s) >= 2 && s[0] == '\"' && s[len(s)-1] == '\"'\n}\n\nfunc isJSONNumber(s string, t string) error {\n\tval, err := strconv.ParseFloat(s, 64)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"the provided default value %q does not match provider type %q\", s, t)\n\t}\n\t// Floating point values that cannot be represented as sequences of digits (such as Infinity and NaN) are not permitted.\n\t// See: https://tools.ietf.org/html/rfc4627#section-2.4\n\tif math.IsInf(val, 0) || math.IsNaN(val) {\n\t\treturn fmt.Errorf(\"the provided number %q is not a valid JSON number\", s)\n\t}\n\n\treturn nil\n}\n\nfunc isBool(s string) bool {\n\t// Unable to use strconv.ParseBool because it returns truthy values https://golang.org/pkg/strconv/#example_ParseBool\n\t// per https://swagger.io/specification/v2/#data-types\n\t// type: boolean represents two values: true and false. Note that truthy and falsy values such as \"true\", \"\", 0 or null are not considered boolean values.\n\treturn s == \"true\" || s == \"false\"\n}\n\nfunc processHeaders(inputHdrs map[string]*openapi_options.Header) (openapiHeadersObject, error) {\n\thdrs := make(map[string]openapiHeaderObject, len(inputHdrs))\n\tfor k, v := range inputHdrs {\n\t\theader := textproto.CanonicalMIMEHeaderKey(k)\n\t\tret := openapiHeaderObject{\n\t\t\tDescription: v.Description,\n\t\t\tFormat:      v.Format,\n\t\t\tPattern:     v.Pattern,\n\t\t}\n\t\tif err := validateHeaderTypeAndFormat(v.Type, v.Format); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tret.Type = v.Type\n\t\tif v.Default != \"\" {\n\t\t\tif err := validateDefaultValueTypeAndFormat(v.Type, v.Default, v.Format); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tret.Default = RawExample(v.Default)\n\t\t}\n\t\thdrs[header] = ret\n\t}\n\treturn hdrs, nil\n}\n\nfunc removeInternalComments(comment string) string {\n\tc := []string{}\n\tfor len(comment) > 0 {\n\t\topen := strings.SplitN(comment, \"(--\", 2)\n\t\tif len(open) == 1 {\n\t\t\tc = append(c, open[0])\n\t\t\tbreak\n\t\t}\n\t\tex := strings.TrimRight(open[0], \" \\t\")\n\t\t// Trim only one line prior to all spaces\n\t\tswitch {\n\t\tcase strings.HasSuffix(ex, \"\\r\\n\"):\n\t\t\tex = strings.TrimSuffix(ex, \"\\r\\n\")\n\t\tcase strings.HasSuffix(ex, \"\\n\"):\n\t\t\tex = strings.TrimSuffix(ex, \"\\n\")\n\t\t}\n\t\tif ex != \"\" {\n\t\t\tc = append(c, ex)\n\t\t}\n\t\tcomment = open[1]\n\n\t\tclose := strings.SplitN(comment, \"--)\", 2)\n\t\tif len(close) > 1 {\n\t\t\tcomment = close[1]\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn strings.Join(c, \"\")\n}\n\n// updateOpenAPIDataFromComments updates a OpenAPI object based on a comment\n// from the proto file.\n//\n// First paragraph of a comment is used for summary. Remaining paragraphs of\n// a comment are used for description. If 'Summary' field is not present on\n// the passed swaggerObject, the summary and description are joined by \\n\\n.\n//\n// If there is a field named 'Info', its 'Summary' and 'Description' fields\n// will be updated instead.\n//\n// If there is no 'Summary', the same behavior will be attempted on 'Title',\n// but only if the last character is not a period.\nfunc updateOpenAPIDataFromComments(reg *descriptor.Registry, swaggerObject interface{}, data interface{}, comment string, isPackageObject bool) error {\n\tif len(comment) == 0 {\n\t\treturn nil\n\t}\n\n\t// Checks whether the \"ignore_comments\" flag is set to true\n\tif reg.GetIgnoreComments() {\n\t\treturn nil\n\t}\n\n\t// Checks whether the \"remove_internal_comments\" flag is set to true\n\tif reg.GetRemoveInternalComments() {\n\t\tcomment = removeInternalComments(comment)\n\t}\n\n\t// Checks whether the \"use_go_templates\" flag is set to true\n\tif reg.GetUseGoTemplate() {\n\t\tcomment = goTemplateComments(comment, data, reg)\n\t}\n\n\t// Figure out what to apply changes to.\n\tswaggerObjectValue := reflect.ValueOf(swaggerObject)\n\tinfoObjectValue := swaggerObjectValue.Elem().FieldByName(\"Info\")\n\tif !infoObjectValue.CanSet() {\n\t\t// No such field? Apply summary and description directly to\n\t\t// passed object.\n\t\tinfoObjectValue = swaggerObjectValue.Elem()\n\t}\n\n\t// Figure out which properties to update.\n\tsummaryValue := infoObjectValue.FieldByName(\"Summary\")\n\tdescriptionValue := infoObjectValue.FieldByName(\"Description\")\n\treadOnlyValue := infoObjectValue.FieldByName(\"ReadOnly\")\n\n\tif readOnlyValue.Kind() == reflect.Bool && readOnlyValue.CanSet() && strings.Contains(comment, \"Output only.\") {\n\t\treadOnlyValue.Set(reflect.ValueOf(true))\n\t}\n\n\tusingTitle := false\n\tif !summaryValue.CanSet() {\n\t\tsummaryValue = infoObjectValue.FieldByName(\"Title\")\n\t\tusingTitle = true\n\t}\n\n\tparagraphs := strings.Split(comment, paragraphDeliminator)\n\n\t// If there is a summary (or summary-equivalent) and it's empty, use the first\n\t// paragraph as summary, and the rest as description.\n\tif summaryValue.CanSet() {\n\t\tsummary := strings.TrimSpace(paragraphs[0])\n\t\tdescription := strings.TrimSpace(strings.Join(paragraphs[1:], paragraphDeliminator))\n\t\tif !usingTitle || (len(summary) > 0 && summary[len(summary)-1] != '.') {\n\t\t\t// overrides the schema value only if it's empty\n\t\t\t// keep the comment precedence when updating the package definition\n\t\t\tif summaryValue.Len() == 0 || isPackageObject {\n\t\t\t\tsummaryValue.Set(reflect.ValueOf(summary))\n\t\t\t}\n\t\t\tif len(description) > 0 {\n\t\t\t\tif !descriptionValue.CanSet() {\n\t\t\t\t\treturn errors.New(\"encountered object type with a summary, but no description\")\n\t\t\t\t}\n\t\t\t\t// overrides the schema value only if it's empty\n\t\t\t\t// keep the comment precedence when updating the package definition\n\t\t\t\tif descriptionValue.Len() == 0 || isPackageObject {\n\t\t\t\t\tdescriptionValue.Set(reflect.ValueOf(description))\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// There was no summary field on the swaggerObject. Try to apply the\n\t// whole comment into description if the OpenAPI object description is empty.\n\tif descriptionValue.CanSet() {\n\t\tif descriptionValue.Len() == 0 || isPackageObject {\n\t\t\tdescriptionValue.Set(reflect.ValueOf(strings.Join(paragraphs, paragraphDeliminator)))\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn errors.New(\"no description nor summary property\")\n}\n\nfunc fieldProtoComments(reg *descriptor.Registry, msg *descriptor.Message, field *descriptor.Field) string {\n\tprotoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.DescriptorProto)(nil)), \"Field\")\n\tfor i, f := range msg.Fields {\n\t\tif f == field {\n\t\t\treturn protoComments(reg, msg.File, msg.Outers, \"MessageType\", int32(msg.Index), protoPath, int32(i))\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc enumValueProtoComments(reg *descriptor.Registry, enum *descriptor.Enum) string {\n\tprotoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.EnumDescriptorProto)(nil)), \"Value\")\n\tvar comments []string\n\tfor idx, value := range enum.GetValue() {\n\t\tif reg.GetOmitEnumDefaultValue() && value.GetNumber() == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif !isVisible(getEnumValueVisibilityOption(value), reg) {\n\t\t\tcontinue\n\t\t}\n\t\tname := value.GetName()\n\t\tif reg.GetEnumsAsInts() {\n\t\t\tname = strconv.Itoa(int(value.GetNumber()))\n\t\t}\n\t\tif str := protoComments(reg, enum.File, enum.Outers, \"EnumType\", int32(enum.Index), protoPath, int32(idx)); str != \"\" {\n\t\t\tcomments = append(comments, name+\": \"+str)\n\t\t}\n\t}\n\tif len(comments) > 0 {\n\t\treturn \"- \" + strings.Join(comments, \"\\n - \")\n\t}\n\treturn \"\"\n}\n\nfunc protoComments(reg *descriptor.Registry, file *descriptor.File, outers []string, typeName string, typeIndex int32, fieldPaths ...int32) string {\n\tif file.SourceCodeInfo == nil {\n\t\tfmt.Fprintln(os.Stderr, file.GetName(), \"descriptor.File should not contain nil SourceCodeInfo\")\n\t\treturn \"\"\n\t}\n\n\touterPaths := make([]int32, len(outers))\n\tfor i := range outers {\n\t\tlocation := \"\"\n\t\tif file.Package != nil {\n\t\t\tlocation = file.GetPackage()\n\t\t}\n\n\t\tmsg, err := reg.LookupMsg(location, strings.Join(outers[:i+1], \".\"))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\touterPaths[i] = int32(msg.Index)\n\t}\n\n\tfor _, loc := range file.SourceCodeInfo.Location {\n\t\tif !isProtoPathMatches(loc.Path, outerPaths, typeName, typeIndex, fieldPaths) {\n\t\t\tcontinue\n\t\t}\n\t\tcomments := \"\"\n\t\tif loc.LeadingComments != nil {\n\t\t\tcomments = strings.TrimRight(*loc.LeadingComments, \"\\n\")\n\t\t\tcomments = strings.TrimSpace(comments)\n\t\t\t// TODO(ivucica): this is a hack to fix \"// \" being interpreted as \"//\".\n\t\t\t// perhaps we should:\n\t\t\t// - split by \\n\n\t\t\t// - determine if every (but first and last) line begins with \" \"\n\t\t\t// - trim every line only if that is the case\n\t\t\t// - join by \\n\n\t\t\tcomments = strings.ReplaceAll(comments, \"\\n \", \"\\n\")\n\t\t\tcomments = removeInternalComments(comments)\n\t\t}\n\t\tif loc.TrailingComments != nil {\n\t\t\ttrailing := strings.TrimSpace(*loc.TrailingComments)\n\t\t\tif comments == \"\" {\n\t\t\t\tcomments = trailing\n\t\t\t} else {\n\t\t\t\tcomments += \"\\n\\n\" + trailing\n\t\t\t}\n\t\t}\n\t\treturn comments\n\t}\n\treturn \"\"\n}\n\nfunc goTemplateComments(comment string, data interface{}, reg *descriptor.Registry) string {\n\tvar temp bytes.Buffer\n\ttpl, err := template.New(\"\").Funcs(template.FuncMap{\n\t\t// Allows importing documentation from a file\n\t\t\"import\": func(name string) string {\n\t\t\tfile, err := os.ReadFile(name)\n\t\t\tif err != nil {\n\t\t\t\treturn err.Error()\n\t\t\t}\n\t\t\t// Runs template over imported file\n\t\t\treturn goTemplateComments(string(file), data, reg)\n\t\t},\n\t\t// Grabs title and description from a field\n\t\t\"fieldcomments\": func(msg *descriptor.Message, field *descriptor.Field) string {\n\t\t\treturn strings.ReplaceAll(fieldProtoComments(reg, msg, field), \"\\n\", \"<br>\")\n\t\t},\n\t\t\"arg\": func(name string) string {\n\t\t\tif v, f := reg.GetGoTemplateArgs()[name]; f {\n\t\t\t\treturn v\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"goTemplateArg %s not found\", name)\n\t\t},\n\t}).Parse(comment)\n\tif err != nil {\n\t\t// If there is an error parsing the templating insert the error as string in the comment\n\t\t// to make it easier to debug the template error\n\t\treturn err.Error()\n\t}\n\tif err := tpl.Execute(&temp, data); err != nil {\n\t\t// If there is an error executing the templating insert the error as string in the comment\n\t\t// to make it easier to debug the error\n\t\treturn err.Error()\n\t}\n\treturn temp.String()\n}\n\nvar (\n\tmessageProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), \"MessageType\")\n\tnestedProtoPath  = protoPathIndex(reflect.TypeOf((*descriptorpb.DescriptorProto)(nil)), \"NestedType\")\n\tpackageProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), \"Package\")\n\tserviceProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), \"Service\")\n\tmethodProtoPath  = protoPathIndex(reflect.TypeOf((*descriptorpb.ServiceDescriptorProto)(nil)), \"Method\")\n)\n\nfunc isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, typeIndex int32, fieldPaths []int32) bool {\n\tif typeName == \"Package\" && typeIndex == packageProtoPath {\n\t\t// path for package comments is just [2], and all the other processing\n\t\t// is too complex for it.\n\t\tif len(paths) == 0 || typeIndex != paths[0] {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\n\tif len(paths) != len(outerPaths)*2+2+len(fieldPaths) {\n\t\treturn false\n\t}\n\n\tif typeName == \"Method\" {\n\t\tif paths[0] != serviceProtoPath || paths[2] != methodProtoPath {\n\t\t\treturn false\n\t\t}\n\t\tpaths = paths[2:]\n\t} else {\n\t\ttypeNameDescriptor := reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil))\n\n\t\tif len(outerPaths) > 0 {\n\t\t\tif paths[0] != messageProtoPath || paths[1] != outerPaths[0] {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tpaths = paths[2:]\n\t\t\touterPaths = outerPaths[1:]\n\n\t\t\tfor i, v := range outerPaths {\n\t\t\t\tif paths[i*2] != nestedProtoPath || paths[i*2+1] != v {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tpaths = paths[len(outerPaths)*2:]\n\n\t\t\tif typeName == \"MessageType\" {\n\t\t\t\ttypeName = \"NestedType\"\n\t\t\t}\n\t\t\ttypeNameDescriptor = reflect.TypeOf((*descriptorpb.DescriptorProto)(nil))\n\t\t}\n\n\t\tif paths[0] != protoPathIndex(typeNameDescriptor, typeName) || paths[1] != typeIndex {\n\t\t\treturn false\n\t\t}\n\t\tpaths = paths[2:]\n\t}\n\n\tfor i, v := range fieldPaths {\n\t\tif paths[i] != v {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// protoPathIndex returns a path component for google.protobuf.descriptor.SourceCode_Location.\n//\n// Specifically, it returns an id as generated from descriptor proto which\n// can be used to determine what type the id following it in the path is.\n// For example, if we are trying to locate comments related to a field named\n// `Address` in a message named `Person`, the path will be:\n//\n//\t[4, a, 2, b]\n//\n// While `a` gets determined by the order in which the messages appear in\n// the proto file, and `b` is the field index specified in the proto\n// file itself, the path actually needs to specify that `a` refers to a\n// message and not, say, a service; and  that `b` refers to a field and not\n// an option.\n//\n// protoPathIndex figures out the values 4 and 2 in the above example. Because\n// messages are top level objects, the value of 4 comes from field id for\n// `MessageType` inside `google.protobuf.descriptor.FileDescriptor` message.\n// This field has a message type `google.protobuf.descriptor.DescriptorProto`.\n// And inside message `DescriptorProto`, there is a field named `Field` with id\n// 2.\n//\n// Some code generators seem to be hardcoding these values; this method instead\n// interprets them from `descriptor.proto`-derived Go source as necessary.\nfunc protoPathIndex(descriptorType reflect.Type, what string) int32 {\n\tfield, ok := descriptorType.Elem().FieldByName(what)\n\tif !ok {\n\t\tpanic(fmt.Errorf(\"could not find protobuf descriptor type id for %s\", what))\n\t}\n\tpbtag := field.Tag.Get(\"protobuf\")\n\tif pbtag == \"\" {\n\t\tpanic(fmt.Errorf(\"no Go tag 'protobuf' on protobuf descriptor for %s\", what))\n\t}\n\tpath, err := strconv.ParseInt(strings.Split(pbtag, \",\")[1], 10, 32)\n\tif err != nil {\n\t\tpanic(fmt.Errorf(\"protobuf descriptor id for %s cannot be converted to a number: %s\", what, err.Error()))\n\t}\n\treturn int32(path)\n}\n\n// extractOperationOptionFromMethodDescriptor extracts the message of type\n// openapi_options.Operation from a given proto method's descriptor.\nfunc extractOperationOptionFromMethodDescriptor(meth *descriptorpb.MethodDescriptorProto) (*openapi_options.Operation, error) {\n\tif meth.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(meth.Options, openapi_options.E_Openapiv2Operation) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(meth.Options, openapi_options.E_Openapiv2Operation)\n\topts, ok := ext.(*openapi_options.Operation)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want an Operation\", ext)\n\t}\n\treturn opts, nil\n}\n\n// extractSchemaOptionFromMessageDescriptor extracts the message of type\n// openapi_options.Schema from a given proto message's descriptor.\nfunc extractSchemaOptionFromMessageDescriptor(msg *descriptorpb.DescriptorProto) (*openapi_options.Schema, error) {\n\tif msg.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(msg.Options, openapi_options.E_Openapiv2Schema) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(msg.Options, openapi_options.E_Openapiv2Schema)\n\topts, ok := ext.(*openapi_options.Schema)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want a Schema\", ext)\n\t}\n\treturn opts, nil\n}\n\n// extractEnumSchemaOptionFromEnumDescriptor extracts the message of type\n// openapi_options.EnumSchema from a given proto enum's descriptor.\nfunc extractEnumSchemaOptionFromEnumDescriptor(enum *descriptorpb.EnumDescriptorProto) (*openapi_options.EnumSchema, error) {\n\tif enum.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(enum.Options, openapi_options.E_Openapiv2Enum) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(enum.Options, openapi_options.E_Openapiv2Enum)\n\topts, ok := ext.(*openapi_options.EnumSchema)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want a EnumSchema\", ext)\n\t}\n\treturn opts, nil\n}\n\n// extractTagOptionFromServiceDescriptor extracts the tag of type\n// openapi_options.Tag from a given proto service's descriptor.\nfunc extractTagOptionFromServiceDescriptor(svc *descriptorpb.ServiceDescriptorProto) (*openapi_options.Tag, error) {\n\tif svc.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(svc.Options, openapi_options.E_Openapiv2Tag) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(svc.Options, openapi_options.E_Openapiv2Tag)\n\topts, ok := ext.(*openapi_options.Tag)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want a Tag\", ext)\n\t}\n\treturn opts, nil\n}\n\n// extractOpenAPIOptionFromFileDescriptor extracts the message of type\n// openapi_options.OpenAPI from a given proto method's descriptor.\nfunc extractOpenAPIOptionFromFileDescriptor(file *descriptorpb.FileDescriptorProto) (*openapi_options.Swagger, error) {\n\tif file.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(file.Options, openapi_options.E_Openapiv2Swagger) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(file.Options, openapi_options.E_Openapiv2Swagger)\n\topts, ok := ext.(*openapi_options.Swagger)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want a OpenAPI object\", ext)\n\t}\n\treturn opts, nil\n}\n\nfunc extractJSONSchemaFromFieldDescriptor(fd *descriptorpb.FieldDescriptorProto) (*openapi_options.JSONSchema, error) {\n\tif fd.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(fd.Options, openapi_options.E_Openapiv2Field) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(fd.Options, openapi_options.E_Openapiv2Field)\n\topts, ok := ext.(*openapi_options.JSONSchema)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want a JSONSchema object\", ext)\n\t}\n\treturn opts, nil\n}\n\nfunc extractFieldBehaviorFromFieldDescriptor(fd *descriptorpb.FieldDescriptorProto) ([]annotations.FieldBehavior, error) {\n\tif fd.Options == nil {\n\t\treturn nil, nil\n\t}\n\tif !proto.HasExtension(fd.Options, annotations.E_FieldBehavior) {\n\t\treturn nil, nil\n\t}\n\text := proto.GetExtension(fd.Options, annotations.E_FieldBehavior)\n\topts, ok := ext.([]annotations.FieldBehavior)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"extension is %T; want a []FieldBehavior object\", ext)\n\t}\n\treturn opts, nil\n}\n\nfunc getFieldVisibilityOption(fd *descriptor.Field) *visibility.VisibilityRule {\n\tif fd.Options == nil {\n\t\treturn nil\n\t}\n\tif !proto.HasExtension(fd.Options, visibility.E_FieldVisibility) {\n\t\treturn nil\n\t}\n\text := proto.GetExtension(fd.Options, visibility.E_FieldVisibility)\n\topts, ok := ext.(*visibility.VisibilityRule)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn opts\n}\n\nfunc getServiceVisibilityOption(fd *descriptor.Service) *visibility.VisibilityRule {\n\tif fd.Options == nil {\n\t\treturn nil\n\t}\n\tif !proto.HasExtension(fd.Options, visibility.E_ApiVisibility) {\n\t\treturn nil\n\t}\n\text := proto.GetExtension(fd.Options, visibility.E_ApiVisibility)\n\topts, ok := ext.(*visibility.VisibilityRule)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn opts\n}\n\nfunc getMethodVisibilityOption(fd *descriptor.Method) *visibility.VisibilityRule {\n\tif fd.Options == nil {\n\t\treturn nil\n\t}\n\tif !proto.HasExtension(fd.Options, visibility.E_MethodVisibility) {\n\t\treturn nil\n\t}\n\text := proto.GetExtension(fd.Options, visibility.E_MethodVisibility)\n\topts, ok := ext.(*visibility.VisibilityRule)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn opts\n}\n\nfunc getEnumValueVisibilityOption(fd *descriptorpb.EnumValueDescriptorProto) *visibility.VisibilityRule {\n\tif fd.Options == nil {\n\t\treturn nil\n\t}\n\tif !proto.HasExtension(fd.Options, visibility.E_ValueVisibility) {\n\t\treturn nil\n\t}\n\text := proto.GetExtension(fd.Options, visibility.E_ValueVisibility)\n\topts, ok := ext.(*visibility.VisibilityRule)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn opts\n}\n\nfunc getMethodOpenAPIOption(reg *descriptor.Registry, meth *descriptor.Method) (*openapi_options.Operation, error) {\n\topts, err := extractOperationOptionFromMethodDescriptor(meth.MethodDescriptorProto)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif opts != nil {\n\t\treturn opts, nil\n\t}\n\topts, ok := reg.GetOpenAPIMethodOption(meth.FQMN())\n\tif !ok {\n\t\treturn nil, nil\n\t}\n\treturn opts, nil\n}\n\nfunc getMessageOpenAPIOption(reg *descriptor.Registry, msg *descriptor.Message) (*openapi_options.Schema, error) {\n\topts, err := extractSchemaOptionFromMessageDescriptor(msg.DescriptorProto)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif opts != nil {\n\t\treturn opts, nil\n\t}\n\topts, ok := reg.GetOpenAPIMessageOption(msg.FQMN())\n\tif !ok {\n\t\treturn nil, nil\n\t}\n\treturn opts, nil\n}\n\nfunc getEnumOpenAPIOption(reg *descriptor.Registry, enum *descriptor.Enum) (*openapi_options.EnumSchema, error) {\n\topts, err := extractEnumSchemaOptionFromEnumDescriptor(enum.EnumDescriptorProto)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn opts, nil\n}\n\nfunc getServiceOpenAPIOption(reg *descriptor.Registry, svc *descriptor.Service) (*openapi_options.Tag, error) {\n\tif opts, ok := reg.GetOpenAPIServiceOption(svc.FQSN()); ok {\n\t\treturn opts, nil\n\t}\n\topts, err := extractTagOptionFromServiceDescriptor(svc.ServiceDescriptorProto)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn opts, nil\n}\n\nfunc getFileOpenAPIOption(reg *descriptor.Registry, file *descriptor.File) (*openapi_options.Swagger, error) {\n\topts, err := extractOpenAPIOptionFromFileDescriptor(file.FileDescriptorProto)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif opts != nil {\n\t\treturn opts, nil\n\t}\n\topts, ok := reg.GetOpenAPIFileOption(*file.Name)\n\tif !ok {\n\t\treturn nil, nil\n\t}\n\treturn opts, nil\n}\n\nfunc getFieldOpenAPIOption(reg *descriptor.Registry, fd *descriptor.Field) (*openapi_options.JSONSchema, error) {\n\topts, err := extractJSONSchemaFromFieldDescriptor(fd.FieldDescriptorProto)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif opts != nil {\n\t\treturn opts, nil\n\t}\n\topts, ok := reg.GetOpenAPIFieldOption(fd.FQFN())\n\tif !ok {\n\t\treturn nil, nil\n\t}\n\treturn opts, nil\n}\n\nfunc getFieldBehaviorOption(reg *descriptor.Registry, fd *descriptor.Field) ([]annotations.FieldBehavior, error) {\n\topts, err := extractFieldBehaviorFromFieldDescriptor(fd.FieldDescriptorProto)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif opts != nil {\n\t\treturn opts, nil\n\t}\n\treturn opts, nil\n}\n\nfunc protoJSONSchemaToOpenAPISchemaCore(j *openapi_options.JSONSchema, reg *descriptor.Registry, refs refMap) schemaCore {\n\tret := schemaCore{}\n\n\tif j.GetRef() != \"\" {\n\t\topenapiName, ok := fullyQualifiedNameToOpenAPIName(j.GetRef(), reg)\n\t\tif ok {\n\t\t\tret.Ref = \"#/definitions/\" + openapiName\n\t\t\tif refs != nil {\n\t\t\t\trefs[j.GetRef()] = struct{}{}\n\t\t\t}\n\t\t} else {\n\t\t\tret.Ref += j.GetRef()\n\t\t}\n\t} else {\n\t\tf, t := protoJSONSchemaTypeToFormat(j.GetType())\n\t\tret.Format = f\n\t\tret.Type = t\n\t}\n\n\treturn ret\n}\n\nfunc updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_options.JSONSchema, reg *descriptor.Registry, data interface{}) {\n\ts.Title = j.GetTitle()\n\ts.Description = j.GetDescription()\n\tif reg.GetUseGoTemplate() {\n\t\ts.Title = goTemplateComments(s.Title, data, reg)\n\t\ts.Description = goTemplateComments(s.Description, data, reg)\n\t}\n\tif s.Type == \"array\" {\n\t\ts.Items.MaxLength = j.GetMaxLength()\n\t\ts.Items.MinLength = j.GetMinLength()\n\t\ts.Items.Pattern = j.GetPattern()\n\t\ts.Items.Default = j.GetDefault()\n\t\ts.Items.MaxProperties = j.GetMaxProperties()\n\t\ts.Items.MinProperties = j.GetMinProperties()\n\t\ts.Items.Required = j.GetRequired()\n\t\ts.Items.Minimum = j.GetMinimum()\n\t\ts.Items.Maximum = j.GetMaximum()\n\t\ts.Items.ReadOnly = j.GetReadOnly()\n\t\ts.Items.MultipleOf = j.GetMultipleOf()\n\t\ts.Items.ExclusiveMaximum = j.GetExclusiveMaximum()\n\t\ts.Items.ExclusiveMinimum = j.GetExclusiveMinimum()\n\t\ts.Items.Enum = j.GetEnum()\n\n\t\tif j.GetDefault() == \"\" {\n\t\t\ts.Items.Default = nil\n\t\t}\n\t\tif len(j.GetEnum()) == 0 {\n\t\t\ts.Items.Enum = nil\n\t\t}\n\t\tif j.GetFormat() != \"\" {\n\t\t\ts.Items.Format = j.GetFormat()\n\t\t}\n\t} else {\n\t\ts.MaxLength = j.GetMaxLength()\n\t\ts.MinLength = j.GetMinLength()\n\t\ts.Pattern = j.GetPattern()\n\t\ts.Default = j.GetDefault()\n\t\ts.MaxProperties = j.GetMaxProperties()\n\t\ts.MinProperties = j.GetMinProperties()\n\t\ts.Required = j.GetRequired()\n\t\ts.Minimum = j.GetMinimum()\n\t\ts.Maximum = j.GetMaximum()\n\t\ts.ReadOnly = j.GetReadOnly()\n\t\ts.MultipleOf = j.GetMultipleOf()\n\t\ts.ExclusiveMaximum = j.GetExclusiveMaximum()\n\t\ts.ExclusiveMinimum = j.GetExclusiveMinimum()\n\t\ts.Enum = j.GetEnum()\n\n\t\tif j.GetDefault() == \"\" {\n\t\t\ts.Default = nil\n\t\t}\n\t\tif len(j.GetEnum()) == 0 {\n\t\t\ts.Enum = nil\n\t\t}\n\t\tif j.GetFormat() != \"\" {\n\t\t\ts.Format = j.GetFormat()\n\t\t}\n\t}\n\ts.UniqueItems = j.GetUniqueItems()\n\ts.MaxItems = j.GetMaxItems()\n\ts.MinItems = j.GetMinItems()\n\n\tif j.GetExtensions() != nil {\n\t\texts, err := processExtensions(j.GetExtensions())\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\ts.extensions = exts\n\t}\n\tif overrideType := j.GetType(); len(overrideType) > 0 {\n\t\ts.Type = strings.ToLower(overrideType[0].String())\n\t}\n\tif j.GetExample() != \"\" {\n\t\ts.Example = RawExample(j.GetExample())\n\t}\n}\n\nfunc updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotations.FieldBehavior, reg *descriptor.Registry, field *descriptor.Field) {\n\trequired := false\n\tif reg.GetUseProto3FieldSemantics() {\n\t\trequired = !field.GetProto3Optional() && field.OneofIndex == nil\n\t}\n\tfor _, fb := range j {\n\t\tswitch fb {\n\t\tcase annotations.FieldBehavior_REQUIRED:\n\t\t\trequired = true\n\t\tcase annotations.FieldBehavior_OUTPUT_ONLY:\n\t\t\ts.ReadOnly = true\n\t\tcase annotations.FieldBehavior_FIELD_BEHAVIOR_UNSPECIFIED:\n\t\tcase annotations.FieldBehavior_OPTIONAL:\n\t\t\trequired = false\n\t\tcase annotations.FieldBehavior_INPUT_ONLY:\n\t\t\t// OpenAPI v3 supports a writeOnly property, but this is not supported in Open API v2\n\t\tcase annotations.FieldBehavior_IMMUTABLE:\n\t\t}\n\t}\n\tif required {\n\t\tif reg.GetUseJSONNamesForFields() {\n\t\t\ts.Required = append(s.Required, *field.JsonName)\n\t\t} else {\n\t\t\ts.Required = append(s.Required, *field.Name)\n\t\t}\n\t}\n}\n\nfunc openapiSchemaFromProtoEnumSchema(s *openapi_options.EnumSchema, reg *descriptor.Registry, refs refMap, data interface{}) openapiSchemaObject {\n\tret := openapiSchemaObject{\n\t\tExternalDocs: protoExternalDocumentationToOpenAPIExternalDocumentation(s.GetExternalDocs(), reg, data),\n\t}\n\tjsonSchema := &openapi_options.JSONSchema{\n\t\tRef:         s.Ref,\n\t\tTitle:       s.Title,\n\t\tExtensions:  s.Extensions,\n\t\tDescription: s.Description,\n\t\tDefault:     s.Default,\n\t\tReadOnly:    s.ReadOnly,\n\t\tExample:     s.Example,\n\t}\n\tret.schemaCore = protoJSONSchemaToOpenAPISchemaCore(jsonSchema, reg, refs)\n\tupdateswaggerObjectFromJSONSchema(&ret, jsonSchema, reg, data)\n\treturn ret\n}\n\nfunc openapiSchemaFromProtoSchema(s *openapi_options.Schema, reg *descriptor.Registry, refs refMap, data interface{}) openapiSchemaObject {\n\tret := openapiSchemaObject{\n\t\tExternalDocs: protoExternalDocumentationToOpenAPIExternalDocumentation(s.GetExternalDocs(), reg, data),\n\t}\n\n\tret.schemaCore = protoJSONSchemaToOpenAPISchemaCore(s.GetJsonSchema(), reg, refs)\n\tupdateswaggerObjectFromJSONSchema(&ret, s.GetJsonSchema(), reg, data)\n\n\tif s != nil && s.Example != \"\" {\n\t\tret.Example = RawExample(s.Example)\n\t}\n\n\treturn ret\n}\n\nfunc openapiExamplesFromProtoExamples(in map[string]string) map[string]interface{} {\n\tif len(in) == 0 {\n\t\treturn nil\n\t}\n\tout := make(map[string]interface{}, len(in))\n\tfor mimeType, exampleStr := range in {\n\t\tswitch mimeType {\n\t\tcase \"application/json\":\n\t\t\t// JSON example objects are rendered raw.\n\t\t\tout[mimeType] = RawExample(exampleStr)\n\t\tdefault:\n\t\t\t// All other mimetype examples are rendered as strings.\n\t\t\tout[mimeType] = exampleStr\n\t\t}\n\t}\n\treturn out\n}\n\nfunc protoJSONSchemaTypeToFormat(in []openapi_options.JSONSchema_JSONSchemaSimpleTypes) (string, string) {\n\tif len(in) == 0 {\n\t\treturn \"\", \"\"\n\t}\n\n\t// Can't support more than 1 type, just return the first element.\n\t// This is due to an inconsistency in the design of the openapiv2 proto\n\t// and that used in schemaCore. schemaCore uses the v3 definition of types,\n\t// which only allows a single string, while the openapiv2 proto uses the OpenAPI v2\n\t// definition, which defers to the JSON schema definition, which allows a string or an array.\n\t// Sources:\n\t// https://swagger.io/specification/#itemsObject\n\t// https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.2\n\tswitch in[0] {\n\tcase openapi_options.JSONSchema_UNKNOWN, openapi_options.JSONSchema_NULL:\n\t\treturn \"\", \"\"\n\tcase openapi_options.JSONSchema_OBJECT:\n\t\treturn \"object\", \"\"\n\tcase openapi_options.JSONSchema_ARRAY:\n\t\treturn \"array\", \"\"\n\tcase openapi_options.JSONSchema_BOOLEAN:\n\t\t// NOTE: in OpenAPI specification, format should be empty on boolean type\n\t\treturn \"boolean\", \"\"\n\tcase openapi_options.JSONSchema_INTEGER:\n\t\treturn \"integer\", \"int32\"\n\tcase openapi_options.JSONSchema_NUMBER:\n\t\treturn \"number\", \"double\"\n\tcase openapi_options.JSONSchema_STRING:\n\t\t// NOTE: in OpenAPI specification, format should be empty on string type\n\t\treturn \"string\", \"\"\n\tdefault:\n\t\t// Maybe panic?\n\t\treturn \"\", \"\"\n\t}\n}\n\nfunc protoExternalDocumentationToOpenAPIExternalDocumentation(in *openapi_options.ExternalDocumentation, reg *descriptor.Registry, data interface{}) *openapiExternalDocumentationObject {\n\tif in == nil {\n\t\treturn nil\n\t}\n\n\tif reg.GetUseGoTemplate() {\n\t\tin.Description = goTemplateComments(in.Description, data, reg)\n\t}\n\n\treturn &openapiExternalDocumentationObject{\n\t\tDescription: in.Description,\n\t\tURL:         in.Url,\n\t}\n}\n\nfunc addCustomRefs(d openapiDefinitionsObject, reg *descriptor.Registry, refs refMap) error {\n\tif len(refs) == 0 {\n\t\treturn nil\n\t}\n\tmsgMap := make(messageMap)\n\tenumMap := make(enumMap)\n\tfor ref := range refs {\n\t\tswgName, swgOk := fullyQualifiedNameToOpenAPIName(ref, reg)\n\t\tif !swgOk {\n\t\t\tgrpclog.Errorf(\"can't resolve OpenAPI name from CustomRef %q\", ref)\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := d[swgName]; ok {\n\t\t\t// Skip already existing definitions\n\t\t\tdelete(refs, ref)\n\t\t\tcontinue\n\t\t}\n\t\tmsg, err := reg.LookupMsg(\"\", ref)\n\t\tif err == nil {\n\t\t\tmsgMap[swgName] = msg\n\t\t\tcontinue\n\t\t}\n\t\tenum, err := reg.LookupEnum(\"\", ref)\n\t\tif err == nil {\n\t\t\tenumMap[swgName] = enum\n\t\t\tcontinue\n\t\t}\n\n\t\t// ?? Should be either enum or msg\n\t}\n\tif err := renderMessagesAsDefinition(msgMap, d, reg, refs, nil); err != nil {\n\t\treturn err\n\t}\n\trenderEnumerationsAsDefinition(enumMap, d, reg, refs)\n\n\t// Run again in case any new refs were added\n\treturn addCustomRefs(d, reg, refs)\n}\n\nfunc lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descriptor.Message) string {\n\tfor _, oneField := range fields {\n\t\tif oneField.GetName() == fieldName {\n\t\t\treturn oneField.GetJsonName()\n\t\t}\n\t}\n\tmessageNameToFieldsToJSONName := make(map[string]map[string]string, len(msgs))\n\tfieldNameToType := make(map[string]string)\n\tfor _, msg := range msgs {\n\t\tfieldNameToJSONName := make(map[string]string)\n\t\tfor _, oneField := range msg.GetField() {\n\t\t\tfieldNameToJSONName[oneField.GetName()] = oneField.GetJsonName()\n\t\t\tfieldNameToType[oneField.GetName()] = oneField.GetTypeName()\n\t\t}\n\t\tmessageNameToFieldsToJSONName[msg.GetName()] = fieldNameToJSONName\n\t}\n\tif strings.Contains(fieldName, \".\") {\n\t\tfieldNames := strings.Split(fieldName, \".\")\n\t\tfieldNamesWithCamelCase := make([]string, 0)\n\t\tfor i := 0; i < len(fieldNames)-1; i++ {\n\t\t\tfieldNamesWithCamelCase = append(fieldNamesWithCamelCase, casing.JSONCamelCase(fieldNames[i]))\n\t\t}\n\t\tprefix := strings.Join(fieldNamesWithCamelCase, \".\")\n\t\treservedJSONName := getReservedJSONName(fieldName, messageNameToFieldsToJSONName, fieldNameToType)\n\t\tif reservedJSONName != \"\" {\n\t\t\treturn prefix + \".\" + reservedJSONName\n\t\t}\n\t}\n\treturn casing.JSONCamelCase(fieldName)\n}\n\nfunc getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[string]map[string]string, fieldNameToType map[string]string) string {\n\tif len(strings.Split(fieldName, \".\")) == 2 {\n\t\tfieldNames := strings.Split(fieldName, \".\")\n\t\tfirstVariable := fieldNames[0]\n\t\tfirstType := fieldNameToType[firstVariable]\n\t\tfirstTypeShortNames := strings.Split(firstType, \".\")\n\t\tfirstTypeShortName := firstTypeShortNames[len(firstTypeShortNames)-1]\n\t\treturn messageNameToFieldsToJSONName[firstTypeShortName][fieldNames[1]]\n\t}\n\tfieldNames := strings.Split(fieldName, \".\")\n\treturn getReservedJSONName(strings.Join(fieldNames[1:], \".\"), messageNameToFieldsToJSONName, fieldNameToType)\n}\n\nfunc find(a []string, x string) int {\n\t// This is a linear search but we are dealing with a small number of fields\n\tfor i, n := range a {\n\t\tif x == n {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// Make a deep copy of the outer parameters that has paramName as the first component,\n// but remove the first component of the field path.\nfunc subPathParams(paramName string, outerParams []descriptor.Parameter) []descriptor.Parameter {\n\tvar innerParams []descriptor.Parameter\n\tfor _, p := range outerParams {\n\t\tif len(p.FieldPath) > 1 && p.FieldPath[0].Name == paramName {\n\t\t\tsubParam := descriptor.Parameter{\n\t\t\t\tFieldPath: p.FieldPath[1:],\n\t\t\t\tTarget:    p.Target,\n\t\t\t\tMethod:    p.Method,\n\t\t\t}\n\t\t\tinnerParams = append(innerParams, subParam)\n\t\t}\n\t}\n\treturn innerParams\n}\n\nfunc getFieldConfiguration(reg *descriptor.Registry, fd *descriptor.Field) *openapi_options.JSONSchema_FieldConfiguration {\n\tif j, err := getFieldOpenAPIOption(reg, fd); err == nil {\n\t\treturn j.GetFieldConfiguration()\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/template_fuzz_test.go",
    "content": "//go:build go1.18\n// +build go1.18\n\npackage genopenapi\n\nimport (\n\t\"regexp\"\n\t\"testing\"\n)\n\nvar replaceInternalCommentsRegex = regexp.MustCompile(`(?s)(\\r?\\n)?[ \\t]*(\\(--)((.*?--\\))|.*$)?`)\n\nfunc FuzzRemoveInternalComments(f *testing.F) {\n\tf.Add(\"Text\\n\\n(-- Comment --)\\n\\nMore Text\\n\")\n\tf.Add(\"Text\\n\\n(-- Multi\\nLine\\n\\nComment --)\\n\\nMore Text\\n\")\n\tf.Add(\"(-- Starting with comment --)\\n\\nMore Text\\n\")\n\tf.Add(\"\\n\\n(-- Starting with new line and comment --)\\n\\nMore Text\\n\")\n\tf.Add(\"Ending with\\n\\n(-- Comment --)\")\n\tf.Fuzz(func(t *testing.T, s string) {\n\t\ts1 := removeInternalComments(s)\n\t\ts2 := replaceInternalCommentsRegex.ReplaceAllString(s, \"\")\n\t\tif s1 != s2 {\n\t\t\tt.Errorf(\"Unexpected comment removal difference: our function produced %q but regex produced %q on %q\", s1, s2, s)\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/template_test.go",
    "content": "package genopenapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule\"\n\topenapi_options \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/genproto/googleapis/api/annotations\"\n\t\"google.golang.org/genproto/googleapis/api/visibility\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protodesc\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n\t\"google.golang.org/protobuf/types/descriptorpb\"\n\t\"google.golang.org/protobuf/types/known/anypb\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n\tfield_mask \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\t\"google.golang.org/protobuf/types/known/structpb\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nvar marshaler = &runtime.JSONPb{}\n\nfunc TestOpenapiExamplesFromProtoExamples(t *testing.T) {\n\texamples := openapiExamplesFromProtoExamples(map[string]string{\n\t\t\"application/json\": `{\"Hello\": \"Worldr!\"}`,\n\t\t\"plain/text\":       \"Hello, World!\",\n\t})\n\n\ttestCases := map[Format]string{\n\t\tFormatJSON: `\n\t\t{\n\t\t\t\"application/json\": {\n\t\t\t\t\"Hello\": \"Worldr!\"\n\t\t\t},\n\t\t\t\"plain/text\": \"Hello, World!\"\n\t\t}\n\t\t`,\n\t\tFormatYAML: `\n\t\tapplication/json:\n\t\t  Hello: Worldr!\n\t\tplain/text: Hello, World!\n\t\t`,\n\t}\n\n\tspaceRemover := strings.NewReplacer(\" \", \"\", \"\\t\", \"\", \"\\n\", \"\")\n\n\tfor format, expected := range testCases {\n\t\tt.Run(string(format), func(t *testing.T) {\n\t\t\tvar buf bytes.Buffer\n\n\t\t\tencoder, err := format.NewEncoder(&buf)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"creating encoder: %s\", err)\n\t\t\t}\n\n\t\t\terr = encoder.Encode(examples)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"encoding: %s\", err)\n\t\t\t}\n\n\t\t\tactual := spaceRemover.Replace(buf.String())\n\t\t\texpected = spaceRemover.Replace(expected)\n\n\t\t\tif expected != actual {\n\t\t\t\tt.Fatalf(\"expected:\\n%s\\nactual:\\n%s\", expected, actual)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc crossLinkFixture(f *descriptor.File) *descriptor.File {\n\tfor _, m := range f.Messages {\n\t\tm.File = f\n\t}\n\tfor _, svc := range f.Services {\n\t\tsvc.File = f\n\t\tfor _, m := range svc.Methods {\n\t\t\tm.Service = svc\n\t\t\tfor _, b := range m.Bindings {\n\t\t\t\tb.Method = m\n\t\t\t\tfor _, param := range b.PathParams {\n\t\t\t\t\tparam.Method = m\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn f\n}\n\nfunc reqFromFile(f *descriptor.File) *pluginpb.CodeGeneratorRequest {\n\treturn &pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\tf.FileDescriptorProto,\n\t\t},\n\t\tFileToGenerate: []string{f.GetName()},\n\t}\n}\n\nfunc TestMessageToQueryParametersWithEnumAsInt(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t\tParams   []openapiParameterObject\n\t}\n\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"a\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"b\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"c\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"a\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"b\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"number\",\n\t\t\t\t\tFormat:   \"double\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:             \"c\",\n\t\t\t\t\tIn:               \"query\",\n\t\t\t\t\tRequired:         false,\n\t\t\t\t\tType:             \"array\",\n\t\t\t\t\tCollectionFormat: \"multi\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Nested\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"a\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"deep\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested.DeepNested\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tNestedType: []*descriptorpb.DescriptorProto{{\n\t\t\t\t\t\tName: proto.String(\"DeepNested\"),\n\t\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName:   proto.String(\"b\"),\n\t\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName:     proto.String(\"c\"),\n\t\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(),\n\t\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested.DeepNested.DeepEnum\"),\n\t\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEnumType: []*descriptorpb.EnumDescriptorProto{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName: proto.String(\"DeepEnum\"),\n\t\t\t\t\t\t\t\tValue: []*descriptorpb.EnumValueDescriptorProto{\n\t\t\t\t\t\t\t\t\t{Name: proto.String(\"FALSE\"), Number: proto.Int32(0)},\n\t\t\t\t\t\t\t\t\t{Name: proto.String(\"TRUE\"), Number: proto.Int32(1)},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.a\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.deep.b\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.deep.c\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"integer\",\n\t\t\t\t\tEnum:     []int{0, 1},\n\t\t\t\t\tDefault:  0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetEnumsAsInts(true)\n\t\tvar msgs []*descriptor.Message\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\t// avoid checking Items for array types\n\t\tfor i := range params {\n\t\t\tparams[i].Items = nil\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %v, got %v\", test.Params, params)\n\t\t}\n\t}\n}\n\nfunc TestMessageToQueryParametersWithOmitEnumDefaultValue(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t\tParams   []openapiParameterObject\n\t}\n\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"a\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"b\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"c\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"a\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"b\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"number\",\n\t\t\t\t\tFormat:   \"double\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:             \"c\",\n\t\t\t\t\tIn:               \"query\",\n\t\t\t\t\tRequired:         false,\n\t\t\t\t\tType:             \"array\",\n\t\t\t\t\tCollectionFormat: \"multi\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Nested\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"a\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"deep\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested.DeepNested\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tNestedType: []*descriptorpb.DescriptorProto{{\n\t\t\t\t\t\tName: proto.String(\"DeepNested\"),\n\t\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName:   proto.String(\"b\"),\n\t\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName:     proto.String(\"c\"),\n\t\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(),\n\t\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested.DeepNested.DeepEnum\"),\n\t\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEnumType: []*descriptorpb.EnumDescriptorProto{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName: proto.String(\"DeepEnum\"),\n\t\t\t\t\t\t\t\tValue: []*descriptorpb.EnumValueDescriptorProto{\n\t\t\t\t\t\t\t\t\t{Name: proto.String(\"FALSE\"), Number: proto.Int32(0)},\n\t\t\t\t\t\t\t\t\t{Name: proto.String(\"TRUE\"), Number: proto.Int32(1)},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.a\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.deep.b\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.deep.c\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t\tEnum:     []string{\"TRUE\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetOmitEnumDefaultValue(true)\n\t\tvar msgs []*descriptor.Message\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\t// avoid checking Items for array types\n\t\tfor i := range params {\n\t\t\tparams[i].Items = nil\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %v, got %v\", test.Params, params)\n\t\t}\n\t}\n}\n\nfunc TestMessageToQueryParameters(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t\tParams   []openapiParameterObject\n\t}\n\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"a\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"b\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"c\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"a\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"b\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"number\",\n\t\t\t\t\tFormat:   \"double\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:             \"c\",\n\t\t\t\t\tIn:               \"query\",\n\t\t\t\t\tRequired:         false,\n\t\t\t\t\tType:             \"array\",\n\t\t\t\t\tCollectionFormat: \"multi\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Nested\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"a\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"deep\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested.DeepNested\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tNestedType: []*descriptorpb.DescriptorProto{{\n\t\t\t\t\t\tName: proto.String(\"DeepNested\"),\n\t\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName:   proto.String(\"b\"),\n\t\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName:     proto.String(\"c\"),\n\t\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(),\n\t\t\t\t\t\t\t\tTypeName: proto.String(\".example.Nested.DeepNested.DeepEnum\"),\n\t\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEnumType: []*descriptorpb.EnumDescriptorProto{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName: proto.String(\"DeepEnum\"),\n\t\t\t\t\t\t\t\tValue: []*descriptorpb.EnumValueDescriptorProto{\n\t\t\t\t\t\t\t\t\t{Name: proto.String(\"FALSE\"), Number: proto.Int32(0)},\n\t\t\t\t\t\t\t\t\t{Name: proto.String(\"TRUE\"), Number: proto.Int32(1)},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.a\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.deep.b\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"nested.deep.c\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t\tEnum:     []string{\"FALSE\", \"TRUE\"},\n\t\t\t\t\tDefault:  \"FALSE\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\tmsgs := []*descriptor.Message{}\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\t// avoid checking Items for array types\n\t\tfor i := range params {\n\t\t\tparams[i].Items = nil\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %v, got %v\", test.Params, params)\n\t\t}\n\t}\n}\n\n// TestMessageToQueryParametersNoRecursive, is a check that cyclical references between messages\n// are not falsely detected given previous known edge-cases.\nfunc TestMessageToQueryParametersNoRecursive(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t}\n\n\ttests := []test{\n\t\t// First test:\n\t\t// Here is a message that has two of another message adjacent to one another in a nested message.\n\t\t// There is no loop but this was previously falsely flagged as a cycle.\n\t\t// Example proto:\n\t\t// message NonRecursiveMessage {\n\t\t//      string field = 1;\n\t\t// }\n\t\t// message BaseMessage {\n\t\t//      NonRecursiveMessage first = 1;\n\t\t//      NonRecursiveMessage second = 2;\n\t\t// }\n\t\t// message QueryMessage {\n\t\t//      BaseMessage first = 1;\n\t\t//      string second = 2;\n\t\t// }\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"QueryMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"first\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.BaseMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"second\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"BaseMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"first\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.NonRecursiveMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"second\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.NonRecursiveMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Note there is no recursive nature to this message\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"NonRecursiveMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: proto.String(\"field\"),\n\t\t\t\t\t\t\t// Label:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"QueryMessage\",\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\tmsgs := []*descriptor.Message{}\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\n\t\t_, err = messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"No recursion error should be thrown: %s\", err)\n\t\t}\n\t}\n}\n\n// TestMessageToQueryParametersRecursive, is a check that cyclical references between messages\n// are handled gracefully. The goal is to ensure that attempts to add messages with cyclical\n// references to query-parameters returns an error message.\nfunc TestMessageToQueryParametersRecursive(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t}\n\n\ttests := []test{\n\t\t// First test:\n\t\t// Here we test that a message that references itself through a field will return an error.\n\t\t// Example proto:\n\t\t// message DirectRecursiveMessage {\n\t\t//      DirectRecursiveMessage nested = 1;\n\t\t// }\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"DirectRecursiveMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.DirectRecursiveMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"DirectRecursiveMessage\",\n\t\t},\n\t\t// Second test:\n\t\t// Here we test that a cycle through multiple messages is detected and that an error is returned.\n\t\t// Sample:\n\t\t// message Root { NodeMessage nested = 1; }\n\t\t// message NodeMessage { CycleMessage nested = 1; }\n\t\t// message CycleMessage { Root nested = 1; }\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"RootMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.NodeMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"NodeMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.CycleMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"CycleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.RootMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"RootMessage\",\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\tmsgs := []*descriptor.Message{}\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\t_, err = messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"It should not be allowed to have recursive query parameters\")\n\t\t}\n\t}\n}\n\nfunc TestMessageToQueryParametersWithJsonName(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t\tParams   []openapiParameterObject\n\t}\n\n\trequiredField := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, requiredField)\n\n\tmessageSchema := &openapi_options.Schema{\n\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\tRequired: []string{\"test_field_b\"},\n\t\t},\n\t}\n\tmessageOption := &descriptorpb.MessageOptions{}\n\tproto.SetExtension(messageOption, openapi_options.E_Openapiv2Schema, messageSchema)\n\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"test_field_a\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t\tJsonName: proto.String(\"testFieldA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"testFieldA\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"SubMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"test_field_a\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t\tJsonName: proto.String(\"testFieldA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"sub_message\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.SubMessage\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t\tJsonName: proto.String(\"subMessage\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"subMessage.testFieldA\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"test_field_a\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t\tJsonName: proto.String(\"testFieldACustom\"),\n\t\t\t\t\t\t\tOptions:  requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"test_field_b\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t\tJsonName: proto.String(\"testFieldBCustom\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tOptions: messageOption,\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"testFieldACustom\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: true,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"testFieldBCustom\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: true,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetUseJSONNamesForFields(true)\n\t\tmsgs := []*descriptor.Message{}\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %#v, got %#v\", test.Params, params)\n\t\t}\n\t}\n}\n\nfunc TestMessageToQueryParametersWellKnownTypes(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs          []*descriptorpb.DescriptorProto\n\t\tWellKnownMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage           string\n\t\tParams            []openapiParameterObject\n\t}\n\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"a_field_mask\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".google.protobuf.FieldMask\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"a_timestamp\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Timestamp\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tWellKnownMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"FieldMask\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"paths\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Timestamp\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"seconds\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT64.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"nanos\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"a_field_mask\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"a_timestamp\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t\tFormat:   \"date-time\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetEnumsAsInts(true)\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"google/well_known.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"google.protobuf\"),\n\t\t\t\t\tDependency:     []string{},\n\t\t\t\t\tMessageType:    test.WellKnownMsgDescs,\n\t\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"google/well_known\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"acme/example.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\t\tDependency:     []string{\"google/well_known.proto\"},\n\t\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"acme/example\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load CodeGeneratorRequest: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %v, got %v\", test.Params, params)\n\t\t}\n\t}\n}\n\nfunc TestMessageToQueryParametersWithRequiredField(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t\tParams   []openapiParameterObject\n\t}\n\n\tmessageSchema := &openapi_options.Schema{\n\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\tRequired: []string{\"a\"},\n\t\t},\n\t}\n\tmessageOption := &descriptorpb.MessageOptions{}\n\tproto.SetExtension(messageOption, openapi_options.E_Openapiv2Schema, messageSchema)\n\n\tfieldSchema := &openapi_options.JSONSchema{Required: []string{\"b\"}}\n\tfieldOption := &descriptorpb.FieldOptions{}\n\tproto.SetExtension(fieldOption, openapi_options.E_Openapiv2Field, fieldSchema)\n\n\t// TODO(makdon): is nested field's test case necessary here?\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"a\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"b\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\t\t\t\tOptions: fieldOption,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"c\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tOptions: messageOption,\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"a\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: true,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"b\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: true,\n\t\t\t\t\tType:     \"number\",\n\t\t\t\t\tFormat:   \"double\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:             \"c\",\n\t\t\t\t\tIn:               \"query\",\n\t\t\t\t\tRequired:         false,\n\t\t\t\t\tType:             \"array\",\n\t\t\t\t\tCollectionFormat: \"multi\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\tmsgs := []*descriptor.Message{}\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\t// avoid checking Items for array types\n\t\tfor i := range params {\n\t\t\tparams[i].Items = nil\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %v, got %v\", test.Params, params)\n\t\t}\n\t}\n}\n\nfunc TestMessageToQueryParametersWithDeprecatedField(t *testing.T) {\n\tannotationOptions := func() *descriptorpb.FieldOptions {\n\t\topts := &descriptorpb.FieldOptions{}\n\t\tproto.SetExtension(opts, openapi_options.E_Openapiv2Field, &openapi_options.JSONSchema{\n\t\t\tFieldConfiguration: &openapi_options.JSONSchema_FieldConfiguration{\n\t\t\t\tDeprecated: true,\n\t\t\t},\n\t\t})\n\t\treturn opts\n\t}\n\n\ttype test struct {\n\t\tMsgDescs               []*descriptorpb.DescriptorProto\n\t\tMessage                string\n\t\tParams                 []openapiParameterObject\n\t\tenableFieldDeprecation bool\n\t}\n\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"deprecated_via_proto\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t\tOptions: &descriptorpb.FieldOptions{\n\t\t\t\t\t\t\t\tDeprecated: proto.Bool(true),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"deprecated_via_annotation\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\t\t\t\tOptions: annotationOptions(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"active_field\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage:                \"ExampleMessage\",\n\t\t\tenableFieldDeprecation: true,\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:       \"deprecated_via_proto\",\n\t\t\t\t\tIn:         \"query\",\n\t\t\t\t\tRequired:   false,\n\t\t\t\t\tType:       \"string\",\n\t\t\t\t\tDeprecated: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:       \"deprecated_via_annotation\",\n\t\t\t\t\tIn:         \"query\",\n\t\t\t\t\tRequired:   false,\n\t\t\t\t\tType:       \"string\",\n\t\t\t\t\tDeprecated: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"active_field\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"deprecated_via_proto\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t\tOptions: &descriptorpb.FieldOptions{\n\t\t\t\t\t\t\t\tDeprecated: proto.Bool(true),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"deprecated_via_annotation\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\t\t\t\tOptions: annotationOptions(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"active_field\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage:                \"ExampleMessage\",\n\t\t\tenableFieldDeprecation: false,\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName:       \"deprecated_via_proto\",\n\t\t\t\t\tIn:         \"query\",\n\t\t\t\t\tRequired:   false,\n\t\t\t\t\tType:       \"string\",\n\t\t\t\t\tDeprecated: false,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:       \"deprecated_via_annotation\",\n\t\t\t\t\tIn:         \"query\",\n\t\t\t\t\tRequired:   false,\n\t\t\t\t\tType:       \"string\",\n\t\t\t\t\tDeprecated: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:     \"active_field\",\n\t\t\t\t\tIn:       \"query\",\n\t\t\t\t\tRequired: false,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// Enable or disable proto-field deprecation per test case before loading descriptors.\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetEnableFieldDeprecation(test.enableFieldDeprecation)\n\t\tmsgs := []*descriptor.Message{}\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\tfor i := range params {\n\t\t\tparams[i].Items = nil\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %v, got %v\", test.Params, params)\n\t\t}\n\t}\n}\n\nfunc TestMessageToQueryParametersWithEnumFieldOption(t *testing.T) {\n\ttype test struct {\n\t\tMsgDescs []*descriptorpb.DescriptorProto\n\t\tMessage  string\n\t\tParams   []openapiParameterObject\n\t}\n\n\tfieldSchema := &openapi_options.JSONSchema{Enum: []string{\"enum1\", \"enum2\"}}\n\tfieldOption := &descriptorpb.FieldOptions{}\n\tproto.SetExtension(fieldOption, openapi_options.E_Openapiv2Field, fieldSchema)\n\n\ttests := []test{\n\t\t{\n\t\t\tMsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"a\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(1),\n\t\t\t\t\t\t\tOptions: fieldOption,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"b\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"c\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.ExampleMessage.EnabledEnum\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"d\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.ExampleMessage.EnabledEnum\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(4),\n\t\t\t\t\t\t\tOptions:  fieldOption,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tEnumType: []*descriptorpb.EnumDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: proto.String(\"EnabledEnum\"),\n\t\t\t\t\t\t\tValue: []*descriptorpb.EnumValueDescriptorProto{\n\t\t\t\t\t\t\t\t{Name: proto.String(\"FALSE\"), Number: proto.Int32(0)},\n\t\t\t\t\t\t\t\t{Name: proto.String(\"TRUE\"), Number: proto.Int32(1)},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessage: \"ExampleMessage\",\n\t\t\tParams: []openapiParameterObject{\n\t\t\t\t{\n\t\t\t\t\tName: \"a\",\n\t\t\t\t\tIn:   \"query\",\n\t\t\t\t\tType: \"string\",\n\t\t\t\t\tEnum: []string{\"enum1\", \"enum2\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"b\",\n\t\t\t\t\tIn:   \"query\",\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:    \"c\",\n\t\t\t\t\tIn:      \"query\",\n\t\t\t\t\tType:    \"string\",\n\t\t\t\t\tEnum:    []string{\"FALSE\", \"TRUE\"},\n\t\t\t\t\tDefault: \"FALSE\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:    \"d\",\n\t\t\t\t\tIn:      \"query\",\n\t\t\t\t\tType:    \"string\",\n\t\t\t\t\tEnum:    []string{\"FALSE\", \"TRUE\"},\n\t\t\t\t\tDefault: \"FALSE\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\tmsgs := []*descriptor.Message{}\n\t\tfor _, msgdesc := range test.MsgDescs {\n\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t}\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tDependency:     []string{},\n\t\t\t\tMessageType:    test.MsgDescs,\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: msgs,\n\t\t}\n\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t}\n\n\t\tmessage, err := reg.LookupMsg(\"\", \".example.\"+test.Message)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to lookup message: %s\", err)\n\t\t}\n\t\tparams, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil, \"\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to convert message to query parameters: %s\", err)\n\t\t}\n\t\t// avoid checking Items for array types\n\t\tfor i := range params {\n\t\t\tparams[i].Items = nil\n\t\t}\n\t\tif !reflect.DeepEqual(params, test.Params) {\n\t\t\tt.Errorf(\"expected %v, got %v\", test.Params, params)\n\t\t}\n\t}\n}\n\nfunc TestApplyTemplateSimple(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew22): Figure out what this should really be\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tif want, is, name := \"2.0\", result.Swagger, \"Swagger\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := \"\", result.BasePath, \"BasePath\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := ([]string)(nil), result.Schemes, \"Schemes\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := []string{\"application/json\"}, result.Consumes, \"Consumes\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := []string{\"application/json\"}, result.Produces, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateMultiService(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\n\t// Create two services that have the same method name. We will test that the\n\t// operation IDs are different\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tsvc2 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"OtherService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc2,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/ping\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\t// Check that the two services have unique operation IDs even though they\n\t// have the same method name.\n\tif want, is := \"ExampleService_Example\", result.getPathItemObject(\"/v1/echo\").Get.OperationID; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).Paths[0].Get.OperationID = %s want to be %s\", file, is, want)\n\t}\n\tif want, is := \"OtherService_Example\", result.getPathItemObject(\"/v1/ping\").Get.OperationID; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).Paths[0].Get.OperationID = %s want to be %s\", file, is, want)\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateOpenAPIConfigFromYAML(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew22): Figure out what this should really be\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\topenapiOptions := &openapiconfig.OpenAPIOptions{\n\t\tService: []*openapiconfig.OpenAPIServiceOption{\n\t\t\t{\n\t\t\t\tService: \"example.ExampleService\",\n\t\t\t\tOption: &openapi_options.Tag{\n\t\t\t\t\tDescription: \"ExampleService description\",\n\t\t\t\t\tExternalDocs: &openapi_options.ExternalDocumentation{\n\t\t\t\t\t\tDescription: \"Find out more about ExampleService\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif err := reg.RegisterOpenAPIOptions(openapiOptions); err != nil {\n\t\tt.Errorf(\"reg.RegisterOpenAPIOptions for Service %#v failed with %v; want success\", openapiOptions.Service, err)\n\t\treturn\n\t}\n\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tif want, is, name := \"ExampleService description\", result.Tags[0].Description, \"Tags[0].Description\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := \"Find out more about ExampleService\", result.Tags[0].ExternalDocs.Description, \"Tags[0].ExternalDocs.Description\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\n\treg.SetDisableServiceTags(true)\n\n\tres, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\tif got, want := len(res.Tags), 0; got != want {\n\t\tt.Fatalf(\"len(applyTemplate(%#v).Tags) = %d want to be %d\", file, got, want)\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateOverrideWithOperation(t *testing.T) {\n\tnewFile := func() *descriptor.File {\n\t\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t}\n\t\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\t\tName:       proto.String(\"Example\"),\n\t\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t\t\tOptions:    &descriptorpb.MethodOptions{},\n\t\t}\n\t\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t\t}\n\t\tmsg := &descriptor.Message{\n\t\t\tDescriptorProto: msgdesc,\n\t\t}\n\t\treturn &descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{msg},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew22): Figure out what this should really be\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\tverifyTemplateFromReq := func(t *testing.T, reg *descriptor.Registry, file *descriptor.File, opts *openapiconfig.OpenAPIOptions) {\n\t\tif err := AddErrorDefs(reg); err != nil {\n\t\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\t\treturn\n\t\t}\n\t\tfileCL := crossLinkFixture(file)\n\t\terr := reg.Load(reqFromFile(fileCL))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", *file, err)\n\t\t\treturn\n\t\t}\n\t\tif opts != nil {\n\t\t\tif err := reg.RegisterOpenAPIOptions(opts); err != nil {\n\t\t\t\tt.Fatalf(\"failed to register OpenAPI options: %s\", err)\n\t\t\t}\n\t\t}\n\t\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\t\tif err != nil {\n\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", *file, err)\n\t\t\treturn\n\t\t}\n\n\t\tif want, is := \"MyExample\", result.getPathItemObject(\"/v1/echo\").Get.OperationID; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).Paths[0].Get.OperationID = %s want to be %s\", *file, is, want)\n\t\t}\n\t\tif want, is := []string{\"application/xml\"}, result.getPathItemObject(\"/v1/echo\").Get.Consumes; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).Paths[0].Get.Consumes = %s want to be %s\", *file, is, want)\n\t\t}\n\t\tif want, is := []string{\"application/json\", \"application/xml\"}, result.getPathItemObject(\"/v1/echo\").Get.Produces; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).Paths[0].Get.Produces = %s want to be %s\", *file, is, want)\n\t\t}\n\n\t\t// If there was a failure, print out the input and the json result for debugging.\n\t\tif t.Failed() {\n\t\t\tt.Errorf(\"had: %s\", *file)\n\t\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t\t}\n\t}\n\n\topenapiOperation := openapi_options.Operation{\n\t\tOperationId: \"MyExample\",\n\t\tConsumes:    []string{\"application/xml\"},\n\t\tProduces:    []string{\"application/json\", \"application/xml\"},\n\t}\n\n\tt.Run(\"verify override via method option\", func(t *testing.T) {\n\t\tfile := newFile()\n\t\tproto.SetExtension(proto.Message(file.Services[0].Methods[0].MethodDescriptorProto.Options),\n\t\t\topenapi_options.E_Openapiv2Operation, &openapiOperation)\n\n\t\treg := descriptor.NewRegistry()\n\t\tverifyTemplateFromReq(t, reg, file, nil)\n\t})\n\n\tt.Run(\"verify override options annotations\", func(t *testing.T) {\n\t\tfile := newFile()\n\t\treg := descriptor.NewRegistry()\n\t\topts := &openapiconfig.OpenAPIOptions{\n\t\t\tMethod: []*openapiconfig.OpenAPIMethodOption{\n\t\t\t\t{\n\t\t\t\t\tMethod: \"example.ExampleService.Example\",\n\t\t\t\t\tOption: &openapiOperation,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tverifyTemplateFromReq(t, reg, file, opts)\n\t})\n}\n\nfunc TestApplyTemplateExtensions(t *testing.T) {\n\tnewFile := func() *descriptor.File {\n\t\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t}\n\t\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\t\tName:       proto.String(\"Example\"),\n\t\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t\t\tOptions:    &descriptorpb.MethodOptions{},\n\t\t}\n\t\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t\t}\n\t\tmsg := &descriptor.Message{\n\t\t\tDescriptorProto: msgdesc,\n\t\t}\n\t\treturn &descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{msg},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew22): Figure out what this should really be\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\tswagger := openapi_options.Swagger{\n\t\tInfo: &openapi_options.Info{\n\t\t\tTitle: \"test\",\n\t\t\tExtensions: map[string]*structpb.Value{\n\t\t\t\t\"x-info-extension\": {Kind: &structpb.Value_StringValue{StringValue: \"bar\"}},\n\t\t\t},\n\t\t},\n\t\tExtensions: map[string]*structpb.Value{\n\t\t\t\"x-foo\": {Kind: &structpb.Value_StringValue{StringValue: \"bar\"}},\n\t\t\t\"x-bar\": {Kind: &structpb.Value_ListValue{ListValue: &structpb.ListValue{\n\t\t\t\tValues: []*structpb.Value{{Kind: &structpb.Value_StringValue{StringValue: \"baz\"}}},\n\t\t\t}}},\n\t\t},\n\t\tSecurityDefinitions: &openapi_options.SecurityDefinitions{\n\t\t\tSecurity: map[string]*openapi_options.SecurityScheme{\n\t\t\t\t\"somescheme\": {\n\t\t\t\t\tExtensions: map[string]*structpb.Value{\n\t\t\t\t\t\t\"x-security-baz\": {Kind: &structpb.Value_BoolValue{BoolValue: true}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tTags: []*openapi_options.Tag{\n\t\t\t{\n\t\t\t\tName:        \"test tag\",\n\t\t\t\tDescription: \"test tag description\",\n\t\t\t\tExtensions: map[string]*structpb.Value{\n\t\t\t\t\t\"x-traitTag\": {Kind: &structpb.Value_BoolValue{BoolValue: true}},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\topenapiOperation := openapi_options.Operation{\n\t\tResponses: map[string]*openapi_options.Response{\n\t\t\t\"200\": {\n\t\t\t\tExtensions: map[string]*structpb.Value{\n\t\t\t\t\t\"x-resp-id\": {Kind: &structpb.Value_StringValue{StringValue: \"resp1000\"}},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tExtensions: map[string]*structpb.Value{\n\t\t\t\"x-op-foo\": {Kind: &structpb.Value_StringValue{StringValue: \"baz\"}},\n\t\t},\n\t}\n\tverifyTemplateExtensions := func(t *testing.T, reg *descriptor.Registry, file *descriptor.File,\n\t\topts *openapiconfig.OpenAPIOptions,\n\t) {\n\t\tif err := AddErrorDefs(reg); err != nil {\n\t\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\t\treturn\n\t\t}\n\t\tfileCL := crossLinkFixture(file)\n\t\terr := reg.Load(reqFromFile(fileCL))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\t\tif opts != nil {\n\t\t\tif err := reg.RegisterOpenAPIOptions(opts); err != nil {\n\t\t\t\tt.Fatalf(\"failed to register OpenAPI annotations: %s\", err)\n\t\t\t}\n\t\t}\n\t\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\t\tif err != nil {\n\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\t\tif want, is, name := \"2.0\", result.Swagger, \"Swagger\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\t\tif got, want := len(result.extensions), 2; got != want {\n\t\t\tt.Fatalf(\"len(applyTemplate(%#v).Extensions) = %d want to be %d\", file, got, want)\n\t\t}\n\t\tif got, want := result.extensions[0].key, \"x-bar\"; got != want {\n\t\t\tt.Errorf(\"applyTemplate(%#v).Extensions[0].key = %s want to be %s\", file, got, want)\n\t\t}\n\t\tif got, want := result.extensions[1].key, \"x-foo\"; got != want {\n\t\t\tt.Errorf(\"applyTemplate(%#v).Extensions[1].key = %s want to be %s\", file, got, want)\n\t\t}\n\t\t{\n\t\t\tvar got []string\n\t\t\terr = marshaler.Unmarshal(result.extensions[0].value, &got)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"marshaler.Unmarshal failed: %v\", err)\n\t\t\t}\n\t\t\twant := []string{\"baz\"}\n\t\t\tif diff := cmp.Diff(got, want); diff != \"\" {\n\t\t\t\tt.Error(diff)\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tvar got string\n\t\t\terr = marshaler.Unmarshal(result.extensions[1].value, &got)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"marshaler.Unmarshal failed: %v\", err)\n\t\t\t}\n\t\t\twant := \"bar\"\n\t\t\tif diff := cmp.Diff(got, want); diff != \"\" {\n\t\t\t\tt.Error(diff)\n\t\t\t}\n\t\t}\n\n\t\tvar scheme openapiSecuritySchemeObject\n\t\tfor _, v := range result.SecurityDefinitions {\n\t\t\tscheme = v\n\t\t}\n\t\tif want, is, name := []extension{\n\t\t\t{key: \"x-security-baz\", value: json.RawMessage(\"true\")},\n\t\t}, scheme.extensions, \"SecurityScheme.Extensions\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\n\t\tif want, is, name := []extension{\n\t\t\t{key: \"x-info-extension\", value: json.RawMessage(\"\\\"bar\\\"\")},\n\t\t}, result.Info.extensions, \"Info.Extensions\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\n\t\tvar operation *openapiOperationObject\n\t\tvar response openapiResponseObject\n\t\tfor _, v := range result.Paths {\n\t\t\toperation = v.PathItemObject.Get\n\t\t\tresponse = v.PathItemObject.Get.Responses[\"200\"]\n\t\t}\n\t\tif want, is, name := []extension{\n\t\t\t{key: \"x-op-foo\", value: json.RawMessage(\"\\\"baz\\\"\")},\n\t\t}, operation.extensions, \"operation.Extensions\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\t\tif want, is, name := []extension{\n\t\t\t{key: \"x-resp-id\", value: json.RawMessage(\"\\\"resp1000\\\"\")},\n\t\t}, response.extensions, \"response.Extensions\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\n\t\tif len(result.Tags) == 0 {\n\t\t\tt.Errorf(\"No tags found in result\")\n\t\t\treturn\n\t\t}\n\t\ttag := result.Tags[0]\n\t\tif want, is, name := []extension{\n\t\t\t{key: \"x-traitTag\", value: json.RawMessage(\"true\")},\n\t\t}, tag.extensions, \"Tags[0].Extensions\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\t}\n\tt.Run(\"verify template options set via proto options\", func(t *testing.T) {\n\t\tfile := newFile()\n\t\tproto.SetExtension(proto.Message(file.FileDescriptorProto.Options), openapi_options.E_Openapiv2Swagger, &swagger)\n\t\tproto.SetExtension(proto.Message(file.Services[0].Methods[0].Options), openapi_options.E_Openapiv2Operation, &openapiOperation)\n\t\treg := descriptor.NewRegistry()\n\t\tverifyTemplateExtensions(t, reg, file, nil)\n\t})\n\tt.Run(\"verify template options set via annotations\", func(t *testing.T) {\n\t\tfile := newFile()\n\t\topts := &openapiconfig.OpenAPIOptions{\n\t\t\tFile: []*openapiconfig.OpenAPIFileOption{\n\t\t\t\t{\n\t\t\t\t\tFile:   \"example.proto\",\n\t\t\t\t\tOption: &swagger,\n\t\t\t\t},\n\t\t\t},\n\t\t\tMethod: []*openapiconfig.OpenAPIMethodOption{\n\t\t\t\t{\n\t\t\t\t\tMethod: \"example.ExampleService.Example\",\n\t\t\t\t\tOption: &openapiOperation,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\treg := descriptor.NewRegistry()\n\t\tverifyTemplateExtensions(t, reg, file, opts)\n\t})\n}\n\nfunc TestApplyTemplateHeaders(t *testing.T) {\n\tnewFile := func() *descriptor.File {\n\t\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t}\n\t\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\t\tName:       proto.String(\"Example\"),\n\t\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t\t\tOptions:    &descriptorpb.MethodOptions{},\n\t\t}\n\t\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t\t}\n\t\tmsg := &descriptor.Message{\n\t\t\tDescriptorProto: msgdesc,\n\t\t}\n\t\treturn &descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{msg},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew22): Figure out what this should really be\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\topenapiOperation := openapi_options.Operation{\n\t\tResponses: map[string]*openapi_options.Response{\n\t\t\t\"200\": {\n\t\t\t\tDescription: \"Testing Headers\",\n\t\t\t\tHeaders: map[string]*openapi_options.Header{\n\t\t\t\t\t\"string\": {\n\t\t\t\t\t\tDescription: \"string header description\",\n\t\t\t\t\t\tType:        \"string\",\n\t\t\t\t\t\tFormat:      \"uuid\",\n\t\t\t\t\t\tPattern:     \"\",\n\t\t\t\t\t},\n\t\t\t\t\t\"boolean\": {\n\t\t\t\t\t\tDescription: \"boolean header description\",\n\t\t\t\t\t\tType:        \"boolean\",\n\t\t\t\t\t\tDefault:     \"true\",\n\t\t\t\t\t\tPattern:     \"^true|false$\",\n\t\t\t\t\t},\n\t\t\t\t\t\"integer\": {\n\t\t\t\t\t\tDescription: \"integer header description\",\n\t\t\t\t\t\tType:        \"integer\",\n\t\t\t\t\t\tDefault:     \"0\",\n\t\t\t\t\t\tPattern:     \"^[0-9]$\",\n\t\t\t\t\t},\n\t\t\t\t\t\"number\": {\n\t\t\t\t\t\tDescription: \"number header description\",\n\t\t\t\t\t\tType:        \"number\",\n\t\t\t\t\t\tDefault:     \"1.2\",\n\t\t\t\t\t\tPattern:     \"^[-+]?[0-9]*\\\\.?[0-9]+([eE][-+]?[0-9]+)?$\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tverifyTemplateHeaders := func(t *testing.T, reg *descriptor.Registry, file *descriptor.File,\n\t\topts *openapiconfig.OpenAPIOptions,\n\t) {\n\t\tif err := AddErrorDefs(reg); err != nil {\n\t\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\t\treturn\n\t\t}\n\t\tfileCL := crossLinkFixture(file)\n\t\terr := reg.Load(reqFromFile(fileCL))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\t\tif opts != nil {\n\t\t\tif err := reg.RegisterOpenAPIOptions(opts); err != nil {\n\t\t\t\tt.Fatalf(\"failed to register OpenAPI annotations: %s\", err)\n\t\t\t}\n\t\t}\n\t\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\t\tif err != nil {\n\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\treturn\n\t\t}\n\t\tif want, is, name := \"2.0\", result.Swagger, \"Swagger\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\n\t\tvar response openapiResponseObject\n\t\tfor _, v := range result.Paths {\n\t\t\tresponse = v.PathItemObject.Get.Responses[\"200\"]\n\t\t}\n\t\tif want, is, name := []openapiHeadersObject{\n\t\t\t{\n\t\t\t\t\"String\": openapiHeaderObject{\n\t\t\t\t\tDescription: \"string header description\",\n\t\t\t\t\tType:        \"string\",\n\t\t\t\t\tFormat:      \"uuid\",\n\t\t\t\t\tPattern:     \"\",\n\t\t\t\t},\n\t\t\t\t\"Boolean\": openapiHeaderObject{\n\t\t\t\t\tDescription: \"boolean header description\",\n\t\t\t\t\tType:        \"boolean\",\n\t\t\t\t\tDefault:     RawExample(\"true\"),\n\t\t\t\t\tPattern:     \"^true|false$\",\n\t\t\t\t},\n\t\t\t\t\"Integer\": openapiHeaderObject{\n\t\t\t\t\tDescription: \"integer header description\",\n\t\t\t\t\tType:        \"integer\",\n\t\t\t\t\tDefault:     RawExample(\"0\"),\n\t\t\t\t\tPattern:     \"^[0-9]$\",\n\t\t\t\t},\n\t\t\t\t\"Number\": openapiHeaderObject{\n\t\t\t\t\tDescription: \"number header description\",\n\t\t\t\t\tType:        \"number\",\n\t\t\t\t\tDefault:     RawExample(\"1.2\"),\n\t\t\t\t\tPattern:     \"^[-+]?[0-9]*\\\\.?[0-9]+([eE][-+]?[0-9]+)?$\",\n\t\t\t\t},\n\t\t\t},\n\t\t}[0], response.Headers, \"response.Headers\"; !reflect.DeepEqual(is, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t\t}\n\t}\n\tt.Run(\"verify template options set via proto options\", func(t *testing.T) {\n\t\tfile := newFile()\n\t\tproto.SetExtension(proto.Message(file.Services[0].Methods[0].Options), openapi_options.E_Openapiv2Operation, &openapiOperation)\n\t\treg := descriptor.NewRegistry()\n\t\tverifyTemplateHeaders(t, reg, file, nil)\n\t})\n}\n\nfunc TestValidateHeaderType(t *testing.T) {\n\ttype test struct {\n\t\tType          string\n\t\tFormat        string\n\t\texpectedError error\n\t}\n\ttests := []test{\n\t\t{\n\t\t\t\"string\",\n\t\t\t\"date-time\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"boolean\",\n\t\t\t\"\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"uint\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"uint8\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"uint16\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"uint32\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"uint64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"int\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"int8\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"int16\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"int32\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"int64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"float64\",\n\t\t\terrors.New(\"the provided format \\\"float64\\\" is not a valid extension of the type \\\"integer\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"uuid\",\n\t\t\terrors.New(\"the provided format \\\"uuid\\\" is not a valid extension of the type \\\"integer\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"uint\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"uint8\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"uint16\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"uint32\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"uint64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"int\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"int8\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"int16\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"int32\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"int64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"float\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"float32\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"float64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"complex64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"complex128\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"double\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"byte\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"rune\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"uintptr\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"date\",\n\t\t\terrors.New(\"the provided format \\\"date\\\" is not a valid extension of the type \\\"number\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"array\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided header type \\\"array\\\" is not supported\"),\n\t\t},\n\t\t{\n\t\t\t\"foo\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided header type \\\"foo\\\" is not supported\"),\n\t\t},\n\t}\n\tfor _, v := range tests {\n\t\terr := validateHeaderTypeAndFormat(v.Type, v.Format)\n\n\t\tif v.expectedError == nil {\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"unexpected error %v\", err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err == nil {\n\t\t\t\tt.Fatal(\"expected header error not returned\")\n\t\t\t}\n\t\t\tif err.Error() != v.expectedError.Error() {\n\t\t\t\tt.Errorf(\"expected error malformed, expected %q, got %q\", v.expectedError.Error(), err.Error())\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestValidateDefaultValueType(t *testing.T) {\n\ttype test struct {\n\t\tType          string\n\t\tValue         string\n\t\tFormat        string\n\t\texpectedError error\n\t}\n\ttests := []test{\n\t\t{\n\t\t\t\"string\",\n\t\t\t`\"string\"`,\n\t\t\t\"\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"string\",\n\t\t\t\"\\\"2012-11-01T22:08:41+00:00\\\"\",\n\t\t\t\"date-time\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"string\",\n\t\t\t\"\\\"2012-11-01\\\"\",\n\t\t\t\"date\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"string\",\n\t\t\t\"0\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"0\\\" does not match provider type \\\"string\\\", or is not properly quoted with escaped quotations\"),\n\t\t},\n\t\t{\n\t\t\t\"string\",\n\t\t\t\"false\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"false\\\" does not match provider type \\\"string\\\", or is not properly quoted with escaped quotations\"),\n\t\t},\n\t\t{\n\t\t\t\"boolean\",\n\t\t\t\"true\",\n\t\t\t\"\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"boolean\",\n\t\t\t\"0\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"0\\\" does not match provider type \\\"boolean\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"boolean\",\n\t\t\t`\"string\"`,\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"\\\\\\\"string\\\\\\\"\\\" does not match provider type \\\"boolean\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"1.2\",\n\t\t\t\"\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"123\",\n\t\t\t\"\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"nan\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided number \\\"nan\\\" is not a valid JSON number\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"NaN\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided number \\\"NaN\\\" is not a valid JSON number\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"-459.67\",\n\t\t\t\"\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"inf\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided number \\\"inf\\\" is not a valid JSON number\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"infinity\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided number \\\"infinity\\\" is not a valid JSON number\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"Inf\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided number \\\"Inf\\\" is not a valid JSON number\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"Infinity\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided number \\\"Infinity\\\" is not a valid JSON number\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t\"false\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"false\\\" does not match provider type \\\"number\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"number\",\n\t\t\t`\"string\"`,\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"\\\\\\\"string\\\\\\\"\\\" does not match provider type \\\"number\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"2\",\n\t\t\t\"\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\tfmt.Sprint(math.MaxInt32),\n\t\t\t\"int32\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\tfmt.Sprint(int64(math.MaxInt32) + 1),\n\t\t\t\"int32\",\n\t\t\terrors.New(\"the provided default value \\\"2147483648\\\" does not match provided format \\\"int32\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\tfmt.Sprint(int64(math.MaxInt64)),\n\t\t\t\"int64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"9223372036854775808\",\n\t\t\t\"int64\",\n\t\t\terrors.New(\"the provided default value \\\"9223372036854775808\\\" does not match provided format \\\"int64\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"18446744073709551615\",\n\t\t\t\"uint64\",\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"false\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"false\\\" does not match provided type \\\"integer\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t\"1.2\",\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"1.2\\\" does not match provided type \\\"integer\\\"\"),\n\t\t},\n\t\t{\n\t\t\t\"integer\",\n\t\t\t`\"string\"`,\n\t\t\t\"\",\n\t\t\terrors.New(\"the provided default value \\\"\\\\\\\"string\\\\\\\"\\\" does not match provided type \\\"integer\\\"\"),\n\t\t},\n\t}\n\tfor _, v := range tests {\n\t\terr := validateDefaultValueTypeAndFormat(v.Type, v.Value, v.Format)\n\n\t\tif v.expectedError == nil {\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"unexpected error '%v'\", err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err == nil {\n\t\t\t\tt.Error(\"expected update error not returned\")\n\t\t\t}\n\t\t\tif err.Error() != v.expectedError.Error() {\n\t\t\t\tt.Errorf(\"expected error malformed, expected %q, got %q\", v.expectedError.Error(), err.Error())\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\"NestedMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tnesteddesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestedMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"int32\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"bool\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Echo\"),\n\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\tOutputType:      proto.String(\"ExampleMessage\"),\n\t\tClientStreaming: proto.Bool(false),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tmeth.ServerStreaming = proto.Bool(false)\n\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tnested := &descriptor.Message{\n\t\tDescriptorProto: nesteddesc,\n\t}\n\n\tnestedField := &descriptor.Field{\n\t\tMessage:              msg,\n\t\tFieldDescriptorProto: msg.GetField()[0],\n\t}\n\tintField := &descriptor.Field{\n\t\tMessage:              nested,\n\t\tFieldDescriptorProto: nested.GetField()[0],\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc, nesteddesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg, nested},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew): Figure out what this should really be\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"int32\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfmt.Fprintln(os.Stderr, \"fd\", file.FileDescriptorProto)\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t}\n\tfmt.Fprintln(os.Stderr, \"AllFQMNs\", reg.GetAllFQMNs())\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tif want, got := \"2.0\", result.Swagger; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).Swagger = %s want to be %s\", file, got, want)\n\t}\n\tif want, got := \"\", result.BasePath; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).BasePath = %s want to be %s\", file, got, want)\n\t}\n\tif want, got := ([]string)(nil), result.Schemes; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).Schemes = %s want to be %s\", file, got, want)\n\t}\n\tif want, got := []string{\"application/json\"}, result.Consumes; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).Consumes = %s want to be %s\", file, got, want)\n\t}\n\tif want, got := []string{\"application/json\"}, result.Produces; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).Produces = %s want to be %s\", file, got, want)\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateRequestWithClientStreaming(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\"NestedMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tnesteddesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestedMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"int32\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"bool\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Echo\"),\n\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\tOutputType:      proto.String(\"ExampleMessage\"),\n\t\tClientStreaming: proto.Bool(true),\n\t\tServerStreaming: proto.Bool(true),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tnested := &descriptor.Message{\n\t\tDescriptorProto: nesteddesc,\n\t}\n\n\tnestedField := &descriptor.Field{\n\t\tMessage:              msg,\n\t\tFieldDescriptorProto: msg.GetField()[0],\n\t}\n\tintField := &descriptor.Field{\n\t\tMessage:              nested,\n\t\tFieldDescriptorProto: nested.GetField()[0],\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc, nesteddesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg, nested},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew): Figure out what this should really be\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"int32\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\t// Only ExampleMessage must be present, not NestedMessage\n\tif want, got, name := 3, len(result.Definitions), \"len(Definitions)\"; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", file, name, got, want)\n\t}\n\tif _, ok := result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"]; !ok {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = expected 200 response to be defined\", file, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"]`)\n\t} else {\n\t\tif want, got, name := \"A successful response.(streaming responses)\", result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Description, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Description`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tstreamExampleExampleMessage := result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema\n\t\tif want, got, name := \"object\", streamExampleExampleMessage.Type, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema.Type`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tif want, got, name := \"Stream result of exampleExampleMessage\", streamExampleExampleMessage.Title, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema.Title`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tstreamExampleExampleMessageProperties := *(streamExampleExampleMessage.Properties)\n\t\tif want, got, name := 2, len(streamExampleExampleMessageProperties), `len(StreamDefinitions[\"exampleExampleMessage\"].Properties)`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", file, name, got, want)\n\t\t} else {\n\t\t\tresultProperty := streamExampleExampleMessageProperties[0]\n\t\t\tif want, got, name := \"result\", resultProperty.Key, `(*(StreamDefinitions[\"exampleExampleMessage\"].Properties))[0].Key`; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t\t}\n\t\t\tresult := resultProperty.Value.(openapiSchemaObject)\n\t\t\tif want, got, name := \"#/definitions/exampleExampleMessage\", result.Ref, `((*(StreamDefinitions[\"exampleExampleMessage\"].Properties))[0].Value.(openapiSchemaObject)).Ref`; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t\t}\n\t\t\terrorProperty := streamExampleExampleMessageProperties[1]\n\t\t\tif want, got, name := \"error\", errorProperty.Key, `(*(StreamDefinitions[\"exampleExampleMessage\"].Properties))[0].Key`; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t\t}\n\t\t\terr := errorProperty.Value.(openapiSchemaObject)\n\t\t\tif want, got, name := \"#/definitions/rpcStatus\", err.Ref, `((*(StreamDefinitions[\"exampleExampleMessage\"].Properties))[0].Value.(openapiSchemaObject)).Ref`; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t\t}\n\t\t}\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateRequestWithServerStreamingAndNoStandardErrors(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\"NestedMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tnesteddesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestedMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"int32\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"bool\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Echo\"),\n\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\tOutputType:      proto.String(\"ExampleMessage\"),\n\t\tClientStreaming: proto.Bool(false),\n\t\tServerStreaming: proto.Bool(true),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\tnested := &descriptor.Message{\n\t\tDescriptorProto: nesteddesc,\n\t}\n\n\tnestedField := &descriptor.Field{\n\t\tMessage:              msg,\n\t\tFieldDescriptorProto: msg.GetField()[0],\n\t}\n\tintField := &descriptor.Field{\n\t\tMessage:              nested,\n\t\tFieldDescriptorProto: nested.GetField()[0],\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc, nesteddesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg, nested},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"int32\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: intField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"nested\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: nestedField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t}\n\treg.SetDisableDefaultErrors(true)\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\t// Should only include the message, no status or any type\n\tif want, got, name := 1, len(result.Definitions), \"len(Definitions)\"; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", file, name, got, want)\n\t}\n\tif _, ok := result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"]; !ok {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = expected 200 response to be defined\", file, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"]`)\n\t} else {\n\t\tif want, got, name := \"A successful response.(streaming responses)\", result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Description, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Description`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tstreamExampleExampleMessage := result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema\n\t\tif want, got, name := \"object\", streamExampleExampleMessage.Type, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema.Type`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tif want, got, name := \"Stream result of exampleExampleMessage\", streamExampleExampleMessage.Title, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema.Title`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tstreamExampleExampleMessageProperties := *(streamExampleExampleMessage.Properties)\n\t\tif want, got, name := 1, len(streamExampleExampleMessageProperties), `len(StreamDefinitions[\"exampleExampleMessage\"].Properties)`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", file, name, got, want)\n\t\t} else {\n\t\t\tresultProperty := streamExampleExampleMessageProperties[0]\n\t\t\tif want, got, name := \"result\", resultProperty.Key, `(*(StreamDefinitions[\"exampleExampleMessage\"].Properties))[0].Key`; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t\t}\n\t\t\tresult := resultProperty.Value.(openapiSchemaObject)\n\t\t\tif want, got, name := \"#/definitions/exampleExampleMessage\", result.Ref, `((*(StreamDefinitions[\"exampleExampleMessage\"].Properties))[0].Value.(openapiSchemaObject)).Ref`; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t\t}\n\t\t}\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateRequestWithUnusedReferences(t *testing.T) {\n\treqdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"string\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\trespdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"EmptyMessage\"),\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Example\"),\n\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\tOutputType:      proto.String(\"EmptyMessage\"),\n\t\tClientStreaming: proto.Bool(false),\n\t\tServerStreaming: proto.Bool(false),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\treq := &descriptor.Message{\n\t\tDescriptorProto: reqdesc,\n\t}\n\tresp := &descriptor.Message{\n\t\tDescriptorProto: respdesc,\n\t}\n\tstringField := &descriptor.Field{\n\t\tMessage:              req,\n\t\tFieldDescriptorProto: req.GetField()[0],\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqdesc, respdesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{req, resp},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           req,\n\t\t\t\t\t\tResponseType:          resp,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/example\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/example/{string}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: stringField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: stringField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"string\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: stringField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\t// Only EmptyMessage must be present, not ExampleMessage (plus error status)\n\tif want, got, name := 3, len(result.Definitions), \"len(Definitions)\"; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", file, name, got, want)\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) {\n\tbookDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Book\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"id\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tcreateDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"CreateBookRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"parent\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"book\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"book_id\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(3),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"CreateBook\"),\n\t\tInputType:  proto.String(\"CreateBookRequest\"),\n\t\tOutputType: proto.String(\"Book\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"BookService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tbookMsg := &descriptor.Message{\n\t\tDescriptorProto: bookDesc,\n\t}\n\tcreateMsg := &descriptor.Message{\n\t\tDescriptorProto: createDesc,\n\t}\n\n\tparentField := &descriptor.Field{\n\t\tMessage:              createMsg,\n\t\tFieldDescriptorProto: createMsg.GetField()[0],\n\t}\n\tbookField := &descriptor.Field{\n\t\tMessage:              createMsg,\n\t\tFieldMessage:         bookMsg,\n\t\tFieldDescriptorProto: createMsg.GetField()[1],\n\t}\n\tbookIDField := &descriptor.Field{\n\t\tMessage:              createMsg,\n\t\tFieldDescriptorProto: createMsg.GetField()[2],\n\t}\n\n\tcreateMsg.Fields = []*descriptor.Field{parentField, bookField, bookIDField}\n\n\tnewFile := func() descriptor.File {\n\t\treturn descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"book.proto\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{bookDesc, createDesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/book.pb\",\n\t\t\t\tName: \"book_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{bookMsg, createMsg},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           createMsg,\n\t\t\t\t\t\t\tResponseType:          bookMsg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{parent=publishers/*}/books\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName:   \"parent\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tTarget: parentField,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\tTarget: parentField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\t\tFieldPath: []descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"book\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: bookField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\ttype args struct {\n\t\tfile descriptor.File\n\t}\n\ttype paramOut struct {\n\t\tName     string\n\t\tIn       string\n\t\tRequired bool\n\t}\n\ttests := []struct {\n\t\tname string\n\t\targs args\n\t\twant []paramOut\n\t}{\n\t\t{\n\t\t\tname: \"book_in_body\",\n\t\t\targs: args{file: newFile()},\n\t\t\twant: []paramOut{\n\t\t\t\t{\"parent\", \"path\", true},\n\t\t\t\t{\"book\", \"body\", true},\n\t\t\t\t{\"book_id\", \"query\", false},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"book_in_query\",\n\t\t\targs: args{file: func() descriptor.File {\n\t\t\t\tf := newFile()\n\t\t\t\tf.Services[0].Methods[0].Bindings[0].Body = nil\n\t\t\t\treturn f\n\t\t\t}()},\n\t\t\twant: []paramOut{\n\t\t\t\t{\"parent\", \"path\", true},\n\t\t\t\t{\"book\", \"query\", false},\n\t\t\t\t{\"book_id\", \"query\", false},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\ttt := tt\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\treg := descriptor.NewRegistry()\n\t\t\tif err := AddErrorDefs(reg); err != nil {\n\t\t\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{tt.args.file.FileDescriptorProto}})\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"Registry.Load() failed with %v; want success\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresult, err := applyTemplate(param{File: crossLinkFixture(&tt.args.file), reg: reg})\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", tt.args.file, err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif _, ok := result.getPathItemObject(\"/v1/{parent}/books\").Post.Responses[\"200\"]; !ok {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = expected 200 response to be defined\", tt.args.file, `result.getPathItemObject(\"/v1/{parent}/books\").Post.Responses[\"200\"]`)\n\t\t\t} else {\n\n\t\t\t\tif want, got, name := 3, len(result.getPathItemObject(\"/v1/{parent}/books\").Post.Parameters), `len(result.getPathItemObject(\"/v1/{parent}/books\").Post.Parameters)`; !reflect.DeepEqual(got, want) {\n\t\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", tt.args.file, name, got, want)\n\t\t\t\t}\n\n\t\t\t\tfor i, want := range tt.want {\n\t\t\t\t\tp := result.getPathItemObject(\"/v1/{parent}/books\").Post.Parameters[i]\n\t\t\t\t\tif got, name := (paramOut{p.Name, p.In, p.Required}), `result.getPathItemObject(\"/v1/{parent}/books\").Post.Parameters[0]`; !reflect.DeepEqual(got, want) {\n\t\t\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %v want to be %v\", tt.args.file, name, got, want)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// If there was a failure, print out the input and the json result for debugging.\n\t\t\tif t.Failed() {\n\t\t\t\tt.Errorf(\"had: %s\", tt.args.file)\n\t\t\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestApplyTemplateWithRequestAndBodyParameters(t *testing.T) {\n\tbookDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Book\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"id\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tcreateDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"CreateBookRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"parent\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"book\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"book_id\"),\n\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_REQUIRED.Enum(),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(3),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"CreateBook\"),\n\t\tInputType:  proto.String(\"CreateBookRequest\"),\n\t\tOutputType: proto.String(\"Book\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"BookService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tbookMsg := &descriptor.Message{\n\t\tDescriptorProto: bookDesc,\n\t}\n\tcreateMsg := &descriptor.Message{\n\t\tDescriptorProto: createDesc,\n\t}\n\n\tparentField := &descriptor.Field{\n\t\tMessage:              createMsg,\n\t\tFieldDescriptorProto: createMsg.GetField()[0],\n\t}\n\tbookField := &descriptor.Field{\n\t\tMessage:              createMsg,\n\t\tFieldMessage:         bookMsg,\n\t\tFieldDescriptorProto: createMsg.GetField()[1],\n\t}\n\tbookIDField := &descriptor.Field{\n\t\tMessage:              createMsg,\n\t\tFieldDescriptorProto: createMsg.GetField()[2],\n\t}\n\n\tcreateMsg.Fields = []*descriptor.Field{parentField, bookField, bookIDField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"book.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{bookDesc, createDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/book.pb\",\n\t\t\tName: \"book_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{bookMsg, createMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           createMsg,\n\t\t\t\t\t\tResponseType:          bookMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{parent=publishers/*}/books\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName:   \"parent\",\n\t\t\t\t\t\t\t\t\t\t\t\tTarget: parentField,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: parentField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: []descriptor.FieldPathComponent{},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tif want, is, name := \"2.0\", result.Swagger, \"Swagger\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := \"\", result.BasePath, \"BasePath\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := ([]string)(nil), result.Schemes, \"Schemes\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := []string{\"application/json\"}, result.Consumes, \"Consumes\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := []string{\"application/json\"}, result.Produces, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\n\tif want, is, name := 1, len(result.Paths), \"len(result.Paths)\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"%s = %d want to be %d\", name, want, is)\n\t}\n\tif want, is, name := 4, len(result.Paths[0].PathItemObject.Post.Parameters), \"len(result.Paths[0].PathItemObject.Post.Parameters)\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"%s = %d want to be %d\", name, want, is)\n\t}\n\tif want, is, name := \"#/definitions/BookServiceCreateBookBody\", result.Paths[0].PathItemObject.Post.Parameters[1].Schema.schemaCore.Ref, \"result.Paths[0].PathItemObject.Post.Parameters[1].Schema.schemaCore.Ref\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"%s = %s want to be %s\", name, want, is)\n\t}\n\n\t_, found := result.Definitions[\"BookServiceCreateBookBody\"]\n\tif !found {\n\t\tt.Error(\"expecting definition to contain BookServiceCreateBookBody\")\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\n// TestApplyTemplateProtobufAny tests that the protobufAny definition is correctly rendered with the @type field and\n// allowing additional properties.\nfunc TestApplyTemplateProtobufAny(t *testing.T) {\n\t// checkProtobufAnyFormat verifies the only property should be @type and additional properties are allowed\n\tcheckProtobufAnyFormat := func(t *testing.T, protobufAny openapiSchemaObject) {\n\t\tanyPropsJSON, err := protobufAny.Properties.MarshalJSON()\n\t\tif err != nil {\n\t\t\tt.Errorf(\"protobufAny.Properties.MarshalJSON(), got error = %v\", err)\n\t\t}\n\t\tvar anyPropsMap map[string]interface{}\n\t\tif err := json.Unmarshal(anyPropsJSON, &anyPropsMap); err != nil {\n\t\t\tt.Errorf(\"json.Unmarshal(), got error = %v\", err)\n\t\t}\n\n\t\t// @type should exist\n\t\tif _, ok := anyPropsMap[\"@type\"]; !ok {\n\t\t\tt.Errorf(\"protobufAny.Properties missing key, \\\"@type\\\". got = %#v\", anyPropsMap)\n\t\t}\n\n\t\t// and @type should be the only property\n\t\tif len(anyPropsMap) > 1 {\n\t\t\tt.Errorf(\"len(protobufAny.Properties) = %v, want = %v\", len(anyPropsMap), 1)\n\t\t}\n\n\t\t// protobufAny should have additionalProperties allowed\n\t\tif protobufAny.AdditionalProperties == nil {\n\t\t\tt.Errorf(\"protobufAny.AdditionalProperties = nil, want not-nil\")\n\t\t}\n\t}\n\n\ttype args struct {\n\t\tregConfig      func(registry *descriptor.Registry)\n\t\tmsgContainsAny bool\n\t}\n\ttests := []struct {\n\t\tname               string\n\t\targs               args\n\t\twantNumDefinitions int\n\t}{\n\t\t{\n\t\t\t// our proto schema doesn't directly use protobufAny, but it is implicitly used by rpcStatus being\n\t\t\t// automatically rendered\n\t\t\tname: \"default_protobufAny_from_rpcStatus\",\n\t\t\targs: args{\n\t\t\t\tmsgContainsAny: false,\n\t\t\t},\n\t\t\twantNumDefinitions: 4,\n\t\t},\n\t\t{\n\t\t\t// we have a protobufAny in a message, it should contain a ref inside the custom message\n\t\t\tname: \"protobufAny_referenced_in_message\",\n\t\t\targs: args{\n\t\t\t\tmsgContainsAny: true,\n\t\t\t},\n\t\t\twantNumDefinitions: 4,\n\t\t},\n\t\t{\n\t\t\t// we have a protobufAny in a message but with automatic rendering of rpcStatus disabled\n\t\t\tname: \"protobufAny_referenced_in_message_with_default_errors_disabled\",\n\t\t\targs: args{\n\t\t\t\tmsgContainsAny: true,\n\t\t\t\tregConfig: func(reg *descriptor.Registry) {\n\t\t\t\t\treg.SetDisableDefaultErrors(true)\n\t\t\t\t},\n\t\t\t},\n\t\t\twantNumDefinitions: 3,\n\t\t},\n\t\t{\n\t\t\t// we have a protobufAny in a message but with automatic rendering of responses disabled\n\t\t\tname: \"protobufAny_referenced_in_message_with_default_responses_disabled\",\n\t\t\targs: args{\n\t\t\t\tmsgContainsAny: true,\n\t\t\t\tregConfig: func(reg *descriptor.Registry) {\n\t\t\t\t\treg.SetDisableDefaultResponses(true)\n\t\t\t\t},\n\t\t\t},\n\t\t\twantNumDefinitions: 4,\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\treqdesc := &descriptorpb.DescriptorProto{\n\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\trespdesc := &descriptorpb.DescriptorProto{\n\t\t\t\tName: proto.String(\"EmptyMessage\"),\n\t\t\t}\n\t\t\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\t\t\tName:            proto.String(\"Example\"),\n\t\t\t\tInputType:       proto.String(\"ExampleMessage\"),\n\t\t\t\tOutputType:      proto.String(\"EmptyMessage\"),\n\t\t\t\tClientStreaming: proto.Bool(false),\n\t\t\t\tServerStreaming: proto.Bool(false),\n\t\t\t}\n\t\t\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t\t\t}\n\n\t\t\treq := &descriptor.Message{\n\t\t\t\tDescriptorProto: reqdesc,\n\t\t\t}\n\t\t\tresp := &descriptor.Message{\n\t\t\t\tDescriptorProto: respdesc,\n\t\t\t}\n\t\t\tfile := descriptor.File{\n\t\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqdesc, respdesc},\n\t\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\t\tName: \"example_pb\",\n\t\t\t\t},\n\t\t\t\tMessages: []*descriptor.Message{req, resp},\n\t\t\t\tServices: []*descriptor.Service{\n\t\t\t\t\t{\n\t\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\t\tRequestType:           req,\n\t\t\t\t\t\t\t\tResponseType:          resp,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\n\t\t\treg := descriptor.NewRegistry()\n\t\t\treg.SetGenerateUnboundMethods(true)\n\n\t\t\tif tt.args.regConfig != nil {\n\t\t\t\ttt.args.regConfig(reg)\n\t\t\t}\n\n\t\t\tif err := AddErrorDefs(reg); err != nil {\n\t\t\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tprotoFiles := []*descriptorpb.FileDescriptorProto{\n\t\t\t\tfile.FileDescriptorProto,\n\t\t\t}\n\n\t\t\tif tt.args.msgContainsAny {\n\t\t\t\t// add an Any field to the request message\n\t\t\t\treqdesc.Field = append(reqdesc.Field, &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"any_value\"),\n\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Any\"),\n\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t})\n\n\t\t\t\t// update the dependencies to import it\n\t\t\t\tfile.Dependency = append(file.Dependency, \"google/protobuf/any.proto\")\n\n\t\t\t\tanyDescriptorProto := protodesc.ToFileDescriptorProto((&anypb.Any{}).ProtoReflect().Descriptor().ParentFile())\n\t\t\t\tanyDescriptorProto.SourceCodeInfo = &descriptorpb.SourceCodeInfo{}\n\n\t\t\t\t// prepend the anyDescriptorProto to the protoFiles slice so that the dependency can be resolved\n\t\t\t\tprotoFiles = append(append(make([]*descriptorpb.FileDescriptorProto, 0, len(protoFiles)+1), anyDescriptorProto), protoFiles[0:]...)\n\t\t\t}\n\n\t\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\t\tProtoFile:      protoFiles,\n\t\t\t\tFileToGenerate: []string{file.GetName()},\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t\t}\n\n\t\t\ttarget, err := reg.LookupFile(file.GetName())\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to lookup file from reg: %v\", err)\n\t\t\t}\n\t\t\tresult, err := applyTemplate(param{File: crossLinkFixture(target), reg: reg})\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif want, got, name := tt.wantNumDefinitions, len(result.Definitions), \"len(Definitions)\"; !reflect.DeepEqual(got, want) {\n\t\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", file, name, got, want)\n\t\t\t}\n\n\t\t\tprotobufAny, ok := result.Definitions[\"protobufAny\"]\n\t\t\tif !ok {\n\t\t\t\tt.Error(\"expecting Definitions to contain protobufAny\")\n\t\t\t}\n\n\t\t\tcheckProtobufAnyFormat(t, protobufAny)\n\n\t\t\t// If there was a failure, print out the input and the json result for debugging.\n\t\t\tif t.Failed() {\n\t\t\t\tt.Errorf(\"had: %s\", file)\n\t\t\t\tresultJSON, _ := json.Marshal(result)\n\t\t\t\tt.Errorf(\"got: %s\", resultJSON)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc generateFieldsForJSONReservedName() []*descriptor.Field {\n\tfields := make([]*descriptor.Field, 0)\n\tfieldName := \"json_name\"\n\tfieldJSONName := \"jsonNAME\"\n\tfieldDescriptor := descriptorpb.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName}\n\tfield := &descriptor.Field{FieldDescriptorProto: &fieldDescriptor}\n\treturn append(fields, field)\n}\n\nfunc generateMsgsForJSONReservedName() []*descriptor.Message {\n\tresult := make([]*descriptor.Message, 0)\n\t// The first message, its field is field_abc and its type is NewType\n\t// NewType field_abc\n\tfieldName := \"field_abc\"\n\tfieldJSONName := \"fieldAbc\"\n\tmessageName1 := \"message1\"\n\tmessageType := \"pkg.a.NewType\"\n\tpfd := descriptorpb.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName, TypeName: &messageType}\n\tresult = append(result,\n\t\t&descriptor.Message{\n\t\t\tDescriptorProto: &descriptorpb.DescriptorProto{\n\t\t\t\tName: &messageName1, Field: []*descriptorpb.FieldDescriptorProto{&pfd},\n\t\t\t},\n\t\t})\n\t// The second message, its name is NewName, its type is string\n\t// message NewType {\n\t//    string field_newName [json_name = RESERVEDJSONNAME]\n\t// }\n\tmessageName := \"NewType\"\n\tfield := \"field_newName\"\n\tfieldJSONName2 := \"RESERVEDJSONNAME\"\n\tpfd2 := descriptorpb.FieldDescriptorProto{Name: &field, JsonName: &fieldJSONName2}\n\tresult = append(result, &descriptor.Message{\n\t\tDescriptorProto: &descriptorpb.DescriptorProto{\n\t\t\tName: &messageName, Field: []*descriptorpb.FieldDescriptorProto{&pfd2},\n\t\t},\n\t})\n\treturn result\n}\n\nfunc TestTemplateWithJsonCamelCase(t *testing.T) {\n\ttests := []struct {\n\t\tinput    string\n\t\texpected string\n\t}{\n\t\t{\"/test/{test_id}\", \"/test/{testId}\"},\n\t\t{\"/test1/{test1_id}/test2/{test2_id}\", \"/test1/{test1Id}/test2/{test2Id}\"},\n\t\t{\"/test1/{test1_id}/{test2_id}\", \"/test1/{test1Id}/{test2Id}\"},\n\t\t{\"/test1/test2/{test1_id}/{test2_id}\", \"/test1/test2/{test1Id}/{test2Id}\"},\n\t\t{\"/test1/{test1_id1_id2}\", \"/test1/{test1Id1Id2}\"},\n\t\t{\"/test1/{test1_id1_id2}/test2/{test2_id3_id4}\", \"/test1/{test1Id1Id2}/test2/{test2Id3Id4}\"},\n\t\t{\"/test1/test2/{test1_id1_id2}/{test2_id3_id4}\", \"/test1/test2/{test1Id1Id2}/{test2Id3Id4}\"},\n\t\t{\"test/{a}\", \"test/{a}\"},\n\t\t{\"test/{ab}\", \"test/{ab}\"},\n\t\t{\"test/{a_a}\", \"test/{aA}\"},\n\t\t{\"test/{ab_c}\", \"test/{abC}\"},\n\t\t{\"test/{json_name}\", \"test/{jsonNAME}\"},\n\t\t{\"test/{field_abc.field_newName}\", \"test/{fieldAbc.RESERVEDJSONNAME}\"},\n\t\t{\"/item/search:item/{item_no_query}\", \"/item/search:item/{itemNoQuery}\"},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\tfor _, data := range tests {\n\t\tactual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\tif data.expected != actual {\n\t\t\tt.Errorf(\"Expected templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expected, actual)\n\t\t}\n\t}\n}\n\nfunc TestTemplateWithoutJsonCamelCase(t *testing.T) {\n\ttests := []struct {\n\t\tinput    string\n\t\texpected string\n\t}{\n\t\t{\"/test/{test_id}\", \"/test/{test_id}\"},\n\t\t{\"/test1/{test1_id}/test2/{test2_id}\", \"/test1/{test1_id}/test2/{test2_id}\"},\n\t\t{\"/test1/{test1_id}/{test2_id}\", \"/test1/{test1_id}/{test2_id}\"},\n\t\t{\"/test1/test2/{test1_id}/{test2_id}\", \"/test1/test2/{test1_id}/{test2_id}\"},\n\t\t{\"/test1/{test1_id1_id2}\", \"/test1/{test1_id1_id2}\"},\n\t\t{\"/test1/{test1_id1_id2}/test2/{test2_id3_id4}\", \"/test1/{test1_id1_id2}/test2/{test2_id3_id4}\"},\n\t\t{\"/test1/test2/{test1_id1_id2}/{test2_id3_id4}\", \"/test1/test2/{test1_id1_id2}/{test2_id3_id4}\"},\n\t\t{\"test/{a}\", \"test/{a}\"},\n\t\t{\"test/{ab}\", \"test/{ab}\"},\n\t\t{\"test/{a_a}\", \"test/{a_a}\"},\n\t\t{\"test/{json_name}\", \"test/{json_name}\"},\n\t\t{\"test/{field_abc.field_newName}\", \"test/{field_abc.field_newName}\"},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(false)\n\tfor _, data := range tests {\n\t\tactual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\tif data.expected != actual {\n\t\t\tt.Errorf(\"Expected templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expected, actual)\n\t\t}\n\t}\n}\n\nfunc TestTemplateToOpenAPIPath(t *testing.T) {\n\ttests := []struct {\n\t\tinput    string\n\t\texpected string\n\t}{\n\t\t{\"/test\", \"/test\"},\n\t\t{\"/{test}\", \"/{test}\"},\n\t\t{\"/{test=prefix/*}\", \"/{test}\"},\n\t\t{\"/{test=prefix/that/has/multiple/parts/to/it/*}\", \"/{test}\"},\n\t\t{\"/{test1}/{test2}\", \"/{test1}/{test2}\"},\n\t\t{\"/{test1}/{test2}/\", \"/{test1}/{test2}/\"},\n\t\t{\"/{name=prefix/*}\", \"/{name}\"},\n\t\t{\"/{name=prefix1/*/prefix2/*}\", \"/{name}\"},\n\t\t{\"/{user.name=prefix/*}\", \"/{user.name}\"},\n\t\t{\"/{user.name=prefix1/*/prefix2/*}\", \"/{user.name}\"},\n\t\t{\"/{parent=prefix/*}/children\", \"/{parent}/children\"},\n\t\t{\"/{name=prefix/*}:customMethod\", \"/{name}:customMethod\"},\n\t\t{\"/{name=prefix1/*/prefix2/*}:customMethod\", \"/{name}:customMethod\"},\n\t\t{\"/{user.name=prefix/*}:customMethod\", \"/{user.name}:customMethod\"},\n\t\t{\"/{user.name=prefix1/*/prefix2/*}:customMethod\", \"/{user.name}:customMethod\"},\n\t\t{\"/{parent=prefix/*}/children:customMethod\", \"/{parent}/children:customMethod\"},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(false)\n\tfor _, data := range tests {\n\t\tactual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\tif data.expected != actual {\n\t\t\tt.Errorf(\"Expected templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expected, actual)\n\t\t}\n\t}\n\treg.SetUseJSONNamesForFields(true)\n\tfor _, data := range tests {\n\t\tactual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\tif data.expected != actual {\n\t\t\tt.Errorf(\"Expected templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expected, actual)\n\t\t}\n\t}\n}\n\nfunc getParameters(names []string) []descriptor.Parameter {\n\tparams := make([]descriptor.Parameter, 0)\n\tfor _, name := range names {\n\t\tparams = append(params, descriptor.Parameter{\n\t\t\tTarget: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName: proto.String(name),\n\t\t\t\t\tType: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t},\n\t\t\t\tMessage: &descriptor.Message{\n\t\t\t\t\tFile: &descriptor.File{\n\t\t\t\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{},\n\t\t\t\t\t},\n\t\t\t\t\tDescriptorProto: &descriptorpb.DescriptorProto{\n\t\t\t\t\t\tName: proto.String(\"\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tFieldMessage:      nil,\n\t\t\t\tForcePrefixedName: false,\n\t\t\t},\n\t\t\tFieldPath: []descriptor.FieldPathComponent{{\n\t\t\t\tName:   name,\n\t\t\t\tTarget: nil,\n\t\t\t}},\n\t\t\tMethod: nil,\n\t\t})\n\t}\n\treturn params\n}\n\nfunc TestTemplateToOpenAPIPathExpandSlashed(t *testing.T) {\n\ttests := []struct {\n\t\tinput              string\n\t\texpected           string\n\t\tpathParams         []descriptor.Parameter\n\t\texpectedPathParams []string\n\t\tuseJSONNames       bool\n\t}{\n\t\t{\"/v1/{name=projects/*/documents/*}:exportResults\", \"/v1/projects/{project}/documents/{document}:exportResults\", getParameters([]string{\"name\"}), []string{\"project\", \"document\"}, true},\n\t\t{\"/test/{name=*}\", \"/test/{name}\", getParameters([]string{\"name\"}), []string{\"name\"}, true},\n\t\t{\"/test/{name=*}/\", \"/test/{name}/\", getParameters([]string{\"name\"}), []string{\"name\"}, true},\n\t\t{\"/test/{name=test_cases/*}/\", \"/test/test_cases/{testCase}/\", getParameters([]string{\"name\"}), []string{\"testCase\"}, true},\n\t\t{\"/test/{name=test_cases/*}/\", \"/test/test_cases/{test_case}/\", getParameters([]string{\"name\"}), []string{\"test_case\"}, false},\n\t\t{\"/test/{name=test-cases/*}/\", \"/test/test-cases/{test-case}/\", getParameters([]string{\"name\"}), []string{\"test-case\"}, false},\n\t\t{\"/test/{test_type.name=test_cases/*}/\", \"/test/test_cases/{testCase}/\", getParameters([]string{\"test_type.name\"}), []string{\"testCase\"}, true},\n\t\t{\"/test/{test_type.name=test_cases/*}/\", \"/test/test_cases/{test_case}/\", getParameters([]string{\"test_type.name\"}), []string{\"test_case\"}, false},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetExpandSlashedPathPatterns(true)\n\tfor _, data := range tests {\n\t\treg.SetUseJSONNamesForFields(data.useJSONNames)\n\t\tactualParts, actualParams := templateToExpandedPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), data.pathParams)\n\t\tif data.expected != actualParts {\n\t\t\tt.Errorf(\"Expected templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expected, actualParts)\n\t\t}\n\t\tpathParamsNames := make([]string, 0)\n\t\tfor _, param := range actualParams {\n\t\t\tpathParamsNames = append(pathParamsNames, param.FieldPath[0].Name)\n\t\t}\n\t\tif !reflect.DeepEqual(data.expectedPathParams, pathParamsNames) {\n\t\t\tt.Errorf(\"Expected mutated path params in templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expectedPathParams, data.pathParams)\n\t\t}\n\t}\n}\n\nfunc TestExpandedPathParametersStringType(t *testing.T) {\n\ttests := []struct {\n\t\tinput string\n\t}{\n\t\t{\"/test/{name=test_cases/*}/\"}, {\"/v1/{name=projects/*/documents/*}:exportResults\"},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetExpandSlashedPathPatterns(true)\n\texpectedParamType := openapiSchemaObject{\n\t\tschemaCore: schemaCore{\n\t\t\tType: \"string\",\n\t\t},\n\t}\n\tfor _, data := range tests {\n\t\t_, actualParams := templateToExpandedPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), getParameters([]string{\"name\"}))\n\t\tfor _, param := range actualParams {\n\t\t\trefs := make(refMap)\n\t\t\tactualParamType := schemaOfField(param.Target, reg, refs)\n\t\t\tif !reflect.DeepEqual(actualParamType, expectedParamType) {\n\t\t\t\tt.Errorf(\"Expected all path parameters to be type of 'string', actual: %#+v\", actualParamType)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc BenchmarkTemplateToOpenAPIPath(b *testing.B) {\n\tconst input = \"/{user.name=prefix1/*/prefix2/*}:customMethod\"\n\n\tb.Run(\"with JSON names\", func(b *testing.B) {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetUseJSONNamesForFields(false)\n\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\t_ = templateToOpenAPIPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\t}\n\t})\n\n\tb.Run(\"without JSON names\", func(b *testing.B) {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetUseJSONNamesForFields(true)\n\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\t_ = templateToOpenAPIPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\t}\n\t})\n}\n\nfunc TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) {\n\ttests := []struct {\n\t\tinput          string\n\t\toutput         string\n\t\tlistOfFQMNs    []string\n\t\tnamingStrategy string\n\t}{\n\t\t{\n\t\t\t\".a.b.C\",\n\t\t\t\"C\",\n\t\t\t[]string{\n\t\t\t\t\".a.b.C\",\n\t\t\t},\n\t\t\t\"legacy\",\n\t\t},\n\t\t{\n\t\t\t\".a.b.C\",\n\t\t\t\"C\",\n\t\t\t[]string{\n\t\t\t\t\".a.b.C\",\n\t\t\t},\n\t\t\t\"simple\",\n\t\t},\n\t\t{\n\t\t\t\".a.b.C\",\n\t\t\t\"aBC\",\n\t\t\t[]string{\n\t\t\t\t\".a.C\",\n\t\t\t\t\".a.b.C\",\n\t\t\t},\n\t\t\t\"legacy\",\n\t\t},\n\t\t{\n\t\t\t\".a.b.C\",\n\t\t\t\"b.C\",\n\t\t\t[]string{\n\t\t\t\t\".a.C\",\n\t\t\t\t\".a.b.C\",\n\t\t\t},\n\t\t\t\"simple\",\n\t\t},\n\t\t{\n\t\t\t\".a.b.C\",\n\t\t\t\"aBC\",\n\t\t\t[]string{\n\t\t\t\t\".C\",\n\t\t\t\t\".a.C\",\n\t\t\t\t\".a.b.C\",\n\t\t\t},\n\t\t\t\"legacy\",\n\t\t},\n\t\t{\n\t\t\t\".a.b.C\",\n\t\t\t\"b.C\",\n\t\t\t[]string{\n\t\t\t\t\".C\",\n\t\t\t\t\".a.C\",\n\t\t\t\t\".a.b.C\",\n\t\t\t},\n\t\t\t\"simple\",\n\t\t},\n\t\t{\n\t\t\t\".a.b.C\",\n\t\t\t\"a.b.C\",\n\t\t\t[]string{\n\t\t\t\t\".C\",\n\t\t\t\t\".a.C\",\n\t\t\t\t\".a.b.C\",\n\t\t\t},\n\t\t\t\"fqn\",\n\t\t},\n\t}\n\n\tfor _, data := range tests {\n\t\tnames := resolveFullyQualifiedNameToOpenAPINames(data.listOfFQMNs, data.namingStrategy)\n\t\toutput := names[data.input]\n\t\tif output != data.output {\n\t\t\tt.Errorf(\"Expected fullyQualifiedNameToOpenAPIName(%v, %s) to be %s but got %s\",\n\t\t\t\tdata.input, data.namingStrategy, data.output, output)\n\t\t}\n\t}\n}\n\nfunc templateToOpenAPIPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message, pathParamNames map[string]string) string {\n\treturn partsToOpenAPIPath(templateToParts(path, reg, fields, msgs), pathParamNames)\n}\n\nfunc templateToRegexpMap(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) map[string]string {\n\treturn partsToRegexpMap(templateToParts(path, reg, fields, msgs))\n}\n\nfunc templateToExpandedPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message, pathParams []descriptor.Parameter) (string, []descriptor.Parameter) {\n\tpathParts, pathParams := expandPathPatterns(templateToParts(path, reg, fields, msgs), pathParams, reg)\n\treturn partsToOpenAPIPath(pathParts, make(map[string]string)), pathParams\n}\n\nfunc TestFQMNToRegexpMap(t *testing.T) {\n\ttests := []struct {\n\t\tinput    string\n\t\texpected map[string]string\n\t}{\n\t\t{\"/test\", map[string]string{}},\n\t\t{\"/{test}\", map[string]string{}},\n\t\t{\"/{test\" + pathParamUniqueSuffixDeliminator + \"1=prefix/*}\", map[string]string{\"test\" + pathParamUniqueSuffixDeliminator + \"1\": \"prefix/[^/]+\"}},\n\t\t{\"/{test=prefix/that/has/multiple/parts/to/it/**}\", map[string]string{\"test\": \"prefix/that/has/multiple/parts/to/it/.+\"}},\n\t\t{\"/{test1=organizations/*}/{test2=divisions/*}\", map[string]string{\n\t\t\t\"test1\": \"organizations/[^/]+\",\n\t\t\t\"test2\": \"divisions/[^/]+\",\n\t\t}},\n\t\t{\"/v1/{name=projects/*/topics/*}:delete\", map[string]string{\"name\": \"projects/[^/]+/topics/[^/]+\"}},\n\t}\n\treg := descriptor.NewRegistry()\n\tfor _, data := range tests {\n\t\tactual := templateToRegexpMap(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName())\n\t\tif !reflect.DeepEqual(data.expected, actual) {\n\t\t\tt.Errorf(\"Expected partsToRegexpMap(%v) = %v, actual: %v\", data.input, data.expected, actual)\n\t\t}\n\t}\n}\n\nfunc TestFQMNtoOpenAPIName(t *testing.T) {\n\ttests := []struct {\n\t\tinput    string\n\t\texpected string\n\t}{\n\t\t{\"/test\", \"/test\"},\n\t\t{\"/{test}\", \"/{test}\"},\n\t\t{\"/{test=prefix/*}\", \"/{test}\"},\n\t\t{\"/{test=prefix/that/has/multiple/parts/to/it/*}\", \"/{test}\"},\n\t\t{\"/{test1}/{test2}\", \"/{test1}/{test2}\"},\n\t\t{\"/{test1}/{test2}/\", \"/{test1}/{test2}/\"},\n\t\t{\"/v1/{name=tests/*}/tests\", \"/v1/{name}/tests\"},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(false)\n\tfor _, data := range tests {\n\t\tactual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\tif data.expected != actual {\n\t\t\tt.Errorf(\"Expected templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expected, actual)\n\t\t}\n\t}\n\treg.SetUseJSONNamesForFields(true)\n\tfor _, data := range tests {\n\t\tactual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string))\n\t\tif data.expected != actual {\n\t\t\tt.Errorf(\"Expected templateToOpenAPIPath(%v) = %v, actual: %v\", data.input, data.expected, actual)\n\t\t}\n\t}\n}\n\nfunc TestSchemaOfField(t *testing.T) {\n\ttype test struct {\n\t\tfield                 *descriptor.Field\n\t\trefs                  refMap\n\t\texpected              openapiSchemaObject\n\t\topenAPIOptions        *openapiconfig.OpenAPIOptions\n\t\tuseJSONNamesForFields bool\n\t}\n\n\tjsonSchema := &openapi_options.JSONSchema{\n\t\tTitle:       \"field title\",\n\t\tDescription: \"field description\",\n\t}\n\tjsonSchemaWithOptions := &openapi_options.JSONSchema{\n\t\tTitle:            \"field title\",\n\t\tDescription:      \"field description\",\n\t\tMultipleOf:       100,\n\t\tMaximum:          101,\n\t\tExclusiveMaximum: true,\n\t\tMinimum:          1,\n\t\tExclusiveMinimum: true,\n\t\tMaxLength:        10,\n\t\tMinLength:        3,\n\t\tPattern:          \"[a-z]+\",\n\t\tMaxItems:         20,\n\t\tMinItems:         2,\n\t\tUniqueItems:      true,\n\t\tMaxProperties:    33,\n\t\tMinProperties:    22,\n\t\tRequired:         []string{\"req\"},\n\t\tReadOnly:         true,\n\t}\n\tjsonSchemaRequired := &openapi_options.JSONSchema{\n\t\tRequired: []string{\"required_via_json_schema\"},\n\t}\n\tjsonSchemaWithFormat := &openapi_options.JSONSchema{\n\t\tFormat: \"uuid\",\n\t}\n\n\tfieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(fieldOptions, openapi_options.E_Openapiv2Field, jsonSchema)\n\n\trequiredField := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, requiredField)\n\n\toutputOnlyField := []annotations.FieldBehavior{annotations.FieldBehavior_OUTPUT_ONLY}\n\toutputOnlyOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(outputOnlyOptions, annotations.E_FieldBehavior, outputOnlyField)\n\n\ttests := []test{\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName: proto.String(\"primitive_field\"),\n\t\t\t\t\tType: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:  proto.String(\"repeated_primitive_field\"),\n\t\t\t\t\tType:  descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\tLabel: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"empty_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Empty\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"object\",\n\t\t\t\t},\n\t\t\t\tProperties: &openapiSchemaObjectProperties{},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.FieldMask\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Timestamp\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"string\",\n\t\t\t\t\tFormat: \"date-time\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Duration\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.StringValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"repeated_wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.StringValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.BytesValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"string\",\n\t\t\t\t\tFormat: \"byte\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Int32Value\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"integer\",\n\t\t\t\t\tFormat: \"int32\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.UInt32Value\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"integer\",\n\t\t\t\t\tFormat: \"int64\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Int64Value\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"string\",\n\t\t\t\t\tFormat: \"int64\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.UInt64Value\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"string\",\n\t\t\t\t\tFormat: \"uint64\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.FloatValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"number\",\n\t\t\t\t\tFormat: \"float\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.DoubleValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"number\",\n\t\t\t\t\tFormat: \"double\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.BoolValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"boolean\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Struct\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"object\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.Value\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.ListValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{schemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"wrapped_field\"),\n\t\t\t\t\tTypeName: proto.String(\".google.protobuf.NullValue\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"message_field\"),\n\t\t\t\t\tTypeName: proto.String(\".example.Message\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: refMap{\".example.Message\": struct{}{}},\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tRef: \"#/definitions/exampleMessage\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"map_field\"),\n\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\tTypeName: proto.String(\".example.Message.MapFieldEntry\"),\n\t\t\t\t\tOptions:  fieldOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"object\",\n\t\t\t\t},\n\t\t\t\tAdditionalProperties: &openapiSchemaObject{\n\t\t\t\t\tschemaCore: schemaCore{Type: \"string\"},\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:    proto.String(\"array_field\"),\n\t\t\t\t\tLabel:   descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\tOptions: fieldOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{schemaCore: schemaCore{\n\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:    proto.String(\"primitive_field\"),\n\t\t\t\t\tLabel:   descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\t\tOptions: fieldOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"integer\",\n\t\t\t\t\tFormat: \"int32\",\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"message_field\"),\n\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\tTypeName: proto.String(\".example.Empty\"),\n\t\t\t\t\tOptions:  fieldOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: refMap{\".example.Empty\": struct{}{}},\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tRef: \"#/definitions/exampleEmpty\",\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"map_field\"), // should be called map_field_option but it's not valid map field name\n\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\tTypeName: proto.String(\".example.Message.MapFieldEntry\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.map_field\",\n\t\t\t\t\t\tOption: jsonSchema,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"object\",\n\t\t\t\t},\n\t\t\t\tAdditionalProperties: &openapiSchemaObject{\n\t\t\t\t\tschemaCore: schemaCore{Type: \"string\"},\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:  proto.String(\"array_field_option\"),\n\t\t\t\t\tLabel: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\tType:  descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.array_field_option\",\n\t\t\t\t\t\tOption: jsonSchema,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{schemaCore: schemaCore{\n\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:  proto.String(\"primitive_field_option\"),\n\t\t\t\t\tLabel: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\tType:  descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.primitive_field_option\",\n\t\t\t\t\t\tOption: jsonSchema,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"integer\",\n\t\t\t\t\tFormat: \"int32\",\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:  proto.String(\"primitive_field_option\"),\n\t\t\t\t\tLabel: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\tType:  descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum().Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField: \"example.Message.primitive_field_option\",\n\t\t\t\t\t\tOption: &openapi_options.JSONSchema{\n\t\t\t\t\t\t\tTitle:       \"field title\",\n\t\t\t\t\t\t\tDescription: \"field description\",\n\t\t\t\t\t\t\tFormat:      \"uuid\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType:   \"string\",\n\t\t\t\t\tFormat: \"uuid\",\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"message_field_option\"),\n\t\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\tTypeName: proto.String(\".example.Empty\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.message_field_option\",\n\t\t\t\t\t\tOption: jsonSchema,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: refMap{\".example.Empty\": struct{}{}},\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tRef: \"#/definitions/exampleEmpty\",\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:    proto.String(\"required_via_field_behavior_field\"),\n\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t\tRequired: []string{\"required_via_field_behavior_field\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:    proto.String(\"readonly_via_field_behavior_field\"),\n\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\tOptions: outputOnlyOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t\tReadOnly: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"required_message_field\"),\n\t\t\t\t\tTypeName: proto.String(\".example.Message\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\tOptions:  requiredFieldOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: refMap{\".example.Message\": struct{}{}},\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tRef: \"#/definitions/exampleMessage\",\n\t\t\t\t},\n\t\t\t\tRequired: []string{\"required_message_field\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:  proto.String(\"array_field_option\"),\n\t\t\t\t\tLabel: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\tType:  descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.array_field_option\",\n\t\t\t\t\t\tOption: jsonSchemaWithOptions,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMultipleOf:       100,\n\t\t\t\t\t\tMaximum:          101,\n\t\t\t\t\t\tExclusiveMaximum: true,\n\t\t\t\t\t\tMinimum:          1,\n\t\t\t\t\t\tExclusiveMinimum: true,\n\t\t\t\t\t\tMaxLength:        10,\n\t\t\t\t\t\tMinLength:        3,\n\t\t\t\t\t\tPattern:          \"[a-z]+\",\n\t\t\t\t\t\tMaxProperties:    33,\n\t\t\t\t\t\tMinProperties:    22,\n\t\t\t\t\t\tRequired:         []string{\"req\"},\n\t\t\t\t\t\tReadOnly:         true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t\tUniqueItems: true,\n\t\t\t\tMaxItems:    20,\n\t\t\t\tMinItems:    2,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:  proto.String(\"array_field_option\"),\n\t\t\t\t\tLabel: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\tType:  descriptorpb.FieldDescriptorProto_TYPE_INT64.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.array_field_option\",\n\t\t\t\t\t\tOption: jsonSchemaWithOptions,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType:   \"string\",\n\t\t\t\t\t\t\tFormat: \"int64\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMultipleOf:       100,\n\t\t\t\t\t\tMaximum:          101,\n\t\t\t\t\t\tExclusiveMaximum: true,\n\t\t\t\t\t\tMinimum:          1,\n\t\t\t\t\t\tExclusiveMinimum: true,\n\t\t\t\t\t\tMaxLength:        10,\n\t\t\t\t\t\tMinLength:        3,\n\t\t\t\t\t\tPattern:          \"[a-z]+\",\n\t\t\t\t\t\tMaxProperties:    33,\n\t\t\t\t\t\tMinProperties:    22,\n\t\t\t\t\t\tRequired:         []string{\"req\"},\n\t\t\t\t\t\tReadOnly:         true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTitle:       \"field title\",\n\t\t\t\tDescription: \"field description\",\n\t\t\t\tUniqueItems: true,\n\t\t\t\tMaxItems:    20,\n\t\t\t\tMinItems:    2,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:  proto.String(\"array_field_format\"),\n\t\t\t\t\tLabel: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\t\tType:  descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.array_field_format\",\n\t\t\t\t\t\tOption: jsonSchemaWithFormat,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"array\",\n\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType:   \"string\",\n\t\t\t\t\t\t\tFormat: \"uuid\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"required_via_field_behavior_field_json_name\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\tJsonName: proto.String(\"required_field_custom_name\"),\n\t\t\t\t\tOptions:  requiredFieldOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs: make(refMap),\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t\tRequired: []string{\"required_field_custom_name\"},\n\t\t\t},\n\t\t\tuseJSONNamesForFields: true,\n\t\t},\n\t\t{\n\t\t\tfield: &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\t\t\t\tName:     proto.String(\"required_via_json_schema\"),\n\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\tJsonName: proto.String(\"required_via_json_schema_json_name\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField:  \"example.Message.required_via_json_schema\",\n\t\t\t\t\t\tOption: jsonSchemaRequired,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trefs:                  make(refMap),\n\t\t\tuseJSONNamesForFields: true,\n\t\t\texpected: openapiSchemaObject{\n\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t\tRequired: []string{\"required_via_json_schema_json_name\"},\n\t\t\t},\n\t\t},\n\t}\n\tfor _, test := range tests {\n\t\treg := descriptor.NewRegistry()\n\t\treg.SetUseJSONNamesForFields(test.useJSONNamesForFields)\n\n\t\treq := &pluginpb.CodeGeneratorRequest{\n\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName:    proto.String(\"third_party/google.proto\"),\n\t\t\t\t\tPackage: proto.String(\"google.protobuf\"),\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"third_party/google\"),\n\t\t\t\t\t},\n\t\t\t\t\tMessageType: []*descriptorpb.DescriptorProto{\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&emptypb.Empty{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&structpb.Struct{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&structpb.Value{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&structpb.ListValue{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&field_mask.FieldMask{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&timestamppb.Timestamp{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&durationpb.Duration{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.StringValue{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.BytesValue{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.Int32Value{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.UInt32Value{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.Int64Value{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.UInt64Value{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.FloatValue{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.DoubleValue{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t\tprotodesc.ToDescriptorProto((&wrapperspb.BoolValue{}).ProtoReflect().Descriptor()),\n\t\t\t\t\t},\n\t\t\t\t\tEnumType: []*descriptorpb.EnumDescriptorProto{\n\t\t\t\t\t\tprotodesc.ToEnumDescriptorProto(structpb.NullValue(0).Descriptor()),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\t\tDependency:     []string{\"third_party/google.proto\"},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t\t},\n\t\t\t\t\tMessageType: []*descriptorpb.DescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:   proto.String(\"value\"),\n\t\t\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfunc() *descriptorpb.FieldDescriptorProto {\n\t\t\t\t\t\t\t\t\tfd := test.field.FieldDescriptorProto\n\t\t\t\t\t\t\t\t\tfd.Number = proto.Int32(2)\n\t\t\t\t\t\t\t\t\treturn fd\n\t\t\t\t\t\t\t\t}(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNestedType: []*descriptorpb.DescriptorProto{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:    proto.String(\"MapFieldEntry\"),\n\t\t\t\t\t\t\t\t\tOptions: &descriptorpb.MessageOptions{MapEntry: proto.Bool(true)},\n\t\t\t\t\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   proto.String(\"key\"),\n\t\t\t\t\t\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   proto.String(\"value\"),\n\t\t\t\t\t\t\t\t\t\t\tLabel:  descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\t\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: proto.String(\"Empty\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tEnumType: []*descriptorpb.EnumDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: proto.String(\"MessageType\"),\n\t\t\t\t\t\t\tValue: []*descriptorpb.EnumValueDescriptorProto{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:   proto.String(\"MESSAGE_TYPE_1\"),\n\t\t\t\t\t\t\t\t\tNumber: proto.Int32(0),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tService: []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\terr := reg.Load(req)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"failed to reg.Load(req): %v\", err)\n\t\t}\n\n\t\t// set field's parent message pointer to message so field can resolve its FQFN\n\t\ttest.field.Message = &descriptor.Message{\n\t\t\tDescriptorProto: req.ProtoFile[1].MessageType[0],\n\t\t\tFile: &descriptor.File{\n\t\t\t\tFileDescriptorProto: req.ProtoFile[1],\n\t\t\t},\n\t\t}\n\n\t\tif test.openAPIOptions != nil {\n\t\t\tif err := reg.RegisterOpenAPIOptions(test.openAPIOptions); err != nil {\n\t\t\t\tt.Fatalf(\"failed to register OpenAPI options: %s\", err)\n\t\t\t}\n\t\t}\n\n\t\trefs := make(refMap)\n\t\tactual := schemaOfField(test.field, reg, refs)\n\t\texpectedSchemaObject := test.expected\n\t\tif e, a := expectedSchemaObject, actual; !reflect.DeepEqual(a, e) {\n\t\t\tt.Errorf(\"Expected schemaOfField(%v) = \\n%#+v, actual: \\n%#+v\", test.field, e, a)\n\t\t}\n\t\tif !reflect.DeepEqual(refs, test.refs) {\n\t\t\tt.Errorf(\"Expected schemaOfField(%v) to add refs %v, not %v\", test.field, test.refs, refs)\n\t\t}\n\t}\n}\n\nfunc TestRenderMessagesAsDefinition(t *testing.T) {\n\tjsonSchema := &openapi_options.JSONSchema{\n\t\tTitle:       \"field title\",\n\t\tDescription: \"field description\",\n\t\tRequired:    []string{\"aRequiredField\"},\n\t}\n\n\trequiredField := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredField, openapi_options.E_Openapiv2Field, jsonSchema)\n\n\tfieldBehaviorRequired := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, fieldBehaviorRequired)\n\n\tfieldBehaviorOutputOnlyField := []annotations.FieldBehavior{annotations.FieldBehavior_OUTPUT_ONLY}\n\tfieldBehaviorOutputOnlyOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(fieldBehaviorOutputOnlyOptions, annotations.E_FieldBehavior, fieldBehaviorOutputOnlyField)\n\n\tfieldVisibilityFieldInternal := &visibility.VisibilityRule{Restriction: \"INTERNAL\"}\n\tfieldVisibilityInternalOption := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(fieldVisibilityInternalOption, visibility.E_FieldVisibility, fieldVisibilityFieldInternal)\n\n\tfieldVisibilityFieldPreview := &visibility.VisibilityRule{Restriction: \"INTERNAL,PREVIEW\"}\n\tfieldVisibilityPreviewOption := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(fieldVisibilityPreviewOption, visibility.E_FieldVisibility, fieldVisibilityFieldPreview)\n\n\ttests := []struct {\n\t\tdescr                 string\n\t\tmsgDescs              []*descriptorpb.DescriptorProto\n\t\tschema                map[string]*openapi_options.Schema // per-message schema to add\n\t\tdefs                  openapiDefinitionsObject\n\t\topenAPIOptions        *openapiconfig.OpenAPIOptions\n\t\tpathParams            []descriptor.Parameter\n\t\tUseJSONNamesForFields bool\n\t\tUseAllOfForRefs       bool\n\t}{\n\t\t{\n\t\t\tdescr: \"no OpenAPI options\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {schemaCore: schemaCore{Type: \"object\"}},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"example option\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tExample: `{\"foo\":\"bar\"}`,\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {schemaCore: schemaCore{\n\t\t\t\t\tType:    \"object\",\n\t\t\t\t\tExample: RawExample(`{\"foo\":\"bar\"}`),\n\t\t\t\t}},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"example option with something non-json\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tExample: `XXXX anything goes XXXX`,\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {schemaCore: schemaCore{\n\t\t\t\t\tType:    \"object\",\n\t\t\t\t\tExample: RawExample(`XXXX anything goes XXXX`),\n\t\t\t\t}},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"external docs option\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tExternalDocs: &openapi_options.ExternalDocumentation{\n\t\t\t\t\t\tDescription: \"glorious docs\",\n\t\t\t\t\t\tUrl:         \"https://nada\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\t\tDescription: \"glorious docs\",\n\t\t\t\t\t\tURL:         \"https://nada\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema options\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:            \"title\",\n\t\t\t\t\t\tDescription:      \"desc\",\n\t\t\t\t\t\tMultipleOf:       100,\n\t\t\t\t\t\tMaximum:          101,\n\t\t\t\t\t\tExclusiveMaximum: true,\n\t\t\t\t\t\tMinimum:          1,\n\t\t\t\t\t\tExclusiveMinimum: true,\n\t\t\t\t\t\tMaxLength:        10,\n\t\t\t\t\t\tMinLength:        3,\n\t\t\t\t\t\tPattern:          \"[a-z]+\",\n\t\t\t\t\t\tMaxItems:         20,\n\t\t\t\t\t\tMinItems:         2,\n\t\t\t\t\t\tUniqueItems:      true,\n\t\t\t\t\t\tMaxProperties:    33,\n\t\t\t\t\t\tMinProperties:    22,\n\t\t\t\t\t\tRequired:         []string{\"req\"},\n\t\t\t\t\t\tReadOnly:         true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:            \"title\",\n\t\t\t\t\tDescription:      \"desc\",\n\t\t\t\t\tMultipleOf:       100,\n\t\t\t\t\tMaximum:          101,\n\t\t\t\t\tExclusiveMaximum: true,\n\t\t\t\t\tMinimum:          1,\n\t\t\t\t\tExclusiveMinimum: true,\n\t\t\t\t\tMaxLength:        10,\n\t\t\t\t\tMinLength:        3,\n\t\t\t\t\tPattern:          \"[a-z]+\",\n\t\t\t\t\tMaxItems:         20,\n\t\t\t\t\tMinItems:         2,\n\t\t\t\t\tUniqueItems:      true,\n\t\t\t\t\tMaxProperties:    33,\n\t\t\t\t\tMinProperties:    22,\n\t\t\t\t\tRequired:         []string{\"req\"},\n\t\t\t\t\tReadOnly:         true,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema options from registry\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tMessage: []*openapiconfig.OpenAPIMessageOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMessage: \"example.Message\",\n\t\t\t\t\t\tOption: &openapi_options.Schema{\n\t\t\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\t\t\tTitle:            \"title\",\n\t\t\t\t\t\t\t\tDescription:      \"desc\",\n\t\t\t\t\t\t\t\tMultipleOf:       100,\n\t\t\t\t\t\t\t\tMaximum:          101,\n\t\t\t\t\t\t\t\tExclusiveMaximum: true,\n\t\t\t\t\t\t\t\tMinimum:          1,\n\t\t\t\t\t\t\t\tExclusiveMinimum: true,\n\t\t\t\t\t\t\t\tMaxLength:        10,\n\t\t\t\t\t\t\t\tMinLength:        3,\n\t\t\t\t\t\t\t\tPattern:          \"[a-z]+\",\n\t\t\t\t\t\t\t\tMaxItems:         20,\n\t\t\t\t\t\t\t\tMinItems:         2,\n\t\t\t\t\t\t\t\tUniqueItems:      true,\n\t\t\t\t\t\t\t\tMaxProperties:    33,\n\t\t\t\t\t\t\t\tMinProperties:    22,\n\t\t\t\t\t\t\t\tRequired:         []string{\"req\"},\n\t\t\t\t\t\t\t\tReadOnly:         true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:            \"title\",\n\t\t\t\t\tDescription:      \"desc\",\n\t\t\t\t\tMultipleOf:       100,\n\t\t\t\t\tMaximum:          101,\n\t\t\t\t\tExclusiveMaximum: true,\n\t\t\t\t\tMinimum:          1,\n\t\t\t\t\tExclusiveMinimum: true,\n\t\t\t\t\tMaxLength:        10,\n\t\t\t\t\tMinLength:        3,\n\t\t\t\t\tPattern:          \"[a-z]+\",\n\t\t\t\t\tMaxItems:         20,\n\t\t\t\t\tMinItems:         2,\n\t\t\t\t\tUniqueItems:      true,\n\t\t\t\t\tMaxProperties:    33,\n\t\t\t\t\tMinProperties:    22,\n\t\t\t\t\tRequired:         []string{\"req\"},\n\t\t\t\t\tReadOnly:         true,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with required properties\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"FieldOne\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"FieldTwo\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"FieldThree\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(3),\n\t\t\t\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t\tRequired:    []string{\"FieldOne\", \"FieldTwo\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    []string{\"FieldOne\", \"FieldTwo\", \"FieldThree\"},\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"FieldOne\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"FieldTwo\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"FieldThree\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with required properties\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"FieldOne\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(3),\n\t\t\t\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    []string{\"FieldOne\"},\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"FieldOne\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with required properties by using annotations\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"FieldOne\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    []string{\"FieldOne\"},\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"FieldOne\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with hidden properties\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"aInternalField\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(1),\n\t\t\t\t\t\t\tOptions: fieldVisibilityInternalOption,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"aPreviewField\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\t\t\t\tOptions: fieldVisibilityPreviewOption,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"aVisibleField\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t\tRequired:    []string{\"req\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    []string{\"req\"},\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"aPreviewField\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"aVisibleField\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with path parameters\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"aRequiredField\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(1),\n\t\t\t\t\t\t\tOptions: requiredField,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   proto.String(\"aPathParameter\"),\n\t\t\t\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber: proto.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t\tRequired:    []string{\"req\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    []string{\"req\", \"aRequiredField\"},\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"aRequiredField\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tDescription: \"field description\",\n\t\t\t\t\t\t\t\tTitle:       \"field title\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tpathParams: []descriptor.Parameter{\n\t\t\t\t{\n\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\tdescriptor.FieldPathComponent{\n\t\t\t\t\t\t\tName: (\"aPathParameter\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with required properties via field_behavior\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"aRequiredField\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(1),\n\t\t\t\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    proto.String(\"aOutputOnlyField\"),\n\t\t\t\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\t\t\t\tOptions: fieldBehaviorOutputOnlyOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t\tRequired:    []string{\"req\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    []string{\"req\", \"aRequiredField\"},\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"aRequiredField\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"aOutputOnlyField\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tReadOnly: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with required properties and fields with json_name\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"FieldOne\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t\tJsonName: proto.String(\"custom_json_1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"FieldTwo\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\t\t\t\tJsonName: proto.String(\"custom_json_2\"),\n\t\t\t\t\t\t\tOptions:  requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"FieldThree\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\t\t\t\tNumber:   proto.Int32(3),\n\t\t\t\t\t\t\tJsonName: proto.String(\"custom_json_3\"),\n\t\t\t\t\t\t\tOptions:  requiredFieldOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t\tRequired:    []string{\"FieldOne\", \"FieldTwo\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    []string{\"custom_json_1\", \"custom_json_2\", \"custom_json_3\"},\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"custom_json_1\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"custom_json_2\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"custom_json_3\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tUseJSONNamesForFields: true,\n\t\t},\n\t\t{\n\t\t\tdescr: \"JSONSchema with a read_only nested field\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{\n\t\t\t\t\tName: proto.String(\"Message\"),\n\t\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     proto.String(\"nested\"),\n\t\t\t\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\t\t\t\tTypeName: proto.String(\".example.Message.Nested\"),\n\t\t\t\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\t\t\t\tOptions:  fieldBehaviorOutputOnlyOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tNestedType: []*descriptorpb.DescriptorProto{{\n\t\t\t\t\t\tName: proto.String(\"Nested\"),\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t},\n\t\t\tUseAllOfForRefs: true,\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\t\tRequired:    []string{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tField: []*openapiconfig.OpenAPIFieldOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tField: \"example.Message.nested\",\n\t\t\t\t\t\tOption: &openapi_options.JSONSchema{\n\t\t\t\t\t\t\tTitle:       \"nested field title\",\n\t\t\t\t\t\t\tDescription: \"nested field desc\",\n\t\t\t\t\t\t\tExample:     `\"ok\":\"TRUE\"`,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"exampleMessage\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"title\",\n\t\t\t\t\tDescription: \"desc\",\n\t\t\t\t\tRequired:    nil,\n\t\t\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey: \"nested\",\n\t\t\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\t\t\tAllOf:    []allOfEntry{{Ref: \"#/definitions/MessageNested\"}},\n\t\t\t\t\t\t\t\tReadOnly: true,\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tExample: RawExample(`\"ok\":\"TRUE\"`),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tTitle:       \"nested field title\",\n\t\t\t\t\t\t\t\tDescription: \"nested field desc\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tt.Run(test.descr, func(t *testing.T) {\n\t\t\tmsgs := []*descriptor.Message{}\n\t\t\tfor _, msgdesc := range test.msgDescs {\n\t\t\t\tmsgdesc.Options = &descriptorpb.MessageOptions{}\n\t\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t\t}\n\n\t\t\treg := descriptor.NewRegistry()\n\t\t\tfile := descriptor.File{\n\t\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\t\tDependency:     []string{},\n\t\t\t\t\tMessageType:    test.msgDescs,\n\t\t\t\t\tEnumType:       []*descriptorpb.EnumDescriptorProto{},\n\t\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMessages: msgs,\n\t\t\t}\n\t\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t\t})\n\t\t\treg.SetVisibilityRestrictionSelectors([]string{\"PREVIEW\"})\n\n\t\t\tif test.UseJSONNamesForFields {\n\t\t\t\treg.SetUseJSONNamesForFields(true)\n\t\t\t}\n\n\t\t\tif test.UseAllOfForRefs {\n\t\t\t\treg.SetUseAllOfForRefs(true)\n\t\t\t}\n\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t\t}\n\n\t\t\tmsgMap := map[string]*descriptor.Message{}\n\t\t\tfor _, d := range test.msgDescs {\n\t\t\t\tname := d.GetName()\n\t\t\t\tmsg, err := reg.LookupMsg(\"example\", name)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"lookup message %v: %v\", name, err)\n\t\t\t\t}\n\t\t\t\tmsgMap[msg.FQMN()] = msg\n\n\t\t\t\tif schema, ok := test.schema[name]; ok {\n\t\t\t\t\tproto.SetExtension(d.Options, openapi_options.E_Openapiv2Schema, schema)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif test.openAPIOptions != nil {\n\t\t\t\tif err := reg.RegisterOpenAPIOptions(test.openAPIOptions); err != nil {\n\t\t\t\t\tt.Fatalf(\"failed to register OpenAPI options: %s\", err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trefs := make(refMap)\n\t\t\tactual := make(openapiDefinitionsObject)\n\t\t\tif err := renderMessagesAsDefinition(msgMap, actual, reg, refs, test.pathParams); err != nil {\n\t\t\t\tt.Errorf(\"renderMessagesAsDefinition failed with: %s\", err)\n\t\t\t}\n\n\t\t\tif !reflect.DeepEqual(actual, test.defs) {\n\t\t\t\tt.Errorf(\"Expected renderMessagesAsDefinition() to add defs %+v, not %+v\", test.defs, actual)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestUpdateOpenAPIDataFromComments(t *testing.T) {\n\ttests := []struct {\n\t\tdescr                 string\n\t\topenapiSwaggerObject  interface{}\n\t\tcomments              string\n\t\texpectedError         error\n\t\texpectedOpenAPIObject interface{}\n\t\tuseGoTemplate         bool\n\t\tgoTemplateArgs        []string\n\t}{\n\t\t{\n\t\t\tdescr:                 \"empty comments\",\n\t\t\topenapiSwaggerObject:  nil,\n\t\t\texpectedOpenAPIObject: nil,\n\t\t\tcomments:              \"\",\n\t\t\texpectedError:         nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"set field to read only\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tReadOnly:    true,\n\t\t\t\tDescription: \"... Output only. ...\",\n\t\t\t},\n\t\t\tcomments:      \"... Output only. ...\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"set title\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tTitle: \"Comment with no trailing dot\",\n\t\t\t},\n\t\t\tcomments:      \"Comment with no trailing dot\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"set description\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tDescription: \"Comment with trailing dot.\",\n\t\t\t},\n\t\t\tcomments:      \"Comment with trailing dot.\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr: \"use info object\",\n\t\t\topenapiSwaggerObject: &openapiSwaggerObject{\n\t\t\t\tInfo: openapiInfoObject{},\n\t\t\t},\n\t\t\texpectedOpenAPIObject: &openapiSwaggerObject{\n\t\t\t\tInfo: openapiInfoObject{\n\t\t\t\t\tDescription: \"Comment with trailing dot.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tcomments:      \"Comment with trailing dot.\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"multi line comment with title\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tTitle:       \"First line\",\n\t\t\t\tDescription: \"Second line\",\n\t\t\t},\n\t\t\tcomments:      \"First line\\n\\nSecond line\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"multi line comment no title\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tDescription: \"First line.\\n\\nSecond line\",\n\t\t\t},\n\t\t\tcomments:      \"First line.\\n\\nSecond line\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"multi line comment with summary with dot\",\n\t\t\topenapiSwaggerObject: &openapiOperationObject{},\n\t\t\texpectedOpenAPIObject: &openapiOperationObject{\n\t\t\t\tSummary:     \"First line.\",\n\t\t\t\tDescription: \"Second line\",\n\t\t\t},\n\t\t\tcomments:      \"First line.\\n\\nSecond line\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"multi line comment with summary no dot\",\n\t\t\topenapiSwaggerObject: &openapiOperationObject{},\n\t\t\texpectedOpenAPIObject: &openapiOperationObject{\n\t\t\t\tSummary:     \"First line\",\n\t\t\t\tDescription: \"Second line\",\n\t\t\t},\n\t\t\tcomments:      \"First line\\n\\nSecond line\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                 \"multi line comment with summary no dot\",\n\t\t\topenapiSwaggerObject:  &schemaCore{},\n\t\t\texpectedOpenAPIObject: &schemaCore{},\n\t\t\tcomments:              \"Any comment\",\n\t\t\texpectedError:         errors.New(\"no description nor summary property\"),\n\t\t},\n\t\t{\n\t\t\tdescr:                \"without use_go_template\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tTitle:       \"First line\",\n\t\t\t\tDescription: \"{{import \\\"documentation.md\\\"}}\",\n\t\t\t},\n\t\t\tcomments:      \"First line\\n\\n{{import \\\"documentation.md\\\"}}\",\n\t\t\texpectedError: nil,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"error with use_go_template\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tTitle:       \"First line\",\n\t\t\t\tDescription: \"open noneexistingfile.txt: no such file or directory\",\n\t\t\t},\n\t\t\tcomments:      \"First line\\n\\n{{import \\\"noneexistingfile.txt\\\"}}\",\n\t\t\texpectedError: nil,\n\t\t\tuseGoTemplate: true,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"template with use_go_template\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tTitle:       \"Template\",\n\t\t\t\tDescription: `Description \"which means nothing\"`,\n\t\t\t},\n\t\t\tcomments:      \"Template\\n\\nDescription {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\texpectedError: nil,\n\t\t\tuseGoTemplate: true,\n\t\t},\n\t\t{\n\t\t\tdescr:                \"template with use_go_template and go_template_args\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tTitle:       \"Template\",\n\t\t\t\tDescription: `Description \"which means nothing\" for environment test with value my_value`,\n\t\t\t},\n\t\t\tcomments: \"Template\\n\\nDescription {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}} for \" +\n\t\t\t\t\"environment {{arg \\\"environment\\\"}} with value {{arg \\\"my_key\\\"}}\",\n\t\t\texpectedError:  nil,\n\t\t\tuseGoTemplate:  true,\n\t\t\tgoTemplateArgs: []string{\"my_key=my_value\", \"environment=test\"},\n\t\t},\n\t\t{\n\t\t\tdescr:                \"template with use_go_template and undefined go_template_args\",\n\t\t\topenapiSwaggerObject: &openapiSchemaObject{},\n\t\t\texpectedOpenAPIObject: &openapiSchemaObject{\n\t\t\t\tTitle: \"Template\",\n\t\t\t\tDescription: `Description \"which means nothing\" for environment test with value ` +\n\t\t\t\t\t`goTemplateArg something_undefined not found`,\n\t\t\t},\n\t\t\tcomments: \"Template\\n\\nDescription {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}} for \" +\n\t\t\t\t\"environment {{arg \\\"environment\\\"}} with value {{arg \\\"something_undefined\\\"}}\",\n\t\t\texpectedError:  nil,\n\t\t\tuseGoTemplate:  true,\n\t\t\tgoTemplateArgs: []string{\"environment=test\"},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tt.Run(test.descr, func(t *testing.T) {\n\t\t\treg := descriptor.NewRegistry()\n\t\t\tif test.useGoTemplate {\n\t\t\t\treg.SetUseGoTemplate(true)\n\t\t\t}\n\t\t\tif len(test.goTemplateArgs) > 0 {\n\t\t\t\treg.SetGoTemplateArgs(test.goTemplateArgs)\n\t\t\t}\n\t\t\terr := updateOpenAPIDataFromComments(reg, test.openapiSwaggerObject, nil, test.comments, false)\n\t\t\tif test.expectedError == nil {\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Errorf(\"unexpected error '%v'\", err)\n\t\t\t\t}\n\t\t\t\tif !reflect.DeepEqual(test.openapiSwaggerObject, test.expectedOpenAPIObject) {\n\t\t\t\t\tt.Errorf(\"openapiSwaggerObject was not updated correctly, expected '%+v', got '%+v'\", test.expectedOpenAPIObject, test.openapiSwaggerObject)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Error(\"expected update error not returned\")\n\t\t\t\t}\n\t\t\t\tif !reflect.DeepEqual(test.openapiSwaggerObject, test.expectedOpenAPIObject) {\n\t\t\t\t\tt.Errorf(\"openapiSwaggerObject was not updated correctly, expected '%+v', got '%+v'\", test.expectedOpenAPIObject, test.openapiSwaggerObject)\n\t\t\t\t}\n\t\t\t\tif err.Error() != test.expectedError.Error() {\n\t\t\t\t\tt.Errorf(\"expected error malformed, expected %q, got %q\", test.expectedError.Error(), err.Error())\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestMessageOptionsWithGoTemplate(t *testing.T) {\n\ttests := []struct {\n\t\tdescr          string\n\t\tmsgDescs       []*descriptorpb.DescriptorProto\n\t\tschema         map[string]*openapi_options.Schema // per-message schema to add\n\t\tdefs           openapiDefinitionsObject\n\t\topenAPIOptions *openapiconfig.OpenAPIOptions\n\t\tuseGoTemplate  bool\n\t\tgoTemplateArgs []string\n\t}{\n\t\t{\n\t\t\tdescr: \"external docs option\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"{{.Name}}\",\n\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\t},\n\t\t\t\t\tExternalDocs: &openapi_options.ExternalDocumentation{\n\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"Message\",\n\t\t\t\t\tDescription: `Description \"which means nothing\"`,\n\t\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\t\tDescription: `Description \"which means nothing\"`,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tuseGoTemplate: true,\n\t\t},\n\t\t{\n\t\t\tdescr: \"external docs option\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle:       \"{{.Name}}\",\n\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\t},\n\t\t\t\t\tExternalDocs: &openapi_options.ExternalDocumentation{\n\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"{{.Name}}\",\n\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tuseGoTemplate: false,\n\t\t},\n\t\t{\n\t\t\tdescr: \"external docs option with go template args\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\tschema: map[string]*openapi_options.Schema{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\tTitle: \"{{.Name}}\",\n\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}} \" +\n\t\t\t\t\t\t\t\"{{arg \\\"my_key\\\"}}\",\n\t\t\t\t\t},\n\t\t\t\t\tExternalDocs: &openapi_options.ExternalDocumentation{\n\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}} \" +\n\t\t\t\t\t\t\t\"{{arg \\\"my_key\\\"}}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"Message\",\n\t\t\t\t\tDescription: `Description \"which means nothing\" too`,\n\t\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\t\tDescription: `Description \"which means nothing\" too`,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tuseGoTemplate:  true,\n\t\t\tgoTemplateArgs: []string{\"my_key=too\"},\n\t\t},\n\t\t{\n\t\t\tdescr: \"registered OpenAPIOption\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tMessage: []*openapiconfig.OpenAPIMessageOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMessage: \"example.Message\",\n\t\t\t\t\t\tOption: &openapi_options.Schema{\n\t\t\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\t\t\tTitle:       \"{{.Name}}\",\n\t\t\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tExternalDocs: &openapi_options.ExternalDocumentation{\n\t\t\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}}\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"Message\",\n\t\t\t\t\tDescription: `Description \"which means nothing\"`,\n\t\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\t\tDescription: `Description \"which means nothing\"`,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tuseGoTemplate: true,\n\t\t},\n\t\t{\n\t\t\tdescr: \"registered OpenAPIOption with go template args\",\n\t\t\tmsgDescs: []*descriptorpb.DescriptorProto{\n\t\t\t\t{Name: proto.String(\"Message\")},\n\t\t\t},\n\t\t\topenAPIOptions: &openapiconfig.OpenAPIOptions{\n\t\t\t\tMessage: []*openapiconfig.OpenAPIMessageOption{\n\t\t\t\t\t{\n\t\t\t\t\t\tMessage: \"example.Message\",\n\t\t\t\t\t\tOption: &openapi_options.Schema{\n\t\t\t\t\t\t\tJsonSchema: &openapi_options.JSONSchema{\n\t\t\t\t\t\t\t\tTitle: \"{{.Name}}\",\n\t\t\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}} \" +\n\t\t\t\t\t\t\t\t\t\"{{arg \\\"my_key\\\"}}\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tExternalDocs: &openapi_options.ExternalDocumentation{\n\t\t\t\t\t\t\t\tDescription: \"Description {{with \\\"which means nothing\\\"}}{{printf \\\"%q\\\" .}}{{end}} \" +\n\t\t\t\t\t\t\t\t\t\"{{arg \\\"my_key\\\"}}\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefs: map[string]openapiSchemaObject{\n\t\t\t\t\"Message\": {\n\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t},\n\t\t\t\t\tTitle:       \"Message\",\n\t\t\t\t\tDescription: `Description \"which means nothing\" too`,\n\t\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\t\tDescription: `Description \"which means nothing\" too`,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tuseGoTemplate:  true,\n\t\t\tgoTemplateArgs: []string{\"my_key=too\"},\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tt.Run(test.descr, func(t *testing.T) {\n\t\t\tmsgs := []*descriptor.Message{}\n\t\t\tfor _, msgdesc := range test.msgDescs {\n\t\t\t\tmsgdesc.Options = &descriptorpb.MessageOptions{}\n\t\t\t\tmsgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc})\n\t\t\t}\n\n\t\t\treg := descriptor.NewRegistry()\n\t\t\treg.SetUseGoTemplate(test.useGoTemplate)\n\t\t\treg.SetGoTemplateArgs(test.goTemplateArgs)\n\t\t\tfile := descriptor.File{\n\t\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\t\tDependency:     []string{},\n\t\t\t\t\tMessageType:    test.msgDescs,\n\t\t\t\t\tEnumType:       []*descriptorpb.EnumDescriptorProto{},\n\t\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMessages: msgs,\n\t\t\t}\n\t\t\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\t\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t\t}\n\n\t\t\tmsgMap := map[string]*descriptor.Message{}\n\t\t\tfor _, d := range test.msgDescs {\n\t\t\t\tname := d.GetName()\n\t\t\t\tmsg, err := reg.LookupMsg(\"example\", name)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"lookup message %v: %v\", name, err)\n\t\t\t\t}\n\t\t\t\tmsgMap[msg.FQMN()] = msg\n\n\t\t\t\tif schema, ok := test.schema[name]; ok {\n\t\t\t\t\tproto.SetExtension(d.Options, openapi_options.E_Openapiv2Schema, schema)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif test.openAPIOptions != nil {\n\t\t\t\tif err := reg.RegisterOpenAPIOptions(test.openAPIOptions); err != nil {\n\t\t\t\t\tt.Fatalf(\"failed to register OpenAPI options: %s\", err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trefs := make(refMap)\n\t\t\tactual := make(openapiDefinitionsObject)\n\t\t\tif err := renderMessagesAsDefinition(msgMap, actual, reg, refs, nil); err != nil {\n\t\t\t\tt.Errorf(\"renderMessagesAsDefinition failed with: %s\", err)\n\t\t\t}\n\n\t\t\tif !reflect.DeepEqual(actual, test.defs) {\n\t\t\t\tt.Errorf(\"Expected renderMessagesAsDefinition() to add defs %+v, not %+v\", test.defs, actual)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestTagsWithGoTemplate(t *testing.T) {\n\treg := descriptor.NewRegistry()\n\treg.SetUseGoTemplate(true)\n\treg.SetGoTemplateArgs([]string{\"my_key=my_value\"})\n\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:    proto.String(\"ExampleService\"),\n\t\tOptions: &descriptorpb.ServiceOptions{},\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tDependency:     []string{},\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{},\n\t\t\tEnumType:       []*descriptorpb.EnumDescriptorProto{},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tMessages: []*descriptor.Message{},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t},\n\t\t},\n\t}\n\n\t// Set tag through service extension\n\tproto.SetExtension(file.GetService()[0].Options, openapi_options.E_Openapiv2Tag, &openapi_options.Tag{\n\t\tName:        \"service tag\",\n\t\tDescription: \"{{ .Name }}!\",\n\t})\n\n\t// Set tags through file extension\n\tswagger := openapi_options.Swagger{\n\t\tTags: []*openapi_options.Tag{\n\t\t\t{\n\t\t\t\tName:        \"not a service tag\",\n\t\t\t\tDescription: \"{{ import \\\"file\\\" }}\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:        \"ExampleService\",\n\t\t\t\tDescription: \"ExampleService!\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:        \"not a service tag 2\",\n\t\t\t\tDescription: \"{{ import \\\"file\\\" }}\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:        \"Service with my_key\",\n\t\t\t\tDescription: \"the {{arg \\\"my_key\\\"}}\",\n\t\t\t},\n\t\t},\n\t}\n\tproto.SetExtension(proto.Message(file.FileDescriptorProto.Options), openapi_options.E_Openapiv2Swagger, &swagger)\n\n\tactual, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\texpectedTags := []openapiTagObject{\n\t\t{\n\t\t\tName:        \"not a service tag\",\n\t\t\tDescription: \"open file: no such file or directory\",\n\t\t},\n\t\t{\n\t\t\tName:        \"ExampleService\",\n\t\t\tDescription: \"ExampleService!\",\n\t\t},\n\t\t{\n\t\t\tName:        \"not a service tag 2\",\n\t\t\tDescription: \"open file: no such file or directory\",\n\t\t},\n\t\t{\n\t\t\tName:        \"Service with my_key\",\n\t\t\tDescription: \"the my_value\",\n\t\t},\n\t\t{\n\t\t\tName:        \"service tag\",\n\t\t\tDescription: \"ExampleService!\",\n\t\t},\n\t}\n\tif !reflect.DeepEqual(actual.Tags, expectedTags) {\n\t\tt.Errorf(\"Expected tags %+v, not %+v\", expectedTags, actual.Tags)\n\t}\n}\n\nfunc TestTemplateWithoutErrorDefinition(t *testing.T) {\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName:  proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Echo\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}})\n\tif err != nil {\n\t\tt.Errorf(\"failed to reg.Load(): %v\", err)\n\t\treturn\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\tdefRsp, ok := result.getPathItemObject(\"/v1/echo\").Post.Responses[\"default\"]\n\tif !ok {\n\t\treturn\n\t}\n\n\tref := defRsp.Schema.schemaCore.Ref\n\trefName := strings.TrimPrefix(ref, \"#/definitions/\")\n\tif refName == \"\" {\n\t\tt.Fatal(\"created default Error response with empty reflink\")\n\t}\n\n\tif _, ok := result.Definitions[refName]; !ok {\n\t\tt.Errorf(\"default Error response with reflink '%v', but its definition was not found\", refName)\n\t}\n}\n\nfunc TestSingleServiceTemplateWithDuplicateHttp1Operations(t *testing.T) {\n\tfieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING\n\tfield1 := &descriptorpb.FieldDescriptorProto{\n\t\tName:   proto.String(\"name\"),\n\t\tNumber: proto.Int32(1),\n\t\tType:   &fieldType,\n\t}\n\n\tgetFooMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"GetFooRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\tfield1,\n\t\t},\n\t}\n\tgetFooMsg := &descriptor.Message{\n\t\tDescriptorProto: getFooMsgDesc,\n\t}\n\tdeleteFooMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"DeleteFooRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\tfield1,\n\t\t},\n\t}\n\tdeleteFooMsg := &descriptor.Message{\n\t\tDescriptorProto: deleteFooMsgDesc,\n\t}\n\tgetFoo := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"GetFoo\"),\n\t\tInputType:  proto.String(\"GetFooRequest\"),\n\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t}\n\tdeleteFoo := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"DeleteFoo\"),\n\t\tInputType:  proto.String(\"DeleteFooRequest\"),\n\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t}\n\n\tgetBarMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"GetBarRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\tfield1,\n\t\t},\n\t}\n\tgetBarMsg := &descriptor.Message{\n\t\tDescriptorProto: getBarMsgDesc,\n\t}\n\tdeleteBarMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"DeleteBarRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\tfield1,\n\t\t},\n\t}\n\tdeleteBarMsg := &descriptor.Message{\n\t\tDescriptorProto: deleteBarMsgDesc,\n\t}\n\tgetBar := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"GetBar\"),\n\t\tInputType:  proto.String(\"GetBarRequest\"),\n\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t}\n\tdeleteBar := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"DeleteBar\"),\n\t\tInputType:  proto.String(\"DeleteBarRequest\"),\n\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t}\n\n\tsvc1 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"Service1\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{getFoo, deleteFoo, getBar, deleteBar},\n\t}\n\n\temptyMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"EmptyMessage\"),\n\t}\n\temptyMsg := &descriptor.Message{\n\t\tDescriptorProto: emptyMsgDesc,\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"service1.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{getBarMsgDesc, deleteBarMsgDesc, getFooMsgDesc, deleteFooMsgDesc, emptyMsgDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc1},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{getFooMsg, deleteFooMsg, getBarMsg, deleteBarMsg, emptyMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc1,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: getFoo,\n\t\t\t\t\t\tRequestType:           getFooMsg,\n\t\t\t\t\t\tResponseType:          getFooMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=foos/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              getFooMsg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: deleteFoo,\n\t\t\t\t\t\tRequestType:           deleteFooMsg,\n\t\t\t\t\t\tResponseType:          emptyMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"DELETE\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=foos/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              deleteFooMsg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: getBar,\n\t\t\t\t\t\tRequestType:           getBarMsg,\n\t\t\t\t\t\tResponseType:          getBarMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=bars/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              getBarMsg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: deleteBar,\n\t\t\t\t\t\tRequestType:           deleteBarMsg,\n\t\t\t\t\t\tResponseType:          emptyMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"DELETE\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=bars/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              deleteBarMsg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tif got, want := len(result.Paths), 2; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tfirstOpGet := result.getPathItemObject(\"/v1/{name}\").Get\n\tif got, want := firstOpGet.OperationID, \"Service1_GetFoo\"; got != want {\n\t\tt.Fatalf(\"First operation GET id differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(firstOpGet.Parameters), 2; got != want {\n\t\tt.Fatalf(\"First operation GET params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := firstOpGet.Parameters[0].Name, \"name\"; got != want {\n\t\tt.Fatalf(\"First operation GET first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOpGet.Parameters[0].Pattern, \"foos/[^/]+\"; got != want {\n\t\tt.Fatalf(\"First operation GET first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOpGet.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"First operation GET second param 'in' differed, got %s want %s\", got, want)\n\t}\n\n\tfirstOpDelete := result.getPathItemObject(\"/v1/{name}\").Delete\n\tif got, want := firstOpDelete.OperationID, \"Service1_DeleteFoo\"; got != want {\n\t\tt.Fatalf(\"First operation id DELETE differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(firstOpDelete.Parameters), 2; got != want {\n\t\tt.Fatalf(\"First operation DELETE params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := firstOpDelete.Parameters[0].Name, \"name\"; got != want {\n\t\tt.Fatalf(\"First operation DELETE first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOpDelete.Parameters[0].Pattern, \"foos/[^/]+\"; got != want {\n\t\tt.Fatalf(\"First operation DELETE first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOpDelete.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"First operation DELETE second param 'in' differed, got %s want %s\", got, want)\n\t}\n\n\tsecondOpGet := result.getPathItemObject(\"/v1/{name\" + pathParamUniqueSuffixDeliminator + \"1}\").Get\n\tif got, want := secondOpGet.OperationID, \"Service1_GetBar\"; got != want {\n\t\tt.Fatalf(\"Second operation id GET differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(secondOpGet.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Second operation GET params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := secondOpGet.Parameters[0].Name, \"name\"+pathParamUniqueSuffixDeliminator+\"1\"; got != want {\n\t\tt.Fatalf(\"Second operation GET first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOpGet.Parameters[0].Pattern, \"bars/[^/]+\"; got != want {\n\t\tt.Fatalf(\"Second operation GET first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOpGet.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Second operation GET second param 'in' differed, got %s want %s\", got, want)\n\t}\n\n\tsecondOpDelete := result.getPathItemObject(\"/v1/{name\" + pathParamUniqueSuffixDeliminator + \"1}\").Delete\n\tif got, want := secondOpDelete.OperationID, \"Service1_DeleteBar\"; got != want {\n\t\tt.Fatalf(\"Second operation id differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(secondOpDelete.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Second operation params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := secondOpDelete.Parameters[0].Name, \"name\"+pathParamUniqueSuffixDeliminator+\"1\"; got != want {\n\t\tt.Fatalf(\"Second operation first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOpDelete.Parameters[0].Pattern, \"bars/[^/]+\"; got != want {\n\t\tt.Fatalf(\"Second operation first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOpDelete.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Second operation third param 'in' differed, got %s want %s\", got, want)\n\t}\n}\n\nfunc getOperation(pathItem openapiPathItemObject, httpMethod string) *openapiOperationObject {\n\tswitch httpMethod {\n\tcase \"GET\":\n\t\treturn pathItem.Get\n\tcase \"POST\":\n\t\treturn pathItem.Post\n\tcase \"PUT\":\n\t\treturn pathItem.Put\n\tcase \"DELETE\":\n\t\treturn pathItem.Delete\n\tcase \"PATCH\":\n\t\treturn pathItem.Patch\n\tcase \"HEAD\":\n\t\treturn pathItem.Head\n\tcase \"OPTIONS\":\n\t\treturn pathItem.Options\n\tdefault:\n\t\treturn nil\n\t}\n}\n\nfunc TestSingleServiceTemplateWithDuplicateInAllSupportedHttp1Operations(t *testing.T) {\n\tsupportedMethods := []string{\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\", \"OPTIONS\"}\n\n\tfor _, method := range supportedMethods {\n\t\tfieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING\n\t\tfield1 := &descriptorpb.FieldDescriptorProto{\n\t\t\tName:   proto.String(\"name\"),\n\t\t\tNumber: proto.Int32(1),\n\t\t\tType:   &fieldType,\n\t\t}\n\n\t\tmethodFooMsgDesc := &descriptorpb.DescriptorProto{\n\t\t\tName: proto.String(method + \"FooRequest\"),\n\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\tfield1,\n\t\t\t},\n\t\t}\n\t\tmethodFooMsg := &descriptor.Message{\n\t\t\tDescriptorProto: methodFooMsgDesc,\n\t\t}\n\t\tmethodFoo := &descriptorpb.MethodDescriptorProto{\n\t\t\tName:       proto.String(method + \"Foo\"),\n\t\t\tInputType:  proto.String(method + \"FooRequest\"),\n\t\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t\t}\n\n\t\tmethodBarMsgDesc := &descriptorpb.DescriptorProto{\n\t\t\tName: proto.String(method + \"BarRequest\"),\n\t\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t\tfield1,\n\t\t\t},\n\t\t}\n\t\tmethodBarMsg := &descriptor.Message{\n\t\t\tDescriptorProto: methodBarMsgDesc,\n\t\t}\n\t\tmethodBar := &descriptorpb.MethodDescriptorProto{\n\t\t\tName:       proto.String(method + \"Bar\"),\n\t\t\tInputType:  proto.String(method + \"BarRequest\"),\n\t\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t\t}\n\n\t\tsvc1 := &descriptorpb.ServiceDescriptorProto{\n\t\t\tName:   proto.String(\"Service1\"),\n\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{methodFoo, methodBar},\n\t\t}\n\n\t\temptyMsgDesc := &descriptorpb.DescriptorProto{\n\t\t\tName: proto.String(\"EmptyMessage\"),\n\t\t}\n\t\temptyMsg := &descriptor.Message{\n\t\t\tDescriptorProto: emptyMsgDesc,\n\t\t}\n\n\t\tfile := descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"service1.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{methodBarMsgDesc, methodFooMsgDesc, emptyMsgDesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc1},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{methodFooMsg, methodBarMsg, emptyMsg},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc1,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: methodFoo,\n\t\t\t\t\t\t\tRequestType:           methodFooMsg,\n\t\t\t\t\t\t\tResponseType:          methodFooMsg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: method,\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=foos/*}\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\t\tMessage:              methodFooMsg,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: methodBar,\n\t\t\t\t\t\t\tRequestType:           methodBarMsg,\n\t\t\t\t\t\t\tResponseType:          methodBarMsg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: method,\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=bars/*}\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\t\tMessage:              methodBarMsg,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\treg := descriptor.NewRegistry()\n\t\terr := reg.Load(reqFromFile(&file))\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t\t}\n\t\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t}\n\n\t\tif got, want := len(result.Paths), 2; got != want {\n\t\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t\t}\n\n\t\tfirstOpMethod := getOperation(result.getPathItemObject(\"/v1/{name}\"), method)\n\t\tif got, want := firstOpMethod.OperationID, \"Service1_\"+method+\"Foo\"; got != want {\n\t\t\tt.Fatalf(\"First operation %s id differed, got %s want %s\", method, got, want)\n\t\t}\n\t\tif got, want := len(firstOpMethod.Parameters), 2; got != want {\n\t\t\tt.Fatalf(\"First operation %s params length differed, got %d want %d\", method, got, want)\n\t\t}\n\t\tif got, want := firstOpMethod.Parameters[0].Name, \"name\"; got != want {\n\t\t\tt.Fatalf(\"First operation %s first param name differed, got %s want %s\", method, got, want)\n\t\t}\n\t\tif got, want := firstOpMethod.Parameters[0].Pattern, \"foos/[^/]+\"; got != want {\n\t\t\tt.Fatalf(\"First operation %s first param pattern differed, got %s want %s\", method, got, want)\n\t\t}\n\t\tif got, want := firstOpMethod.Parameters[1].In, \"body\"; got != want {\n\t\t\tt.Fatalf(\"First operation %s second param 'in' differed, got %s want %s\", method, got, want)\n\t\t}\n\n\t\tsecondOpMethod := getOperation(result.getPathItemObject(\"/v1/{name\"+pathParamUniqueSuffixDeliminator+\"1}\"), method)\n\t\tif got, want := secondOpMethod.OperationID, \"Service1_\"+method+\"Bar\"; got != want {\n\t\t\tt.Fatalf(\"Second operation id %s differed, got %s want %s\", method, got, want)\n\t\t}\n\t\tif got, want := len(secondOpMethod.Parameters), 2; got != want {\n\t\t\tt.Fatalf(\"Second operation %s params length differed, got %d want %d\", method, got, want)\n\t\t}\n\t\tif got, want := secondOpMethod.Parameters[0].Name, \"name\"+pathParamUniqueSuffixDeliminator+\"1\"; got != want {\n\t\t\tt.Fatalf(\"Second operation %s first param name differed, got %s want %s\", method, got, want)\n\t\t}\n\t\tif got, want := secondOpMethod.Parameters[0].Pattern, \"bars/[^/]+\"; got != want {\n\t\t\tt.Fatalf(\"Second operation %s first param pattern differed, got %s want %s\", method, got, want)\n\t\t}\n\t\tif got, want := secondOpMethod.Parameters[1].In, \"body\"; got != want {\n\t\t\tt.Fatalf(\"Second operation %s second param 'in' differed, got %s want %s\", method, got, want)\n\t\t}\n\t}\n}\n\nfunc TestSingleServiceTemplateWithDuplicateHttp1UnsupportedOperations(t *testing.T) {\n\tfieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING\n\tfield1 := &descriptorpb.FieldDescriptorProto{\n\t\tName:   proto.String(\"name\"),\n\t\tNumber: proto.Int32(1),\n\t\tType:   &fieldType,\n\t}\n\n\tunsupportedFooMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"UnsupportedFooRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\tfield1,\n\t\t},\n\t}\n\tunsupportedFooMsg := &descriptor.Message{\n\t\tDescriptorProto: unsupportedFooMsgDesc,\n\t}\n\tunsupportedFoo := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"UnsupportedFoo\"),\n\t\tInputType:  proto.String(\"UnsupportedFooRequest\"),\n\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t}\n\n\tunsupportedBarMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"UnsupportedBarRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\tfield1,\n\t\t},\n\t}\n\tunsupportedBarMsg := &descriptor.Message{\n\t\tDescriptorProto: unsupportedBarMsgDesc,\n\t}\n\tunsupportedBar := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"UnsupportedBar\"),\n\t\tInputType:  proto.String(\"UnsupportedBarRequest\"),\n\t\tOutputType: proto.String(\"EmptyMessage\"),\n\t}\n\n\tsvc1 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"Service1\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{unsupportedFoo, unsupportedBar},\n\t}\n\n\temptyMsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"EmptyMessage\"),\n\t}\n\temptyMsg := &descriptor.Message{\n\t\tDescriptorProto: emptyMsgDesc,\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"service1.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{unsupportedBarMsgDesc, unsupportedFooMsgDesc, emptyMsgDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc1},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{unsupportedFooMsg, unsupportedBarMsg, emptyMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc1,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: unsupportedFoo,\n\t\t\t\t\t\tRequestType:           unsupportedFooMsg,\n\t\t\t\t\t\tResponseType:          unsupportedFooMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"UNSUPPORTED\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=foos/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              unsupportedFooMsg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: unsupportedBar,\n\t\t\t\t\t\tRequestType:           unsupportedBarMsg,\n\t\t\t\t\t\tResponseType:          unsupportedBarMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"UNSUPPORTED\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=bars/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              unsupportedBarMsg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\t// Just should not crash, no special handling of unsupported HTTP methods\n\tif got, want := len(result.Paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n}\n\nfunc TestTemplateWithDuplicateHttp1Operations(t *testing.T) {\n\tfieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING\n\tfield1 := &descriptorpb.FieldDescriptorProto{\n\t\tName:   proto.String(\"name\"),\n\t\tNumber: proto.Int32(1),\n\t\tType:   &fieldType,\n\t}\n\tfield2 := &descriptorpb.FieldDescriptorProto{\n\t\tName:   proto.String(\"role\"),\n\t\tNumber: proto.Int32(2),\n\t\tType:   &fieldType,\n\t}\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\tfield1,\n\t\t\tfield2,\n\t\t},\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Method1\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth2 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Method2\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc1 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"Service1\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\tmeth3 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Method3\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tmeth4 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Method4\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\tsvc2 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"Service2\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth3, meth4},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"service1.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc1, svc2},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc1,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=organizations/*}/{role=roles/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              msg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field2,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              msg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"role\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth2,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=users/*}/{role=roles/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              msg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field2,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              msg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"role\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc2,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth3,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=users/*}/roles\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              msg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth4,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/{name=groups/*}/{role=roles/*}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field1,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              msg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tTarget: &descriptor.Field{\n\t\t\t\t\t\t\t\t\t\t\tFieldDescriptorProto: field2,\n\t\t\t\t\t\t\t\t\t\t\tMessage:              msg,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"role\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tif got, want := len(result.Paths), 4; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tfirstOp := result.getPathItemObject(\"/v1/{name}/{role}\").Get\n\tif got, want := firstOp.OperationID, \"Service1_Method1\"; got != want {\n\t\tt.Fatalf(\"First operation id differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(firstOp.Parameters), 3; got != want {\n\t\tt.Fatalf(\"First operation params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := firstOp.Parameters[0].Name, \"name\"; got != want {\n\t\tt.Fatalf(\"First operation first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOp.Parameters[0].Pattern, \"organizations/[^/]+\"; got != want {\n\t\tt.Fatalf(\"First operation first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOp.Parameters[1].Name, \"role\"; got != want {\n\t\tt.Fatalf(\"First operation second param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOp.Parameters[1].Pattern, \"roles/[^/]+\"; got != want {\n\t\tt.Fatalf(\"First operation second param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := firstOp.Parameters[2].In, \"body\"; got != want {\n\t\tt.Fatalf(\"First operation third param 'in' differed, got %s want %s\", got, want)\n\t}\n\n\tsecondOp := result.getPathItemObject(\"/v1/{name\" + pathParamUniqueSuffixDeliminator + \"1}/{role}\").Get\n\tif got, want := secondOp.OperationID, \"Service1_Method2\"; got != want {\n\t\tt.Fatalf(\"Second operation id differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(secondOp.Parameters), 3; got != want {\n\t\tt.Fatalf(\"Second operation params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := secondOp.Parameters[0].Name, \"name\"+pathParamUniqueSuffixDeliminator+\"1\"; got != want {\n\t\tt.Fatalf(\"Second operation first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOp.Parameters[0].Pattern, \"users/[^/]+\"; got != want {\n\t\tt.Fatalf(\"Second operation first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOp.Parameters[1].Name, \"role\"; got != want {\n\t\tt.Fatalf(\"Second operation second param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOp.Parameters[1].Pattern, \"roles/[^/]+\"; got != want {\n\t\tt.Fatalf(\"Second operation second param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := secondOp.Parameters[2].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Second operation third param 'in' differed, got %s want %s\", got, want)\n\t}\n\n\tthirdOp := result.getPathItemObject(\"/v1/{name}/roles\").Get\n\tif got, want := thirdOp.OperationID, \"Service2_Method3\"; got != want {\n\t\tt.Fatalf(\"Third operation id differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(thirdOp.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Third operation params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := thirdOp.Parameters[0].Name, \"name\"; got != want {\n\t\tt.Fatalf(\"Third operation first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := thirdOp.Parameters[0].Pattern, \"users/[^/]+\"; got != want {\n\t\tt.Fatalf(\"Third operation first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := thirdOp.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Third operation second param 'in' differed, got %s want %s\", got, want)\n\t}\n\n\tforthOp := result.getPathItemObject(\"/v1/{name\" + pathParamUniqueSuffixDeliminator + \"2}/{role}\").Get\n\tif got, want := forthOp.OperationID, \"Service2_Method4\"; got != want {\n\t\tt.Fatalf(\"Fourth operation id differed, got %s want %s\", got, want)\n\t}\n\tif got, want := len(forthOp.Parameters), 3; got != want {\n\t\tt.Fatalf(\"Fourth operation params length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := forthOp.Parameters[0].Name, \"name\"+pathParamUniqueSuffixDeliminator+\"2\"; got != want {\n\t\tt.Fatalf(\"Fourth operation first param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := forthOp.Parameters[0].Pattern, \"groups/[^/]+\"; got != want {\n\t\tt.Fatalf(\"Fourth operation first param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := forthOp.Parameters[1].Name, \"role\"; got != want {\n\t\tt.Fatalf(\"Fourth operation second param name differed, got %s want %s\", got, want)\n\t}\n\tif got, want := forthOp.Parameters[1].Pattern, \"roles/[^/]+\"; got != want {\n\t\tt.Fatalf(\"Fourth operation second param pattern differed, got %s want %s\", got, want)\n\t}\n\tif got, want := forthOp.Parameters[2].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Fourth operation second param 'in' differed, got %s want %s\", got, want)\n\t}\n}\n\nfunc Test_getReservedJsonName(t *testing.T) {\n\ttype args struct {\n\t\tfieldName                     string\n\t\tmessageNameToFieldsToJSONName map[string]map[string]string\n\t\tfieldNameToType               map[string]string\n\t}\n\ttests := []struct {\n\t\tname string\n\t\targs args\n\t\twant string\n\t}{\n\t\t{\n\t\t\t\"test case 1: single dot use case\",\n\t\t\targs{\n\t\t\t\tfieldName: \"abc.a_1\",\n\t\t\t\tmessageNameToFieldsToJSONName: map[string]map[string]string{\n\t\t\t\t\t\"Msg\": {\n\t\t\t\t\t\t\"a_1\": \"a1JSONNAME\",\n\t\t\t\t\t\t\"b_1\": \"b1JSONNAME\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfieldNameToType: map[string]string{\n\t\t\t\t\t\"abc\": \"pkg1.test.Msg\",\n\t\t\t\t\t\"bcd\": \"pkg1.test.Msg\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"a1JSONNAME\",\n\t\t},\n\t\t{\n\t\t\t\"test case 2: single dot use case with no existing field\",\n\t\t\targs{\n\t\t\t\tfieldName: \"abc.d_1\",\n\t\t\t\tmessageNameToFieldsToJSONName: map[string]map[string]string{\n\t\t\t\t\t\"Msg\": {\n\t\t\t\t\t\t\"a_1\": \"a1JSONNAME\",\n\t\t\t\t\t\t\"b_1\": \"b1JSONNAME\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfieldNameToType: map[string]string{\n\t\t\t\t\t\"abc\": \"pkg1.test.Msg\",\n\t\t\t\t\t\"bcd\": \"pkg1.test.Msg\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"\",\n\t\t},\n\t\t{\n\t\t\t\"test case 3: double dot use case\",\n\t\t\targs{\n\t\t\t\tfieldName: \"pkg.abc.a_1\",\n\t\t\t\tmessageNameToFieldsToJSONName: map[string]map[string]string{\n\t\t\t\t\t\"Msg\": {\n\t\t\t\t\t\t\"a_1\": \"a1JSONNAME\",\n\t\t\t\t\t\t\"b_1\": \"b1JSONNAME\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfieldNameToType: map[string]string{\n\t\t\t\t\t\"abc\": \"pkg1.test.Msg\",\n\t\t\t\t\t\"bcd\": \"pkg1.test.Msg\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"a1JSONNAME\",\n\t\t},\n\t\t{\n\t\t\t\"test case 4: double dot use case with a not existed field\",\n\t\t\targs{\n\t\t\t\tfieldName: \"pkg.abc.c_1\",\n\t\t\t\tmessageNameToFieldsToJSONName: map[string]map[string]string{\n\t\t\t\t\t\"Msg\": {\n\t\t\t\t\t\t\"a_1\": \"a1JSONNAME\",\n\t\t\t\t\t\t\"b_1\": \"b1JSONNAME\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfieldNameToType: map[string]string{\n\t\t\t\t\t\"abc\": \"pkg1.test.Msg\",\n\t\t\t\t\t\"bcd\": \"pkg1.test.Msg\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"\",\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tif got := getReservedJSONName(tt.args.fieldName, tt.args.messageNameToFieldsToJSONName, tt.args.fieldNameToType); got != tt.want {\n\t\t\t\tt.Errorf(\"getReservedJSONName() = %v, want %v\", got, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestParseIncompleteSecurityRequirement(t *testing.T) {\n\tswagger := openapi_options.Swagger{\n\t\tSecurity: []*openapi_options.SecurityRequirement{\n\t\t\t{\n\t\t\t\tSecurityRequirement: map[string]*openapi_options.SecurityRequirement_SecurityRequirementValue{\n\t\t\t\t\t\"key\": nil,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t}\n\tproto.SetExtension(proto.Message(file.FileDescriptorProto.Options), openapi_options.E_Openapiv2Swagger, &swagger)\n\treg := descriptor.NewRegistry()\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}})\n\tif err != nil {\n\t\tt.Errorf(\"failed to reg.Load(): %v\", err)\n\t\treturn\n\t}\n\t_, err = applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err == nil {\n\t\tt.Errorf(\"applyTemplate(%#v) did not error as expected\", file)\n\t\treturn\n\t}\n}\n\nfunc TestSubPathParams(t *testing.T) {\n\touterParams := []descriptor.Parameter{\n\t\t{\n\t\t\tFieldPath: []descriptor.FieldPathComponent{\n\t\t\t\t{\n\t\t\t\t\tName: \"prefix\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"first\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tFieldPath: []descriptor.FieldPathComponent{\n\t\t\t\t{\n\t\t\t\t\tName: \"prefix\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"second\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"deeper\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tFieldPath: []descriptor.FieldPathComponent{\n\t\t\t\t{\n\t\t\t\t\tName: \"otherprefix\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"third\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tsubParams := subPathParams(\"prefix\", outerParams)\n\n\tif got, want := len(subParams), 2; got != want {\n\t\tt.Fatalf(\"Wrong number of path params, got %d want %d\", got, want)\n\t}\n\tif got, want := len(subParams[0].FieldPath), 1; got != want {\n\t\tt.Fatalf(\"Wrong length of path param 0, got %d want %d\", got, want)\n\t}\n\tif got, want := subParams[0].FieldPath[0].Name, \"first\"; got != want {\n\t\tt.Fatalf(\"Wrong path param 0, element 0, got %s want %s\", got, want)\n\t}\n\tif got, want := len(subParams[1].FieldPath), 2; got != want {\n\t\tt.Fatalf(\"Wrong length of path param 1 got %d want %d\", got, want)\n\t}\n\tif got, want := subParams[1].FieldPath[0].Name, \"second\"; got != want {\n\t\tt.Fatalf(\"Wrong path param 1, element 0, got %s want %s\", got, want)\n\t}\n\tif got, want := subParams[1].FieldPath[1].Name, \"deeper\"; got != want {\n\t\tt.Fatalf(\"Wrong path param 1, element 1, got %s want %s\", got, want)\n\t}\n}\n\nfunc TestRenderServicesParameterDescriptionNoFieldBody(t *testing.T) {\n\toptionsRaw := `{\n\t\t\t\"[grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema]\": {\n\t\t\t  \"jsonSchema\": {\n\t\t\t\t\"title\": \"aMessage title\",\n\t\t\t\t\"description\": \"aMessage description\"\n\t\t\t  }\n\t\t\t}\n      \t}`\n\n\toptions := &descriptorpb.MessageOptions{}\n\terr := protojson.Unmarshal([]byte(optionsRaw), options)\n\tif err != nil {\n\t\tt.Fatalf(\"Error while unmarshalling options: %s\", err.Error())\n\t}\n\n\taMessageDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"AMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"project_id\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"other_field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t\tOptions: options,\n\t}\n\tsomeResponseDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"SomeResponse\"),\n\t}\n\taMeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"AMethod\"),\n\t\tInputType:  proto.String(\"AMessage\"),\n\t\tOutputType: proto.String(\"SomeResponse\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"Test\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{aMeth},\n\t}\n\taMessage := &descriptor.Message{\n\t\tDescriptorProto: aMessageDesc,\n\t}\n\tsomeResponseMessage := &descriptor.Message{\n\t\tDescriptorProto: someResponseDesc,\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"api\"),\n\t\t\tName:           proto.String(\"test.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{aMessageDesc, someResponseDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{aMessage, someResponseMessage},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: aMeth,\n\t\t\t\t\t\tRequestType:           aMessage,\n\t\t\t\t\t\tResponseType:          someResponseMessage,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/projects/someotherpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\terr = reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tgot := result.getPathItemObject(\"/v1/projects/someotherpath\").Post.Parameters[0].Description\n\twant := \"aMessage description\"\n\n\tif got != want {\n\t\tt.Fatalf(\"Wrong description for body parameter, got %s want %s\", got, want)\n\t}\n}\n\nfunc TestRenderServicesWithBodyFieldNameInCamelCase(t *testing.T) {\n\tuserDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"User\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"role\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tupdateDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"UpdateUserRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"user_object\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.User\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"UpdateUser\"),\n\t\tInputType:  proto.String(\"UpdateUserRequest\"),\n\t\tOutputType: proto.String(\"User\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"UserService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tuserMsg := &descriptor.Message{\n\t\tDescriptorProto: userDesc,\n\t}\n\tupdateMsg := &descriptor.Message{\n\t\tDescriptorProto: updateDesc,\n\t}\n\tnameField := &descriptor.Field{\n\t\tMessage:              userMsg,\n\t\tFieldDescriptorProto: userMsg.GetField()[0],\n\t}\n\tnameField.JsonName = proto.String(\"name\")\n\troleField := &descriptor.Field{\n\t\tMessage:              userMsg,\n\t\tFieldDescriptorProto: userMsg.GetField()[1],\n\t}\n\troleField.JsonName = proto.String(\"role\")\n\tuserMsg.Fields = []*descriptor.Field{nameField, roleField}\n\tuserField := &descriptor.Field{\n\t\tMessage:              updateMsg,\n\t\tFieldMessage:         userMsg,\n\t\tFieldDescriptorProto: updateMsg.GetField()[0],\n\t}\n\tuserField.JsonName = proto.String(\"userObject\")\n\tupdateMsg.Fields = []*descriptor.Field{userField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\"user_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{userDesc, updateDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{userMsg, updateMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           updateMsg,\n\t\t\t\t\t\tResponseType:          userMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/users/{user_object.name}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"user_object\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: nameField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: []descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"user_object\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: userField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/v1/users/{userObject.name}\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/v1/users/{userObject.name}\").Post\n\tif got, want := len(operation.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Parameters length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"userObject.name\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"userObject\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\t// The body parameter should be inlined and not contain 'name', as this is a path parameter.\n\tschema := operation.Parameters[1].Schema\n\tif got, want := schema.Ref, \"\"; got != want {\n\t\tt.Fatalf(\"Wrong reference, got %s want %s\", got, want)\n\t}\n\tprops := schema.Properties\n\tif props == nil {\n\t\tt.Fatal(\"No properties on body parameter\")\n\t}\n\tif got, want := len(*props), 1; got != want {\n\t\tt.Fatalf(\"Properties length differed, got %d want %d\", got, want)\n\t}\n\tfor _, v := range *props {\n\t\tif got, want := v.Key, \"role\"; got != want {\n\t\t\tt.Fatalf(\"Wrong key for property, got %s want %s\", got, want)\n\t\t}\n\t}\n}\n\nfunc TestRenderServicesWithBodyFieldHasFieldMask(t *testing.T) {\n\tuserDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"User\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"role\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\tupdateDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"UpdateUserRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"user_object\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.User\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:     proto.String(\"update_mask\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".google.protobuf.FieldMask\"),\n\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"UpdateUser\"),\n\t\tInputType:  proto.String(\"UpdateUserRequest\"),\n\t\tOutputType: proto.String(\"User\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"UserService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tuserMsg := &descriptor.Message{\n\t\tDescriptorProto: userDesc,\n\t}\n\tupdateMsg := &descriptor.Message{\n\t\tDescriptorProto: updateDesc,\n\t}\n\tnameField := &descriptor.Field{\n\t\tMessage:              userMsg,\n\t\tFieldDescriptorProto: userMsg.GetField()[0],\n\t}\n\tnameField.JsonName = proto.String(\"name\")\n\troleField := &descriptor.Field{\n\t\tMessage:              userMsg,\n\t\tFieldDescriptorProto: userMsg.GetField()[1],\n\t}\n\troleField.JsonName = proto.String(\"role\")\n\tuserMsg.Fields = []*descriptor.Field{nameField, roleField}\n\tuserField := &descriptor.Field{\n\t\tMessage:              updateMsg,\n\t\tFieldMessage:         userMsg,\n\t\tFieldDescriptorProto: updateMsg.GetField()[0],\n\t}\n\tuserField.JsonName = proto.String(\"userObject\")\n\tupdateMaskField := &descriptor.Field{\n\t\tMessage:              updateMsg,\n\t\tFieldDescriptorProto: updateMsg.GetField()[1],\n\t}\n\tupdateMaskField.JsonName = proto.String(\"updateMask\")\n\tupdateMsg.Fields = []*descriptor.Field{userField, updateMaskField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\"user_service.proto\"),\n\t\t\tDependency:     []string{\"google/well_known.proto\"},\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{userDesc, updateDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{userMsg, updateMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           updateMsg,\n\t\t\t\t\t\tResponseType:          userMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"PATCH\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/users/{user_object.name}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"user_object\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: nameField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: []descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"user_object\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: userField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\treg.SetAllowPatchFeature(true)\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"google/well_known.proto\"),\n\t\t\tPackage:        proto.String(\"google.protobuf\"),\n\t\t\tDependency:     []string{},\n\t\t\tMessageType: []*descriptorpb.DescriptorProto{\n\t\t\t\tprotodesc.ToDescriptorProto((&field_mask.FieldMask{}).ProtoReflect().Descriptor()),\n\t\t\t},\n\t\t\tService: []*descriptorpb.ServiceDescriptorProto{},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"google/well_known\"),\n\t\t\t},\n\t\t},\n\t\tfile.FileDescriptorProto,\n\t}})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/v1/users/{userObject.name}\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/v1/users/{userObject.name}\").Patch\n\tif got, want := len(operation.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Parameters length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"userObject.name\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"userObject\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n}\n\nfunc TestRenderServicesWithBodyFieldHasRequiredField(t *testing.T) {\n\tfieldBehaviorRequired := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, fieldBehaviorRequired)\n\n\tuserDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"User\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:    proto.String(\"name\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(1),\n\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:    proto.String(\"role\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t},\n\t\t},\n\t}\n\tcreateDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"CreateUserRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"user_object\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.User\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tOptions:  requiredFieldOptions,\n\t\t\t},\n\t\t},\n\t}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"CreateUser\"),\n\t\tInputType:  proto.String(\"CreateUserRequest\"),\n\t\tOutputType: proto.String(\"User\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"UserService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tuserMsg := &descriptor.Message{\n\t\tDescriptorProto: userDesc,\n\t}\n\tcreateMsg := &descriptor.Message{\n\t\tDescriptorProto: createDesc,\n\t}\n\tnameField := &descriptor.Field{\n\t\tMessage:              userMsg,\n\t\tFieldDescriptorProto: userMsg.GetField()[0],\n\t}\n\tnameField.JsonName = proto.String(\"name\")\n\troleField := &descriptor.Field{\n\t\tMessage:              userMsg,\n\t\tFieldDescriptorProto: userMsg.GetField()[1],\n\t}\n\troleField.JsonName = proto.String(\"role\")\n\tuserMsg.Fields = []*descriptor.Field{nameField, roleField}\n\tuserField := &descriptor.Field{\n\t\tMessage:              createMsg,\n\t\tFieldMessage:         userMsg,\n\t\tFieldDescriptorProto: createMsg.GetField()[0],\n\t}\n\tuserField.JsonName = proto.String(\"userObject\")\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\"user_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{userDesc, createDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{userMsg, createMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           createMsg,\n\t\t\t\t\t\tResponseType:          userMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/users\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: []descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"user_object\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: userField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/v1/users\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/v1/users\").Post\n\tif got, want := len(operation.Parameters), 1; got != want {\n\t\tt.Fatalf(\"Parameters length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"userObject\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\tif got := operation.Parameters[0].Required; got != true {\n\t\tt.Fatalf(\"Wrong parameter required, got %v want %v\", got, true)\n\t}\n\n\tif got, want := len(operation.Parameters[0].Schema.Required), 0; got != want {\n\t\tt.Fatalf(\"Wrong parameter schema required, got %v want %v\", got, want)\n\t}\n}\n\nfunc TestRenderServicesWithColonInPath(t *testing.T) {\n\tjsonSchema := &openapi_options.JSONSchema{\n\t\tFieldConfiguration: &openapi_options.JSONSchema_FieldConfiguration{\n\t\t\tPathParamName: \"overrideField\",\n\t\t},\n\t}\n\tfieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(fieldOptions, openapi_options.E_Openapiv2Field, jsonSchema)\n\n\treqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:    proto.String(\"field\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(1),\n\t\t\t\tOptions: fieldOptions,\n\t\t\t},\n\t\t},\n\t}\n\tresDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\treqMsg := &descriptor.Message{\n\t\tDescriptorProto: reqDesc,\n\t}\n\tresMsg := &descriptor.Message{\n\t\tDescriptorProto: resDesc,\n\t}\n\treqField := &descriptor.Field{\n\t\tMessage:              reqMsg,\n\t\tFieldDescriptorProto: reqMsg.GetField()[0],\n\t}\n\tresField := &descriptor.Field{\n\t\tMessage:              resMsg,\n\t\tFieldDescriptorProto: resMsg.GetField()[0],\n\t}\n\treqField.JsonName = proto.String(\"field\")\n\tresField.JsonName = proto.String(\"field\")\n\treqMsg.Fields = []*descriptor.Field{reqField}\n\tresMsg.Fields = []*descriptor.Field{resField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\",my_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqDesc, resDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{reqMsg, resMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/my/{field}:foo\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"field\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: reqField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/my/{overrideField}:foo\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/my/{overrideField}:foo\").Post\n\tif got, want := len(operation.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Parameters length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"overrideField\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Type, \"string\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter type, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n}\n\nfunc TestRenderServicesWithDoubleColonInPath(t *testing.T) {\n\treqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tresDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\treqMsg := &descriptor.Message{\n\t\tDescriptorProto: reqDesc,\n\t}\n\tresMsg := &descriptor.Message{\n\t\tDescriptorProto: resDesc,\n\t}\n\treqField := &descriptor.Field{\n\t\tMessage:              reqMsg,\n\t\tFieldDescriptorProto: reqMsg.GetField()[0],\n\t}\n\tresField := &descriptor.Field{\n\t\tMessage:              resMsg,\n\t\tFieldDescriptorProto: resMsg.GetField()[0],\n\t}\n\treqField.JsonName = proto.String(\"field\")\n\tresField.JsonName = proto.String(\"field\")\n\treqMsg.Fields = []*descriptor.Field{reqField}\n\tresMsg.Fields = []*descriptor.Field{resField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\",my_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqDesc, resDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{reqMsg, resMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/my/{field}:foo:bar\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"field\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: reqField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/my/{field}:foo:bar\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/my/{field}:foo:bar\").Post\n\tif got, want := len(operation.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Parameters length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"field\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Type, \"string\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter type, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n}\n\nfunc TestRenderServicesWithColonLastInPath(t *testing.T) {\n\treqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tresDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\treqMsg := &descriptor.Message{\n\t\tDescriptorProto: reqDesc,\n\t}\n\tresMsg := &descriptor.Message{\n\t\tDescriptorProto: resDesc,\n\t}\n\treqField := &descriptor.Field{\n\t\tMessage:              reqMsg,\n\t\tFieldDescriptorProto: reqMsg.GetField()[0],\n\t}\n\tresField := &descriptor.Field{\n\t\tMessage:              resMsg,\n\t\tFieldDescriptorProto: resMsg.GetField()[0],\n\t}\n\treqField.JsonName = proto.String(\"field\")\n\tresField.JsonName = proto.String(\"field\")\n\treqMsg.Fields = []*descriptor.Field{reqField}\n\tresMsg.Fields = []*descriptor.Field{resField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\",my_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqDesc, resDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{reqMsg, resMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/my/{field}:\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"field\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: reqField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/my/{field}:\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/my/{field}:\").Post\n\tif got, want := len(operation.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Parameters length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"field\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Type, \"string\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter type, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n}\n\nfunc TestRenderServicesWithColonInSegment(t *testing.T) {\n\treqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tresDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\treqMsg := &descriptor.Message{\n\t\tDescriptorProto: reqDesc,\n\t}\n\tresMsg := &descriptor.Message{\n\t\tDescriptorProto: resDesc,\n\t}\n\treqField := &descriptor.Field{\n\t\tMessage:              reqMsg,\n\t\tFieldDescriptorProto: reqMsg.GetField()[0],\n\t}\n\tresField := &descriptor.Field{\n\t\tMessage:              resMsg,\n\t\tFieldDescriptorProto: resMsg.GetField()[0],\n\t}\n\treqField.JsonName = proto.String(\"field\")\n\tresField.JsonName = proto.String(\"field\")\n\treqMsg.Fields = []*descriptor.Field{reqField}\n\tresMsg.Fields = []*descriptor.Field{resField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\",my_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqDesc, resDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{reqMsg, resMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/my/{field=segment/wi:th}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"field\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: reqField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(reqFromFile(&file))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/my/{field}\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/my/{field}\").Post\n\tif got, want := len(operation.Parameters), 2; got != want {\n\t\tt.Fatalf(\"Parameters length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"field\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].Type, \"string\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter type, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location, got %s want %s\", got, want)\n\t}\n}\n\nfunc TestRenderServiceWithHeaderParameters(t *testing.T) {\n\tfile := func() descriptor.File {\n\t\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t}\n\n\t\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\t\tName:       proto.String(\"Example\"),\n\t\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t\t\tOptions:    &descriptorpb.MethodOptions{},\n\t\t}\n\n\t\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t\t}\n\n\t\tmsg := &descriptor.Message{\n\t\t\tDescriptorProto: msgdesc,\n\t\t}\n\n\t\treturn descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\tName: \"example_pb\",\n\t\t\t},\n\t\t\tMessages: []*descriptor.Message{msg},\n\t\t\tServices: []*descriptor.Service{\n\t\t\t\t{\n\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\ttype test struct {\n\t\tfile             func() descriptor.File\n\t\topenapiOperation *openapi_options.Operation\n\t\tparameters       openapiParametersObject\n\t}\n\n\ttests := map[string]*test{\n\t\t\"type string\": {\n\t\t\tfile: file,\n\t\t\topenapiOperation: &openapi_options.Operation{\n\t\t\t\tParameters: &openapi_options.Parameters{\n\t\t\t\t\tHeaders: []*openapi_options.HeaderParameter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\t\t\tType: openapi_options.HeaderParameter_STRING,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tparameters: openapiParametersObject{\n\t\t\t\t{\n\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\tIn:   \"header\",\n\t\t\t\t\tType: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"type string with format\": {\n\t\t\tfile: file,\n\t\t\topenapiOperation: &openapi_options.Operation{\n\t\t\t\tParameters: &openapi_options.Parameters{\n\t\t\t\t\tHeaders: []*openapi_options.HeaderParameter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   \"X-Custom-Header\",\n\t\t\t\t\t\t\tType:   openapi_options.HeaderParameter_STRING,\n\t\t\t\t\t\t\tFormat: \"uuid\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tparameters: openapiParametersObject{\n\t\t\t\t{\n\t\t\t\t\tName:   \"X-Custom-Header\",\n\t\t\t\t\tIn:     \"header\",\n\t\t\t\t\tType:   \"string\",\n\t\t\t\t\tFormat: \"uuid\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"type integer\": {\n\t\t\tfile: file,\n\t\t\topenapiOperation: &openapi_options.Operation{\n\t\t\t\tParameters: &openapi_options.Parameters{\n\t\t\t\t\tHeaders: []*openapi_options.HeaderParameter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\t\t\tType: openapi_options.HeaderParameter_INTEGER,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tparameters: openapiParametersObject{\n\t\t\t\t{\n\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\tIn:   \"header\",\n\t\t\t\t\tType: \"integer\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"type number\": {\n\t\t\tfile: file,\n\t\t\topenapiOperation: &openapi_options.Operation{\n\t\t\t\tParameters: &openapi_options.Parameters{\n\t\t\t\t\tHeaders: []*openapi_options.HeaderParameter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\t\t\tType: openapi_options.HeaderParameter_NUMBER,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tparameters: openapiParametersObject{\n\t\t\t\t{\n\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\tIn:   \"header\",\n\t\t\t\t\tType: \"number\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"type boolean\": {\n\t\t\tfile: file,\n\t\t\topenapiOperation: &openapi_options.Operation{\n\t\t\t\tParameters: &openapi_options.Parameters{\n\t\t\t\t\tHeaders: []*openapi_options.HeaderParameter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\t\t\tType: openapi_options.HeaderParameter_BOOLEAN,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tparameters: openapiParametersObject{\n\t\t\t\t{\n\t\t\t\t\tName: \"X-Custom-Header\",\n\t\t\t\t\tIn:   \"header\",\n\t\t\t\t\tType: \"boolean\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"header required\": {\n\t\t\tfile: file,\n\t\t\topenapiOperation: &openapi_options.Operation{\n\t\t\t\tParameters: &openapi_options.Parameters{\n\t\t\t\t\tHeaders: []*openapi_options.HeaderParameter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:     \"X-Custom-Header\",\n\t\t\t\t\t\t\tRequired: true,\n\t\t\t\t\t\t\tType:     openapi_options.HeaderParameter_STRING,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tparameters: openapiParametersObject{\n\t\t\t\t{\n\t\t\t\t\tName:     \"X-Custom-Header\",\n\t\t\t\t\tIn:       \"header\",\n\t\t\t\t\tRequired: true,\n\t\t\t\t\tType:     \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor name, test := range tests {\n\t\ttest := test\n\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tfile := test.file()\n\n\t\t\tproto.SetExtension(\n\t\t\t\tproto.Message(file.Services[0].Methods[0].Options),\n\t\t\t\topenapi_options.E_Openapiv2Operation,\n\t\t\t\ttest.openapiOperation)\n\n\t\t\treg := descriptor.NewRegistry()\n\n\t\t\tfileCL := crossLinkFixture(&file)\n\n\t\t\terr := reg.Load(reqFromFile(fileCL))\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\t\t}\n\n\t\t\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\t}\n\n\t\t\tparams := result.getPathItemObject(\"/v1/echo\").Get.Parameters\n\n\t\t\tif !reflect.DeepEqual(params, test.parameters) {\n\t\t\t\tt.Errorf(\"expected %+v, got %+v\", test.parameters, params)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc GetPaths(req *openapiSwaggerObject) []string {\n\tpaths := make([]string, len(req.Paths))\n\ti := 0\n\tfor _, k := range req.Paths {\n\t\tpaths[i] = k.Path\n\t\ti++\n\t}\n\treturn paths\n}\n\nfunc TestRenderServicesOpenapiPathsOrderPreserved(t *testing.T) {\n\treqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\n\tresDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod1\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tmeth2 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod2\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\treqMsg := &descriptor.Message{\n\t\tDescriptorProto: reqDesc,\n\t}\n\tresMsg := &descriptor.Message{\n\t\tDescriptorProto: resDesc,\n\t}\n\treqField := &descriptor.Field{\n\t\tMessage:              reqMsg,\n\t\tFieldDescriptorProto: reqMsg.GetField()[0],\n\t}\n\tresField := &descriptor.Field{\n\t\tMessage:              resMsg,\n\t\tFieldDescriptorProto: resMsg.GetField()[0],\n\t}\n\treqField.JsonName = proto.String(\"field\")\n\tresField.JsonName = proto.String(\"field\")\n\treqMsg.Fields = []*descriptor.Field{reqField}\n\tresMsg.Fields = []*descriptor.Field{resField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\",my_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqDesc, resDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{reqMsg, resMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/c/cpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, {\n\t\t\t\t\t\tMethodDescriptorProto: meth2,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/b/bpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetPreserveRPCOrder(true)\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := result.Paths\n\n\tfirstRPCPath := file.Services[0].Methods[0].Bindings[0].PathTmpl.Template\n\tsecondRPCPath := file.Services[0].Methods[1].Bindings[0].PathTmpl.Template\n\tfor i, pathData := range paths {\n\t\tswitch i {\n\t\tcase 0:\n\t\t\tif got, want := pathData.Path, firstRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\tcase 1:\n\t\t\tif got, want := pathData.Path, secondRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestRenderServicesOpenapiPathsOrderPreservedMultipleServices(t *testing.T) {\n\treqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\n\tresDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod1\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tmeth2 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod2\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tmeth3 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod3\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tmeth4 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod4\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\n\tsvc1 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyServiceOne\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\tsvc2 := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyServiceTwo\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth3, meth4},\n\t}\n\treqMsg := &descriptor.Message{\n\t\tDescriptorProto: reqDesc,\n\t}\n\tresMsg := &descriptor.Message{\n\t\tDescriptorProto: resDesc,\n\t}\n\treqField := &descriptor.Field{\n\t\tMessage:              reqMsg,\n\t\tFieldDescriptorProto: reqMsg.GetField()[0],\n\t}\n\tresField := &descriptor.Field{\n\t\tMessage:              resMsg,\n\t\tFieldDescriptorProto: resMsg.GetField()[0],\n\t}\n\treqField.JsonName = proto.String(\"field\")\n\tresField.JsonName = proto.String(\"field\")\n\treqMsg.Fields = []*descriptor.Field{reqField}\n\tresMsg.Fields = []*descriptor.Field{resField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\",my_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqDesc, resDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc1, svc2},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{reqMsg, resMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc1,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/g/gpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, {\n\t\t\t\t\t\tMethodDescriptorProto: meth2,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/f/fpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tServiceDescriptorProto: svc1,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth3,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/c/cpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, {\n\t\t\t\t\t\tMethodDescriptorProto: meth4,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/b/bpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetPreserveRPCOrder(true)\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := result.Paths\n\n\tfirstRPCPath := file.Services[0].Methods[0].Bindings[0].PathTmpl.Template\n\tsecondRPCPath := file.Services[0].Methods[1].Bindings[0].PathTmpl.Template\n\tthirdRPCPath := file.Services[1].Methods[0].Bindings[0].PathTmpl.Template\n\tfourthRPCPath := file.Services[1].Methods[1].Bindings[0].PathTmpl.Template\n\tfor i, pathData := range paths {\n\t\tswitch i {\n\t\tcase 0:\n\t\t\tif got, want := pathData.Path, firstRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\tcase 1:\n\t\t\tif got, want := pathData.Path, secondRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\tcase 2:\n\t\t\tif got, want := pathData.Path, thirdRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\tcase 3:\n\t\t\tif got, want := pathData.Path, fourthRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestRenderServicesOpenapiPathsOrderPreservedAdditionalBindings(t *testing.T) {\n\treqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\n\tresDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"MyResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"field\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t},\n\t}\n\tmeth1 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod1\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\tmeth2 := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"MyMethod2\"),\n\t\tInputType:  proto.String(\"MyRequest\"),\n\t\tOutputType: proto.String(\"MyResponse\"),\n\t}\n\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"MyService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth1, meth2},\n\t}\n\treqMsg := &descriptor.Message{\n\t\tDescriptorProto: reqDesc,\n\t}\n\tresMsg := &descriptor.Message{\n\t\tDescriptorProto: resDesc,\n\t}\n\treqField := &descriptor.Field{\n\t\tMessage:              reqMsg,\n\t\tFieldDescriptorProto: reqMsg.GetField()[0],\n\t}\n\tresField := &descriptor.Field{\n\t\tMessage:              resMsg,\n\t\tFieldDescriptorProto: resMsg.GetField()[0],\n\t}\n\treqField.JsonName = proto.String(\"field\")\n\tresField.JsonName = proto.String(\"field\")\n\treqMsg.Fields = []*descriptor.Field{reqField}\n\tresMsg.Fields = []*descriptor.Field{resField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tName:           proto.String(\",my_service.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqDesc, resDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{reqMsg, resMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth1,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/c/cpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/additionalbinding\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, {\n\t\t\t\t\t\tMethodDescriptorProto: meth2,\n\t\t\t\t\t\tRequestType:           reqMsg,\n\t\t\t\t\t\tResponseType:          resMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/b/bpath\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetPreserveRPCOrder(true)\n\treg.SetUseJSONNamesForFields(true)\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to reg.Load(): %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := result.Paths\n\tif err != nil {\n\t\tt.Fatalf(\"failed to obtain extension paths: %v\", err)\n\t}\n\n\tfirstRPCPath := file.Services[0].Methods[0].Bindings[0].PathTmpl.Template\n\tfirstRPCPathAdditionalBinding := file.Services[0].Methods[0].Bindings[1].PathTmpl.Template\n\tsecondRPCPath := file.Services[0].Methods[1].Bindings[0].PathTmpl.Template\n\tfor i, pathData := range paths {\n\t\tswitch i {\n\t\tcase 0:\n\t\t\tif got, want := pathData.Path, firstRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\tcase 1:\n\t\t\tif got, want := pathData.Path, firstRPCPathAdditionalBinding; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\tcase 2:\n\t\t\tif got, want := pathData.Path, secondRPCPath; got != want {\n\t\t\t\tt.Fatalf(\"RPC path order not preserved, got %s want %s\", got, want)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestRenderServicesOpenapiRequiredBodyFieldContainingPathParam(t *testing.T) {\n\tfieldBehaviorRequired := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, fieldBehaviorRequired)\n\n\tbookDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Book\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"type\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\taddBookReqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"AddBookReq\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"book\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".Book\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tOptions:  requiredFieldOptions,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:    proto.String(\"libraryId\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_UINT32.Enum(),\n\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"isLatestEdition\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(),\n\t\t\t\tNumber: proto.Int32(3),\n\t\t\t},\n\t\t},\n\t}\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"AddBook\"),\n\t\tInputType:  proto.String(\"AddBookReq\"),\n\t\tOutputType: proto.String(\"Book\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"BookService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tbookMsg := &descriptor.Message{\n\t\tDescriptorProto: bookDesc,\n\t}\n\taddBookReqMsg := &descriptor.Message{\n\t\tDescriptorProto: addBookReqDesc,\n\t}\n\n\tnameField := &descriptor.Field{\n\t\tMessage:              bookMsg,\n\t\tFieldDescriptorProto: bookMsg.GetField()[0],\n\t}\n\ttypeField := &descriptor.Field{\n\t\tMessage:              bookMsg,\n\t\tFieldDescriptorProto: bookMsg.GetField()[1],\n\t}\n\tbookMsg.Fields = []*descriptor.Field{nameField, typeField}\n\n\tbookField := &descriptor.Field{\n\t\tMessage:              addBookReqMsg,\n\t\tFieldMessage:         bookMsg,\n\t\tFieldDescriptorProto: addBookReqMsg.GetField()[0],\n\t}\n\tlibraryIdField := &descriptor.Field{\n\t\tMessage:              addBookReqMsg,\n\t\tFieldDescriptorProto: addBookReqMsg.GetField()[1],\n\t}\n\tisLatestEditionField := &descriptor.Field{\n\t\tMessage:              addBookReqMsg,\n\t\tFieldDescriptorProto: addBookReqMsg.GetField()[2],\n\t}\n\taddBookReqMsg.Fields = []*descriptor.Field{bookField, libraryIdField, isLatestEditionField}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"book.proto\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{bookDesc, addBookReqDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{bookMsg, addBookReqMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           addBookReqMsg,\n\t\t\t\t\t\tResponseType:          bookMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/books/{book.type}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"book\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"type\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: typeField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: []descriptor.FieldPathComponent{},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\tif got, want := paths[0], \"/v1/books/{book.type}\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/v1/books/{book.type}\").Post\n\n\tif got, want := operation.Parameters[0].Name, \"book.type\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name 0, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location 0, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name 1, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location 1, got %s want %s\", got, want)\n\t}\n\n\tif want, is, name := \"#/definitions/BookServiceAddBookBody\", operation.Parameters[1].Schema.schemaCore.Ref, \"operation.Parameters[1].Schema.schemaCore.Ref\"; !reflect.DeepEqual(is, want) {\n\t\tt.Fatalf(\"%s = %s want to be %s\", name, want, is)\n\t}\n\n\tdefinition, found := result.Definitions[\"BookServiceAddBookBody\"]\n\tif !found {\n\t\tt.Fatalf(\"expecting definition to contain BookServiceAddBookBody\")\n\t}\n\n\tif want, is, name := 3, len(*definition.Properties), \"len(*definition.Properties)\"; !reflect.DeepEqual(is, want) {\n\t\tt.Fatalf(\"%s = %d want to be %d\", name, want, is)\n\t}\n\n\tfor index, keyValue := range []string{\"book\", \"libraryId\", \"isLatestEdition\"} {\n\t\tif got, want := (*definition.Properties)[index].Key, keyValue; got != want {\n\t\t\tt.Fatalf(\"Wrong definition property %d, got %s want %s\", index, got, want)\n\t\t}\n\t}\n\n\tcorrectRequiredFields := []string{\"book\", \"libraryId\"}\n\tif got, want := definition.Required, correctRequiredFields; !reflect.DeepEqual(got, want) {\n\t\tt.Fatalf(\"Wrong required fields in body definition, got = %s, want = %s\", got, want)\n\t}\n}\n\nfunc TestArrayMessageItemsType(t *testing.T) {\n\tmsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"children\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.ExampleMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tJsonName: proto.String(\"children\"),\n\t\t\t},\n\t\t},\n\t}\n\n\tnestDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestDescMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"children\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.ExampleMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tJsonName: proto.String(\"children\"),\n\t\t\t},\n\t\t},\n\t}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"NestDescMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgDesc,\n\t}\n\tnsg := &descriptor.Message{\n\t\tDescriptorProto: nestDesc,\n\t}\n\tmsg.Fields = []*descriptor.Field{\n\t\t{\n\t\t\tMessage:              msg,\n\t\t\tFieldDescriptorProto: msg.GetField()[0],\n\t\t},\n\t}\n\tnsg.Fields = []*descriptor.Field{\n\t\t{\n\t\t\tMessage:              nsg,\n\t\t\tFieldDescriptorProto: nsg.GetField()[0],\n\t\t},\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgDesc, nestDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg, nsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          nsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\", // TODO(achew22): Figure out what this should really be\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfileCL := crossLinkFixture(&file)\n\tif err := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\t{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"acme/example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgDesc, nestDesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"acme/example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}); err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\texpect := openapiDefinitionsObject{\n\t\t\"rpcStatus\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"code\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType:   \"integer\",\n\t\t\t\t\t\t\tFormat: \"int32\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"message\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"details\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"array\",\n\t\t\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t\t\t\t\tRef:  \"#/definitions/protobufAny\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"exampleExampleMessage\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"children\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"array\",\n\t\t\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t\t\t\t\tRef:  \"#/definitions/exampleExampleMessage\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"exampleNestDescMessage\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"children\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"array\",\n\t\t\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\tType: \"object\",\n\t\t\t\t\t\t\t\t\tRef:  \"#/definitions/exampleExampleMessage\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"protobufAny\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"@type\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAdditionalProperties: &openapiSchemaObject{},\n\t\t},\n\t}\n\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tif want, is, name := []string{\"application/json\"}, result.Produces, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := expect, result.Definitions, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %v want to be %v\", file, name, is, want)\n\t}\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestArrayMessageItemsTypeOmitWhenRefSibling(t *testing.T) {\n\tmsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"children\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.ExampleMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tJsonName: proto.String(\"children\"),\n\t\t\t},\n\t\t},\n\t}\n\n\tnestDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"NestDescMessage\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"children\"),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.ExampleMessage\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tJsonName: proto.String(\"children\"),\n\t\t\t},\n\t\t},\n\t}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"NestDescMessage\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgDesc,\n\t}\n\tnsg := &descriptor.Message{\n\t\tDescriptorProto: nestDesc,\n\t}\n\tmsg.Fields = []*descriptor.Field{\n\t\t{\n\t\t\tMessage:              msg,\n\t\t\tFieldDescriptorProto: msg.GetField()[0],\n\t\t},\n\t}\n\tnsg.Fields = []*descriptor.Field{\n\t\t{\n\t\t\tMessage:              nsg,\n\t\t\tFieldDescriptorProto: nsg.GetField()[0],\n\t\t},\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgDesc, nestDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg, nsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          nsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(true)\n\t// Enable the flag to omit type when $ref is present\n\treg.SetOmitArrayItemTypeWhenRefSibling(true)\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfileCL := crossLinkFixture(&file)\n\tif err := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\t{\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tName:           proto.String(\"acme/example.proto\"),\n\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgDesc, nestDesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"acme/example\"),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}); err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\texpect := openapiDefinitionsObject{\n\t\t\"rpcStatus\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"code\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType:   \"integer\",\n\t\t\t\t\t\t\tFormat: \"int32\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"message\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"details\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"array\",\n\t\t\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\t// Type should be omitted when flag is enabled\n\t\t\t\t\t\t\t\t\tRef: \"#/definitions/protobufAny\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"exampleExampleMessage\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"children\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"array\",\n\t\t\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\t// Type should be omitted when flag is enabled\n\t\t\t\t\t\t\t\t\tRef: \"#/definitions/exampleExampleMessage\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"exampleNestDescMessage\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"children\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"array\",\n\t\t\t\t\t\t\tItems: &openapiItemsObject{\n\t\t\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\t\t\t// Type should be omitted when flag is enabled\n\t\t\t\t\t\t\t\t\tRef: \"#/definitions/exampleExampleMessage\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"protobufAny\": openapiSchemaObject{\n\t\t\tschemaCore: schemaCore{\n\t\t\t\tType: \"object\",\n\t\t\t},\n\t\t\tProperties: &openapiSchemaObjectProperties{\n\t\t\t\tkeyVal{\n\t\t\t\t\tKey: \"@type\",\n\t\t\t\t\tValue: openapiSchemaObject{\n\t\t\t\t\t\tschemaCore: schemaCore{\n\t\t\t\t\t\t\tType: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAdditionalProperties: &openapiSchemaObject{},\n\t\t},\n\t}\n\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tif want, is, name := []string{\"application/json\"}, result.Produces, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\tif want, is, name := expect, result.Definitions, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %v want to be %v\", file, name, is, want)\n\t}\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestQueryParameterType(t *testing.T) {\n\tntDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"AddressEntry\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"key\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tJsonName: proto.String(\"key\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:     proto.String(\"value\"),\n\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tJsonName: proto.String(\"value\"),\n\t\t\t},\n\t\t},\n\t\tOptions: &descriptorpb.MessageOptions{\n\t\t\tMapEntry: proto.Bool(true),\n\t\t},\n\t}\n\n\tmsgDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Person\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"Address\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".example.com.Person.AddressEntry\"),\n\t\t\t\tJsonName: proto.String(\"Address\"),\n\t\t\t},\n\t\t},\n\t\tNestedType: []*descriptorpb.DescriptorProto{\n\t\t\tntDesc,\n\t\t},\n\t}\n\n\tnesteDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleResponse\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"Key\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tJsonName: proto.String(\"Key\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:     proto.String(\"Value\"),\n\t\t\t\tNumber:   proto.Int32(2),\n\t\t\t\tLabel:    descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(),\n\t\t\t\tJsonName: proto.String(\"Value\"),\n\t\t\t},\n\t\t},\n\t}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"Person\"),\n\t\tOutputType: proto.String(\"ExampleResponse\"),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgDesc,\n\t}\n\tnt := &descriptor.Message{\n\t\tDescriptorProto: ntDesc,\n\t}\n\tnest := &descriptor.Message{\n\t\tDescriptorProto: nesteDesc,\n\t}\n\tmsg.Fields = []*descriptor.Field{\n\t\t{\n\t\t\tMessage:              msg,\n\t\t\tFieldDescriptorProto: msg.GetField()[0],\n\t\t},\n\t}\n\tnt.Fields = []*descriptor.Field{\n\t\t{\n\t\t\tMessage:              nt,\n\t\t\tFieldDescriptorProto: msg.GetField()[0],\n\t\t},\n\t}\n\tnest.Fields = []*descriptor.Field{\n\t\t{\n\t\t\tMessage:              nest,\n\t\t\tFieldDescriptorProto: nest.GetField()[0],\n\t\t},\n\t\t{\n\t\t\tMessage:              nest,\n\t\t\tFieldDescriptorProto: nest.GetField()[1],\n\t\t},\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"person.proto\"),\n\t\t\tPackage:        proto.String(\"example.com\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgDesc, nesteDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg, nest},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          nest,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\texpect := openapiPathsObject{{\n\t\tPath: \"/v1/echo\",\n\t\tPathItemObject: openapiPathItemObject{\n\t\t\tGet: &openapiOperationObject{\n\t\t\t\tParameters: openapiParametersObject{\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"Address[string]\",\n\t\t\t\t\t\tIn:   \"query\",\n\t\t\t\t\t\tType: \"integer\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}}\n\n\treg := descriptor.NewRegistry()\n\treg.SetUseJSONNamesForFields(false)\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\t{\n\t\t\t\tName:           proto.String(\"person.proto\"),\n\t\t\t\tPackage:        proto.String(\"example.com\"),\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgDesc, nesteDesc},\n\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{},\n\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\tGoPackage: proto.String(\"person.proto\"),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\tif want, is, name := []string{\"application/json\"}, result.Produces, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, is, want)\n\t}\n\n\tif want, is, name := expect[0].PathItemObject.Get.Parameters, result.getPathItemObject(\"/v1/echo\").Get.Parameters, \"Produces\"; !reflect.DeepEqual(is, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %v want to be %v\", file, name, is, want)\n\t}\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\nfunc TestApplyTemplateRequestWithServerStreamingHttpBody(t *testing.T) {\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:            proto.String(\"Echo\"),\n\t\tInputType:       proto.String(\".google.api.HttpBody\"),\n\t\tOutputType:      proto.String(\".google.api.HttpBody\"),\n\t\tClientStreaming: proto.Bool(false),\n\t\tServerStreaming: proto.Bool(true),\n\t}\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"ExampleService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\thttpBodyFile, err := protoregistry.GlobalFiles.FindFileByPath(\"google/api/httpbody.proto\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\thttpBodyFile.SourceLocations()\n\tdesc, err := protoregistry.GlobalFiles.FindDescriptorByName(\"google.api.HttpBody\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: protodesc.ToDescriptorProto(desc.(protoreflect.MessageDescriptor)),\n\t\tFile: &descriptor.File{\n\t\t\tFileDescriptorProto: protodesc.ToFileDescriptorProto(httpBodyFile),\n\t\t},\n\t}\n\tanyFile, err := protoregistry.GlobalFiles.FindFileByPath(\"google/protobuf/any.proto\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tDependency: []string{\n\t\t\t\t\"google/api/httpbody.proto\",\n\t\t\t},\n\t\t\tService: []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"POST\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treg := descriptor.NewRegistry()\n\tif err := AddErrorDefs(reg); err != nil {\n\t\tt.Errorf(\"AddErrorDefs(%#v) failed with %v; want success\", reg, err)\n\t\treturn\n\t}\n\terr = reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{\n\t\t\tprotodesc.ToFileDescriptorProto(anyFile),\n\t\t\tprotodesc.ToFileDescriptorProto(httpBodyFile),\n\t\t\tfile.FileDescriptorProto,\n\t\t},\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t}\n\tresult, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Errorf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\tif want, got, name := 3, len(result.Definitions), \"len(Definitions)\"; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = %d want to be %d\", file, name, got, want)\n\t}\n\n\tif _, ok := result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"]; !ok {\n\t\tt.Errorf(\"applyTemplate(%#v).%s = expected 200 response to be defined\", file, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"]`)\n\t} else {\n\t\tif want, got, name := \"A successful response.(streaming responses)\", result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Description, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Description`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tstreamExampleExampleMessage := result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema\n\t\tif want, got, name := \"string\", streamExampleExampleMessage.Type, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema.Type`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tif want, got, name := \"binary\", streamExampleExampleMessage.Format, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema.Format`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tif want, got, name := \"Free form byte stream\", streamExampleExampleMessage.Title, `result.getPathItemObject(\"/v1/echo\").Post.Responses[\"200\"].Schema.Title`; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"applyTemplate(%#v).%s = %s want to be %s\", file, name, got, want)\n\t\t}\n\t\tif len(*streamExampleExampleMessage.Properties) != 0 {\n\t\t\tt.Errorf(\"applyTemplate(%#v).Properties should be empty\", file)\n\t\t}\n\t}\n\n\t// If there was a failure, print out the input and the json result for debugging.\n\tif t.Failed() {\n\t\tt.Errorf(\"had: %s\", file)\n\t\tt.Errorf(\"got: %s\", fmt.Sprint(result))\n\t}\n}\n\n// Returns the openapiPathItemObject associated with a path.\nfunc (so openapiSwaggerObject) getPathItemObject(path string) openapiPathItemObject {\n\tfor _, pathData := range so.Paths {\n\t\tif pathData.Path == path {\n\t\t\treturn pathData.PathItemObject\n\t\t}\n\t}\n\n\treturn openapiPathItemObject{}\n}\n\nfunc TestGetPathItemObjectSwaggerObjectMethod(t *testing.T) {\n\ttestCases := [...]struct {\n\t\ttestName               string\n\t\tswaggerObject          openapiSwaggerObject\n\t\tpath                   string\n\t\texpectedPathItemObject openapiPathItemObject\n\t}{\n\t\t{\n\t\t\ttestName: \"Path present in swagger object\",\n\t\t\tswaggerObject: openapiSwaggerObject{Paths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}}},\n\t\t\tpath: \"a/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{\n\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t},\n\t\t\t},\n\t\t}, {\n\t\t\ttestName: \"Path not present in swaggerObject\",\n\t\t\tswaggerObject: openapiSwaggerObject{Paths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}}},\n\t\t\tpath:                   \"b/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{},\n\t\t}, {\n\t\t\ttestName: \"Path present in swaggerPathsObject with multiple paths\",\n\t\t\tswaggerObject: openapiSwaggerObject{Paths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tPath: \"another/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"Another testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}}},\n\t\t\tpath: \"another/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{\n\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\tDescription: \"Another testful description\",\n\t\t\t\t},\n\t\t\t},\n\t\t}, {\n\t\t\ttestName:               \"Path not present in swaggerObject with no paths\",\n\t\t\tswaggerObject:          openapiSwaggerObject{},\n\t\t\tpath:                   \"b/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{},\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(tc.testName, func(t *testing.T) {\n\t\t\tactualPathItemObject := tc.swaggerObject.getPathItemObject(tc.path)\n\t\t\tif isEqual := reflect.DeepEqual(actualPathItemObject, tc.expectedPathItemObject); !isEqual {\n\t\t\t\tt.Fatalf(\"Got pathItemObject: %#v, want pathItemObject: %#v\", actualPathItemObject, tc.expectedPathItemObject)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGetPathItemObjectFunction(t *testing.T) {\n\ttestCases := [...]struct {\n\t\ttestName               string\n\t\tpaths                  openapiPathsObject\n\t\tpath                   string\n\t\texpectedPathItemObject openapiPathItemObject\n\t\texpectedIsPathPresent  bool\n\t}{\n\t\t{\n\t\t\ttestName: \"Path present in openapiPathsObject\",\n\t\t\tpaths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t\tpath: \"a/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{\n\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t},\n\t\t\t},\n\t\t\texpectedIsPathPresent: true,\n\t\t}, {\n\t\t\ttestName: \"Path not present in openapiPathsObject\",\n\t\t\tpaths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t\tpath:                   \"b/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{},\n\t\t\texpectedIsPathPresent:  false,\n\t\t}, {\n\t\t\ttestName: \"Path present in openapiPathsObject with multiple paths\",\n\t\t\tpaths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tPath: \"another/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"Another testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t\tpath: \"another/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{\n\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\tDescription: \"Another testful description\",\n\t\t\t\t},\n\t\t\t},\n\t\t\texpectedIsPathPresent: true,\n\t\t}, {\n\t\t\ttestName:               \"Path not present in empty openapiPathsObject\",\n\t\t\tpaths:                  openapiPathsObject{},\n\t\t\tpath:                   \"b/path\",\n\t\t\texpectedPathItemObject: openapiPathItemObject{},\n\t\t\texpectedIsPathPresent:  false,\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(tc.testName, func(t *testing.T) {\n\t\t\tactualPathItemObject, actualIsPathPresent := getPathItemObject(tc.paths, tc.path)\n\t\t\tif isEqual := reflect.DeepEqual(actualPathItemObject, tc.expectedPathItemObject); !isEqual {\n\t\t\t\tt.Fatalf(\"Got pathItemObject: %#v, want pathItemObject: %#v\", actualPathItemObject, tc.expectedPathItemObject)\n\t\t\t}\n\t\t\tif actualIsPathPresent != tc.expectedIsPathPresent {\n\t\t\t\tt.Fatalf(\"Got isPathPresent bool: %t, want isPathPresent bool: %t\", actualIsPathPresent, tc.expectedIsPathPresent)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestUpdatePaths(t *testing.T) {\n\ttestCases := [...]struct {\n\t\ttestName             string\n\t\tpaths                openapiPathsObject\n\t\tpathToUpdate         string\n\t\tnewPathItemObject    openapiPathItemObject\n\t\texpectedUpdatedPaths openapiPathsObject\n\t}{\n\t\t{\n\t\t\ttestName: \"Path present in openapiPathsObject, pathItemObject updated.\",\n\t\t\tpaths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t\tpathToUpdate: \"a/path\",\n\t\t\tnewPathItemObject: openapiPathItemObject{\n\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\tDescription: \"A newly updated testful description\",\n\t\t\t\t},\n\t\t\t},\n\t\t\texpectedUpdatedPaths: openapiPathsObject{{\n\t\t\t\tPath: \"a/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A newly updated testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t}, {\n\t\t\ttestName: \"Path not present in openapiPathsObject, new path data appended.\",\n\t\t\tpaths: openapiPathsObject{{\n\t\t\t\tPath: \"c/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t\tpathToUpdate: \"b/path\",\n\t\t\tnewPathItemObject: openapiPathItemObject{\n\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\tDescription: \"A new testful description to add\",\n\t\t\t\t},\n\t\t\t},\n\t\t\texpectedUpdatedPaths: openapiPathsObject{{\n\t\t\t\tPath: \"c/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A testful description\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tPath: \"b/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A new testful description to add\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t}, {\n\t\t\ttestName:     \"No paths present in openapiPathsObject, new path data appended.\",\n\t\t\tpaths:        openapiPathsObject{},\n\t\t\tpathToUpdate: \"b/path\",\n\t\t\tnewPathItemObject: openapiPathItemObject{\n\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\tDescription: \"A new testful description to add\",\n\t\t\t\t},\n\t\t\t},\n\t\t\texpectedUpdatedPaths: openapiPathsObject{{\n\t\t\t\tPath: \"b/path\",\n\t\t\t\tPathItemObject: openapiPathItemObject{\n\t\t\t\t\tGet: &openapiOperationObject{\n\t\t\t\t\t\tDescription: \"A new testful description to add\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}},\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(tc.testName, func(t *testing.T) {\n\t\t\tupdatePaths(&tc.paths, tc.pathToUpdate, tc.newPathItemObject)\n\t\t\tif pathsCorrectlyUpdated := reflect.DeepEqual(tc.paths, tc.expectedUpdatedPaths); !pathsCorrectlyUpdated {\n\t\t\t\tt.Fatalf(\"Paths not correctly updated. Want %#v, got %#v\", tc.expectedUpdatedPaths, tc.paths)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// Test that enum values have internal comments removed\nfunc TestEnumValueProtoComments(t *testing.T) {\n\treg := descriptor.NewRegistry()\n\tname := \"kind\"\n\tcomments := \"(-- this is a comment --)\"\n\n\tenum := &descriptor.Enum{\n\t\tEnumDescriptorProto: &descriptorpb.EnumDescriptorProto{\n\t\t\tName: &name,\n\t\t},\n\t\tFile: &descriptor.File{\n\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\tName:    new(string),\n\t\t\t\tPackage: new(string),\n\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{\n\t\t\t\t\tLocation: []*descriptorpb.SourceCodeInfo_Location{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLeadingComments: &comments,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tcomments = enumValueProtoComments(reg, enum)\n\tif comments != \"\" {\n\t\tt.Errorf(\"expected '', got '%v'\", comments)\n\t}\n}\n\nfunc MustMarshal(v interface{}) []byte {\n\tb, err := json.Marshal(v)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn b\n}\n\nfunc TestMergeTags(t *testing.T) {\n\ttestCases := [...]struct {\n\t\ttestName           string\n\t\texistingTags       []openapiTagObject\n\t\tnewTags            []openapiTagObject\n\t\texpectedMergedTags []openapiTagObject\n\t}{\n\t\t{\n\t\t\ttestName: \"Simple merge.\",\n\t\t\texistingTags: []openapiTagObject{{\n\t\t\t\tName:        \"tag1\",\n\t\t\t\tDescription: \"tag1 description\",\n\t\t\t}},\n\t\t\tnewTags: []openapiTagObject{{\n\t\t\t\tName:        \"tag2\",\n\t\t\t\tDescription: \"tag2 description\",\n\t\t\t}},\n\t\t\texpectedMergedTags: []openapiTagObject{{\n\t\t\t\tName:        \"tag1\",\n\t\t\t\tDescription: \"tag1 description\",\n\t\t\t}, {\n\t\t\t\tName:        \"tag2\",\n\t\t\t\tDescription: \"tag2 description\",\n\t\t\t}},\n\t\t},\n\t\t{\n\t\t\ttestName: \"Merge description\",\n\t\t\texistingTags: []openapiTagObject{{\n\t\t\t\tName:        \"tag1\",\n\t\t\t\tDescription: \"tag1 description\",\n\t\t\t}, {\n\t\t\t\tName: \"tag2\",\n\t\t\t}, {\n\t\t\t\tName:        \"tag3\",\n\t\t\t\tDescription: \"tag3 description\",\n\t\t\t}},\n\t\t\tnewTags: []openapiTagObject{{\n\t\t\t\tName:        \"tag2\",\n\t\t\t\tDescription: \"tag2 description\",\n\t\t\t}},\n\t\t\texpectedMergedTags: []openapiTagObject{{\n\t\t\t\tName:        \"tag1\",\n\t\t\t\tDescription: \"tag1 description\",\n\t\t\t}, {\n\t\t\t\tName:        \"tag2\",\n\t\t\t\tDescription: \"tag2 description\",\n\t\t\t}, {\n\t\t\t\tName:        \"tag3\",\n\t\t\t\tDescription: \"tag3 description\",\n\t\t\t}},\n\t\t},\n\t\t{\n\t\t\ttestName: \"Merge external docs\",\n\t\t\texistingTags: []openapiTagObject{{\n\t\t\t\tName:         \"tag1\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{},\n\t\t\t}, {\n\t\t\t\tName: \"tag2\",\n\t\t\t}, {\n\t\t\t\tName: \"tag3\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag3 description\",\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag4\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tURL: \"tag4 url\",\n\t\t\t\t},\n\t\t\t}},\n\t\t\tnewTags: []openapiTagObject{{\n\t\t\t\tName: \"tag1\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag1 description\",\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag2\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag2 description\",\n\t\t\t\t\tURL:         \"tag2 url\",\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag3\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"ignored tag3 description\",\n\t\t\t\t\tURL:         \"tag3 url\",\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag4\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag4 description\",\n\t\t\t\t},\n\t\t\t}},\n\t\t\texpectedMergedTags: []openapiTagObject{{\n\t\t\t\tName: \"tag1\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag1 description\",\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag2\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag2 description\",\n\t\t\t\t\tURL:         \"tag2 url\",\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag3\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag3 description\",\n\t\t\t\t\tURL:         \"tag3 url\",\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag4\",\n\t\t\t\tExternalDocs: &openapiExternalDocumentationObject{\n\t\t\t\t\tDescription: \"tag4 description\",\n\t\t\t\t\tURL:         \"tag4 url\",\n\t\t\t\t},\n\t\t\t}},\n\t\t},\n\t\t{\n\t\t\ttestName: \"Merge extensions\",\n\t\t\texistingTags: []openapiTagObject{{\n\t\t\t\tName:       \"tag1\",\n\t\t\t\textensions: []extension{{key: \"x-key1\", value: MustMarshal(\"key1 extension\")}},\n\t\t\t}, {\n\t\t\t\tName: \"tag2\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t\t{key: \"x-key2\", value: MustMarshal(\"key2 extension\")},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag3\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName:       \"tag4\",\n\t\t\t\textensions: nil,\n\t\t\t}},\n\t\t\tnewTags: []openapiTagObject{{\n\t\t\t\tName:       \"tag1\",\n\t\t\t\textensions: []extension{{key: \"x-key2\", value: MustMarshal(\"key2 extension\")}},\n\t\t\t}, {\n\t\t\t\tName: \"tag2\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t\t{key: \"x-key2\", value: MustMarshal(\"ignored key2 extension\")},\n\t\t\t\t\t{key: \"x-key3\", value: MustMarshal(\"key3 extension\")},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName:       \"tag3\",\n\t\t\t\textensions: nil,\n\t\t\t}, {\n\t\t\t\tName: \"tag4\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t},\n\t\t\t}},\n\t\t\texpectedMergedTags: []openapiTagObject{{\n\t\t\t\tName: \"tag1\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t\t{key: \"x-key2\", value: MustMarshal(\"key2 extension\")},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag2\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t\t{key: \"x-key2\", value: MustMarshal(\"key2 extension\")},\n\t\t\t\t\t{key: \"x-key3\", value: MustMarshal(\"key3 extension\")},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag3\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t},\n\t\t\t}, {\n\t\t\t\tName: \"tag4\",\n\t\t\t\textensions: []extension{\n\t\t\t\t\t{key: \"x-key1\", value: MustMarshal(\"key1 extension\")},\n\t\t\t\t},\n\t\t\t}},\n\t\t},\n\t}\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\t\tt.Run(tc.testName, func(t *testing.T) {\n\t\t\tmergedTags := mergeTags(tc.existingTags, tc.newTags)\n\t\t\tif !reflect.DeepEqual(tc.expectedMergedTags, mergedTags) {\n\t\t\t\tt.Fatalf(\"%s: Tags not correctly merged. Want %#v, got %#v\", tc.testName, tc.expectedMergedTags, mergedTags)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestApiVisibilityOption(t *testing.T) {\n\treg := descriptor.NewRegistry()\n\n\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"ExampleMessage\"),\n\t}\n\n\tmsg := &descriptor.Message{\n\t\tDescriptorProto: msgdesc,\n\t}\n\n\tmethodExample := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"Example\"),\n\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t}\n\n\tserviceOptions := &descriptorpb.ServiceOptions{}\n\tproto.SetExtension(serviceOptions, visibility.E_ApiVisibility, &visibility.VisibilityRule{\n\t\tRestriction: \"INTERNAL\",\n\t})\n\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:    proto.String(\"ExampleService\"),\n\t\tOptions: serviceOptions,\n\t\tMethod:  []*descriptorpb.MethodDescriptorProto{methodExample},\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\tPackage:        proto.String(\"example\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\tName: \"example_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{msg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: methodExample,\n\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\tBody:       &descriptor.Body{FieldPath: nil},\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/v1/example\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\terr := reg.Load(&pluginpb.CodeGeneratorRequest{\n\t\tProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto},\n\t})\n\tif err != nil {\n\t\tt.Errorf(\"failed to reg.Load(req): %v\", err)\n\t}\n\n\tactual, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tif len(actual.Definitions) != 0 {\n\t\tt.Fatal(\"Definition should be excluded by api visibility option\")\n\t}\n}\n\nfunc TestRenderServicesOptionDeprecated(t *testing.T) {\n\ttestCases := [...]struct {\n\t\ttestName           string\n\t\tmethodOptions      descriptorpb.MethodOptions\n\t\topenapiOperation   *openapi_options.Operation\n\t\texpectedDeprecated bool\n\t}{\n\t\t{\n\t\t\ttestName: \"method option\",\n\t\t\tmethodOptions: descriptorpb.MethodOptions{\n\t\t\t\tDeprecated: proto.Bool(true),\n\t\t\t},\n\t\t\texpectedDeprecated: true,\n\t\t},\n\t\t{\n\t\t\ttestName: \"openapi option\",\n\t\t\topenapiOperation: &openapi_options.Operation{\n\t\t\t\tDeprecated: true,\n\t\t\t},\n\t\t\texpectedDeprecated: true,\n\t\t},\n\t\t{\n\t\t\ttestName: \"empty openapi doesn't override method option\",\n\t\t\tmethodOptions: descriptorpb.MethodOptions{\n\t\t\t\tDeprecated: proto.Bool(true),\n\t\t\t},\n\t\t\topenapiOperation:   &openapi_options.Operation{},\n\t\t\texpectedDeprecated: true,\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(tc.testName, func(t *testing.T) {\n\t\t\tmsgdesc := &descriptorpb.DescriptorProto{\n\t\t\t\tName: proto.String(\"ExampleMessage\"),\n\t\t\t}\n\n\t\t\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\t\t\tName:       proto.String(\"Example\"),\n\t\t\t\tInputType:  proto.String(\"ExampleMessage\"),\n\t\t\t\tOutputType: proto.String(\"ExampleMessage\"),\n\t\t\t\tOptions:    &tc.methodOptions,\n\t\t\t}\n\n\t\t\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t\t\t}\n\n\t\t\tmsg := &descriptor.Message{\n\t\t\t\tDescriptorProto: msgdesc,\n\t\t\t}\n\n\t\t\tfile := descriptor.File{\n\t\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{msgdesc},\n\t\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\t\tName: \"example_pb\",\n\t\t\t\t},\n\t\t\t\tMessages: []*descriptor.Message{msg},\n\t\t\t\tServices: []*descriptor.Service{\n\t\t\t\t\t{\n\t\t\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\t\t\tRequestType:           msg,\n\t\t\t\t\t\t\t\tResponseType:          msg,\n\t\t\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\t\t\tTemplate: \"/v1/echo\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tif tc.openapiOperation != nil {\n\t\t\t\tproto.SetExtension(\n\t\t\t\t\tproto.Message(file.Services[0].Methods[0].Options),\n\t\t\t\t\topenapi_options.E_Openapiv2Operation,\n\t\t\t\t\ttc.openapiOperation,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treg := descriptor.NewRegistry()\n\t\t\treg.SetEnableRpcDeprecation(true)\n\t\t\tfileCL := crossLinkFixture(&file)\n\n\t\t\tif err := reg.Load(reqFromFile(fileCL)); err != nil {\n\t\t\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\t\t}\n\n\t\t\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\t}\n\n\t\t\tgot := result.getPathItemObject(\"/v1/echo\").Get.Deprecated\n\t\t\tif got != tc.expectedDeprecated {\n\t\t\t\tt.Fatalf(\"Wrong deprecated field, got %v want %v\", got, tc.expectedDeprecated)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestRenderServicesMarksDeprecatedParameters(t *testing.T) {\n\tcases := []struct {\n\t\tname                   string\n\t\tfieldDeprecated        bool\n\t\tenableFieldDeprecation bool\n\t\tfieldConfigDeprecated  bool\n\t\texpectedDeprecated     bool\n\t}{\n\t\t{\n\t\t\tname:                   \"proto field deprecated but feature disabled\",\n\t\t\tfieldDeprecated:        true,\n\t\t\tenableFieldDeprecation: false,\n\t\t\texpectedDeprecated:     false,\n\t\t},\n\t\t{\n\t\t\tname:                   \"proto field deprecated with feature enabled\",\n\t\t\tfieldDeprecated:        true,\n\t\t\tenableFieldDeprecation: true,\n\t\t\texpectedDeprecated:     true,\n\t\t},\n\n\t\t{\n\t\t\tname:                  \"field config annotation deprecated\",\n\t\t\tfieldConfigDeprecated: true,\n\t\t\texpectedDeprecated:    true,\n\t\t},\n\t\t{\n\t\t\tname:               \"non-deprecated field\",\n\t\t\texpectedDeprecated: false,\n\t\t},\n\t}\n\n\tfor _, tc := range cases {\n\t\ttc := tc\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tvar fieldOptions *descriptorpb.FieldOptions\n\t\t\tif tc.fieldDeprecated || tc.fieldConfigDeprecated {\n\t\t\t\tfieldOptions = &descriptorpb.FieldOptions{}\n\t\t\t\tif tc.fieldDeprecated {\n\t\t\t\t\tfieldOptions.Deprecated = proto.Bool(true)\n\t\t\t\t}\n\t\t\t\tif tc.fieldConfigDeprecated {\n\t\t\t\t\tproto.SetExtension(fieldOptions, openapi_options.E_Openapiv2Field, &openapi_options.JSONSchema{\n\t\t\t\t\t\tFieldConfiguration: &openapi_options.JSONSchema_FieldConfiguration{\n\t\t\t\t\t\t\tDeprecated: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tfieldDesc := &descriptorpb.FieldDescriptorProto{\n\t\t\t\tName:     proto.String(\"name\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tOptions:  fieldOptions,\n\t\t\t\tJsonName: proto.String(\"name\"),\n\t\t\t}\n\t\t\treqMsgDesc := &descriptorpb.DescriptorProto{\n\t\t\t\tName:  proto.String(\"ExampleRequest\"),\n\t\t\t\tField: []*descriptorpb.FieldDescriptorProto{fieldDesc},\n\t\t\t}\n\t\t\trespMsgDesc := &descriptorpb.DescriptorProto{\n\t\t\t\tName: proto.String(\"ExampleResponse\"),\n\t\t\t}\n\n\t\t\treqMsg := &descriptor.Message{\n\t\t\t\tDescriptorProto: reqMsgDesc,\n\t\t\t}\n\t\t\trespMsg := &descriptor.Message{\n\t\t\t\tDescriptorProto: respMsgDesc,\n\t\t\t}\n\t\t\tfield := &descriptor.Field{\n\t\t\t\tFieldDescriptorProto: fieldDesc,\n\t\t\t\tMessage:              reqMsg,\n\t\t\t}\n\t\t\treqMsg.Fields = []*descriptor.Field{field}\n\n\t\t\tmethod := &descriptorpb.MethodDescriptorProto{\n\t\t\t\tName:       proto.String(\"GetExample\"),\n\t\t\t\tInputType:  proto.String(\".example.ExampleRequest\"),\n\t\t\t\tOutputType: proto.String(\".example.ExampleResponse\"),\n\t\t\t}\n\n\t\t\tcompiler, err := httprule.Parse(\"/v1/{name}\")\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to parse path template: %v\", err)\n\t\t\t}\n\t\t\tpathTemplate := compiler.Compile()\n\n\t\t\tbinding := &descriptor.Binding{\n\t\t\t\tHTTPMethod: \"GET\",\n\t\t\t\tPathTmpl:   pathTemplate,\n\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t{\n\t\t\t\t\t\tTarget: field,\n\t\t\t\t\t\tFieldPath: descriptor.FieldPath{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tName:   \"name\",\n\t\t\t\t\t\t\t\tTarget: field,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tmethodDesc := &descriptor.Method{\n\t\t\t\tMethodDescriptorProto: method,\n\t\t\t\tRequestType:           reqMsg,\n\t\t\t\tResponseType:          respMsg,\n\t\t\t\tBindings:              []*descriptor.Binding{binding},\n\t\t\t}\n\n\t\t\tservice := &descriptorpb.ServiceDescriptorProto{\n\t\t\t\tName:   proto.String(\"ExampleService\"),\n\t\t\t\tMethod: []*descriptorpb.MethodDescriptorProto{method},\n\t\t\t}\n\n\t\t\tserviceDesc := &descriptor.Service{\n\t\t\t\tServiceDescriptorProto: service,\n\t\t\t\tMethods:                []*descriptor.Method{methodDesc},\n\t\t\t}\n\n\t\t\tfile := descriptor.File{\n\t\t\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\t\t\tName:           proto.String(\"example.proto\"),\n\t\t\t\t\tPackage:        proto.String(\"example\"),\n\t\t\t\t\tMessageType:    []*descriptorpb.DescriptorProto{reqMsgDesc, respMsgDesc},\n\t\t\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{service},\n\t\t\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\t\t\tGoPackage: proto.String(\"github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tGoPkg: descriptor.GoPackage{\n\t\t\t\t\tPath: \"example.com/path/to/example/example.pb\",\n\t\t\t\t\tName: \"example_pb\",\n\t\t\t\t},\n\t\t\t\tMessages: []*descriptor.Message{reqMsg, respMsg},\n\t\t\t\tServices: []*descriptor.Service{serviceDesc},\n\t\t\t}\n\n\t\t\treg := descriptor.NewRegistry()\n\t\t\treg.SetEnableFieldDeprecation(tc.enableFieldDeprecation)\n\t\t\tfileCL := crossLinkFixture(&file)\n\t\t\tif err := reg.Load(reqFromFile(fileCL)); err != nil {\n\t\t\t\tt.Fatalf(\"failed to load code generator request: %v\", err)\n\t\t\t}\n\n\t\t\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t\t\t}\n\n\t\t\toperation := result.getPathItemObject(\"/v1/{name}\").Get\n\t\t\tif operation == nil {\n\t\t\t\tt.Fatalf(\"expected GET operation to be generated for /v1/{name}\")\n\t\t\t}\n\t\t\tfound := false\n\t\t\tfor _, param := range operation.Parameters {\n\t\t\t\tif param.In == \"path\" && param.Name == \"name\" {\n\t\t\t\t\tfound = true\n\t\t\t\t\tif param.Deprecated != tc.expectedDeprecated {\n\t\t\t\t\t\tt.Fatalf(\"expected deprecated flag to be %v, got %v\", tc.expectedDeprecated, param.Deprecated)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\tt.Fatalf(\"expected to find path parameter named 'name'\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_updateSwaggerObjectFromFieldBehavior(t *testing.T) {\n\ttype args struct {\n\t\ts     *openapiSchemaObject\n\t\tj     []annotations.FieldBehavior\n\t\treg   *descriptor.Registry\n\t\tfield *descriptor.Field\n\t}\n\n\tregWithNoProto3FieldSemantics := &descriptor.Registry{}\n\tregWithProto3FieldSemantics := &descriptor.Registry{}\n\tregWithProto3FieldSemantics.SetUseProto3FieldSemantics(true)\n\tproto3Field := &descriptor.Field{FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\tName:   proto.String(\"name\"),\n\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\tNumber: proto.Int32(1),\n\t}}\n\tboolTrue := true\n\tproto3FieldOptional := &descriptor.Field{FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\tName:           proto.String(\"name\"),\n\t\tType:           descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\tNumber:         proto.Int32(1),\n\t\tProto3Optional: &boolTrue,\n\t}}\n\toneofIndex := int32(0)\n\tproto3FieldOneof := &descriptor.Field{FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{\n\t\tName:       proto.String(\"name\"),\n\t\tType:       descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\tNumber:     proto.Int32(1),\n\t\tOneofIndex: &oneofIndex,\n\t}}\n\ttests := []struct {\n\t\tname     string\n\t\targs     args\n\t\trequired []string\n\t}{\n\t\t{\n\t\t\tname: \"FieldBehavior_REQUIRED\",\n\t\t\targs: args{\n\t\t\t\ts: &openapiSchemaObject{},\n\t\t\t\tj: []annotations.FieldBehavior{\n\t\t\t\t\tannotations.FieldBehavior_REQUIRED,\n\t\t\t\t},\n\t\t\t\treg:   regWithNoProto3FieldSemantics,\n\t\t\t\tfield: proto3FieldOptional,\n\t\t\t},\n\t\t\trequired: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tname: \"No Required No Proto3 Optional\",\n\t\t\targs: args{\n\t\t\t\ts:     &openapiSchemaObject{},\n\t\t\t\tj:     []annotations.FieldBehavior{},\n\t\t\t\treg:   regWithNoProto3FieldSemantics,\n\t\t\t\tfield: proto3FieldOptional,\n\t\t\t},\n\t\t\trequired: nil,\n\t\t},\n\t\t{\n\t\t\tname: \"No Required Has Proto3 Optional\",\n\t\t\targs: args{\n\t\t\t\ts:     &openapiSchemaObject{},\n\t\t\t\tj:     []annotations.FieldBehavior{},\n\t\t\t\treg:   regWithProto3FieldSemantics,\n\t\t\t\tfield: proto3FieldOptional,\n\t\t\t},\n\t\t\trequired: nil,\n\t\t},\n\t\t{\n\t\t\tname: \"No Required Has Proto3 Required\",\n\t\t\targs: args{\n\t\t\t\ts:     &openapiSchemaObject{},\n\t\t\t\tj:     []annotations.FieldBehavior{},\n\t\t\t\treg:   regWithProto3FieldSemantics,\n\t\t\t\tfield: proto3Field,\n\t\t\t},\n\t\t\trequired: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tname: \"Oneof field not required with proto3 field semantics\",\n\t\t\targs: args{\n\t\t\t\ts:     &openapiSchemaObject{},\n\t\t\t\tj:     []annotations.FieldBehavior{},\n\t\t\t\treg:   regWithProto3FieldSemantics,\n\t\t\t\tfield: proto3FieldOneof,\n\t\t\t},\n\t\t\trequired: nil,\n\t\t},\n\t\t{\n\t\t\tname: \"Oneof field not required without proto3 field semantics\",\n\t\t\targs: args{\n\t\t\t\ts:     &openapiSchemaObject{},\n\t\t\t\tj:     []annotations.FieldBehavior{},\n\t\t\t\treg:   regWithNoProto3FieldSemantics,\n\t\t\t\tfield: proto3FieldOneof,\n\t\t\t},\n\t\t\trequired: nil,\n\t\t},\n\t\t{\n\t\t\tname: \"Oneof field required when explicitly annotated REQUIRED\",\n\t\t\targs: args{\n\t\t\t\ts: &openapiSchemaObject{},\n\t\t\t\tj: []annotations.FieldBehavior{\n\t\t\t\t\tannotations.FieldBehavior_REQUIRED,\n\t\t\t\t},\n\t\t\t\treg:   regWithProto3FieldSemantics,\n\t\t\t\tfield: proto3FieldOneof,\n\t\t\t},\n\t\t\trequired: []string{\"name\"},\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tupdateSwaggerObjectFromFieldBehavior(tt.args.s, tt.args.j, tt.args.reg, tt.args.field)\n\t\t\tif !reflect.DeepEqual(tt.args.s.Required, tt.required) {\n\t\t\t\tt.Errorf(\"updateSwaggerObjectFromFieldBehavior() = %v, want %v\", tt.args.s.Required, tt.required)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// TestBodyParameterRequiredFieldBug tests the bug where the body parameter name\n// is incorrectly added to the schema's required array when using body: \"field_name\"\nfunc TestBodyParameterRequiredFieldBug(t *testing.T) {\n\tfieldBehaviorRequired := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, fieldBehaviorRequired)\n\n\t// Define the Comment message with REQUIRED fields including one named \"comment\"\n\tcommentDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Comment\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:    proto.String(\"comment\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\tOptions: requiredFieldOptions, // comment field is REQUIRED\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:    proto.String(\"resource\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(3),\n\t\t\t\tOptions: requiredFieldOptions, // resource is REQUIRED\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:    proto.String(\"author\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(4),\n\t\t\t\tOptions: requiredFieldOptions, // author is REQUIRED\n\t\t\t},\n\t\t},\n\t}\n\n\t// Define the UpdateCommentRequest message\n\tupdateCommentReqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"UpdateCommentRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"comment\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".test.Comment\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tOptions:  requiredFieldOptions, // comment field is REQUIRED\n\t\t\t},\n\t\t},\n\t}\n\n\tcommentMsg := &descriptor.Message{\n\t\tDescriptorProto: commentDesc,\n\t}\n\n\tupdateCommentReqMsg := &descriptor.Message{\n\t\tDescriptorProto: updateCommentReqDesc,\n\t}\n\n\tnameField := &descriptor.Field{\n\t\tMessage:              commentMsg,\n\t\tFieldDescriptorProto: commentMsg.GetField()[0],\n\t}\n\tcommentField := &descriptor.Field{\n\t\tMessage:              commentMsg,\n\t\tFieldDescriptorProto: commentMsg.GetField()[1],\n\t}\n\tresourceField := &descriptor.Field{\n\t\tMessage:              commentMsg,\n\t\tFieldDescriptorProto: commentMsg.GetField()[2],\n\t}\n\tauthorField := &descriptor.Field{\n\t\tMessage:              commentMsg,\n\t\tFieldDescriptorProto: commentMsg.GetField()[3],\n\t}\n\tcommentMsg.Fields = []*descriptor.Field{nameField, commentField, resourceField, authorField}\n\n\tcommentReqField := &descriptor.Field{\n\t\tMessage:              updateCommentReqMsg,\n\t\tFieldMessage:         commentMsg,\n\t\tFieldDescriptorProto: updateCommentReqMsg.GetField()[0],\n\t}\n\tupdateCommentReqMsg.Fields = []*descriptor.Field{commentReqField}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"UpdateComment\"),\n\t\tInputType:  proto.String(\"UpdateCommentRequest\"),\n\t\tOutputType: proto.String(\"Comment\"),\n\t}\n\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"CommentService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"comment.proto\"),\n\t\t\tPackage:        proto.String(\"test\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{commentDesc, updateCommentReqDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/example/test;test\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/test/test.pb\",\n\t\t\tName: \"test_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{commentMsg, updateCommentReqMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           updateCommentReqMsg,\n\t\t\t\t\t\tResponseType:          commentMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"PATCH\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/api/v1/{comment.name}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"comment\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: nameField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"comment\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: commentReqField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\treg := descriptor.NewRegistry()\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := paths[0], \"/api/v1/{comment.name}\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/api/v1/{comment.name}\").Patch\n\tif len(operation.Parameters) < 2 {\n\t\tt.Fatalf(\"Expected at least 2 parameters, got %d\", len(operation.Parameters))\n\t}\n\n\t// Find the body parameter\n\tvar bodyParam *openapiParameterObject\n\tfor i := range operation.Parameters {\n\t\tif operation.Parameters[i].In == \"body\" {\n\t\t\tbodyParam = &operation.Parameters[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif bodyParam == nil {\n\t\tt.Fatal(\"Body parameter not found\")\n\t}\n\n\tif bodyParam.Name != \"comment\" {\n\t\tt.Fatalf(\"Wrong body parameter name, got %s want comment\", bodyParam.Name)\n\t}\n\n\tif bodyParam.Schema == nil {\n\t\tt.Fatal(\"Body parameter schema is nil\")\n\t}\n\n\t// Check the required array\n\t// Expected: [\"comment\", \"resource\", \"author\"] (each appears once)\n\t// Bug: [\"comment\", \"resource\", \"author\", \"comment\"] (comment appears twice)\n\n\texpectedRequired := []string{\"comment\", \"resource\", \"author\"}\n\n\t// Check for duplicates\n\tseen := make(map[string]int)\n\tfor _, req := range bodyParam.Schema.Required {\n\t\tseen[req]++\n\t}\n\n\tvar duplicates []string\n\tfor field, count := range seen {\n\t\tif count > 1 {\n\t\t\tduplicates = append(duplicates, field)\n\t\t}\n\t}\n\n\tif len(duplicates) > 0 {\n\t\tt.Errorf(\"BUG REPRODUCED: Duplicate entries in required array: %v\", duplicates)\n\t\tt.Errorf(\"Full required array: %v\", bodyParam.Schema.Required)\n\t}\n\n\t// Also check that we don't have extra fields that aren't properties\n\tif bodyParam.Schema.Properties != nil {\n\t\tpropertyNames := make(map[string]bool)\n\t\tfor _, prop := range *bodyParam.Schema.Properties {\n\t\t\tpropertyNames[prop.Key] = true\n\t\t}\n\n\t\tvar invalidRequired []string\n\t\tfor _, req := range bodyParam.Schema.Required {\n\t\t\tif !propertyNames[req] {\n\t\t\t\tinvalidRequired = append(invalidRequired, req)\n\t\t\t}\n\t\t}\n\n\t\tif len(invalidRequired) > 0 {\n\t\t\tt.Errorf(\"BUG: Required array contains fields that are not properties: %v\", invalidRequired)\n\t\t}\n\t}\n\n\t// Verify the required array matches expectations (no duplicates, all valid)\n\trequiredUnique := make([]string, 0, len(bodyParam.Schema.Required))\n\tseenMap := make(map[string]bool)\n\tfor _, req := range bodyParam.Schema.Required {\n\t\tif !seenMap[req] {\n\t\t\tseenMap[req] = true\n\t\t\trequiredUnique = append(requiredUnique, req)\n\t\t}\n\t}\n\n\tif !reflect.DeepEqual(requiredUnique, expectedRequired) {\n\t\tt.Errorf(\"Required array (after deduplication) doesn't match expected:\\n\"+\n\t\t\t\"  got  = %v\\n\"+\n\t\t\t\"  want = %v\\n\"+\n\t\t\t\"  diff = %s\",\n\t\t\trequiredUnique, expectedRequired, cmp.Diff(expectedRequired, requiredUnique))\n\t}\n}\n\n// TestNestedRequiredFieldsNotHoisted tests the bug where nested required fields\n// are incorrectly hoisted to the parent body schema's required array when path\n// parameters reference nested fields\nfunc TestNestedRequiredFieldsNotHoisted(t *testing.T) {\n\tfieldBehaviorRequired := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, fieldBehaviorRequired)\n\n\t// Define the nested message (Foo) with REQUIRED fields\n\tfooDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Foo\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:    proto.String(\"name\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(1),\n\t\t\t\tOptions: requiredFieldOptions, // name is REQUIRED\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:    proto.String(\"value\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\tOptions: requiredFieldOptions, // value is REQUIRED\n\t\t\t},\n\t\t},\n\t}\n\n\t// Define the request message (UpdateFooRequest)\n\tupdateFooReqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"UpdateFooRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"thing\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".test.Foo\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tOptions:  requiredFieldOptions, // thing is REQUIRED\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   proto.String(\"update_mask\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), // Simplified - normally FieldMask\n\t\t\t\tNumber: proto.Int32(2),\n\t\t\t},\n\t\t},\n\t}\n\n\tfooMsg := &descriptor.Message{\n\t\tDescriptorProto: fooDesc,\n\t}\n\n\tupdateFooReqMsg := &descriptor.Message{\n\t\tDescriptorProto: updateFooReqDesc,\n\t}\n\n\tnameField := &descriptor.Field{\n\t\tMessage:              fooMsg,\n\t\tFieldDescriptorProto: fooMsg.GetField()[0],\n\t}\n\tvalueField := &descriptor.Field{\n\t\tMessage:              fooMsg,\n\t\tFieldDescriptorProto: fooMsg.GetField()[1],\n\t}\n\tfooMsg.Fields = []*descriptor.Field{nameField, valueField}\n\n\tthingField := &descriptor.Field{\n\t\tMessage:              updateFooReqMsg,\n\t\tFieldMessage:         fooMsg,\n\t\tFieldDescriptorProto: updateFooReqMsg.GetField()[0],\n\t}\n\tupdateMaskField := &descriptor.Field{\n\t\tMessage:              updateFooReqMsg,\n\t\tFieldDescriptorProto: updateFooReqMsg.GetField()[1],\n\t}\n\tupdateFooReqMsg.Fields = []*descriptor.Field{thingField, updateMaskField}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"UpdateFoo\"),\n\t\tInputType:  proto.String(\"UpdateFooRequest\"),\n\t\tOutputType: proto.String(\"Foo\"),\n\t}\n\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"FooService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"foo.proto\"),\n\t\t\tPackage:        proto.String(\"test\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{fooDesc, updateFooReqDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/example/test;test\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/test/test.pb\",\n\t\t\tName: \"test_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{fooMsg, updateFooReqMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           updateFooReqMsg,\n\t\t\t\t\t\tResponseType:          fooMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"PATCH\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/api/v1/{thing.name}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"thing\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: nameField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: []descriptor.FieldPathComponent{}, // body: \"*\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\treg := descriptor.NewRegistry()\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\tif got, want := paths[0], \"/api/v1/{thing.name}\"; got != want {\n\t\tt.Fatalf(\"Wrong results path, got %s want %s\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/api/v1/{thing.name}\").Patch\n\tif len(operation.Parameters) < 2 {\n\t\tt.Fatalf(\"Expected at least 2 parameters, got %d\", len(operation.Parameters))\n\t}\n\n\tif got, want := operation.Parameters[0].Name, \"thing.name\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name 0, got %s want %s\", got, want)\n\t}\n\tif got, want := operation.Parameters[0].In, \"path\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location 0, got %s want %s\", got, want)\n\t}\n\n\tif got, want := operation.Parameters[1].Name, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter name 1, got %s want %s\", got, want)\n\t}\n\tif got, want := operation.Parameters[1].In, \"body\"; got != want {\n\t\tt.Fatalf(\"Wrong parameter location 1, got %s want %s\", got, want)\n\t}\n\n\tbodySchemaRef := operation.Parameters[1].Schema.schemaCore.Ref\n\tif bodySchemaRef == \"\" {\n\t\tt.Fatal(\"Body schema reference is empty\")\n\t}\n\n\tdefName := strings.TrimPrefix(bodySchemaRef, \"#/definitions/\")\n\tdefinition, found := result.Definitions[defName]\n\tif !found {\n\t\tt.Fatalf(\"expecting definition to contain %s\", defName)\n\t}\n\n\t// Verify that nested required fields are NOT hoisted to parent level\n\tcorrectRequiredFields := []string{\"thing\"}\n\tif got, want := definition.Required, correctRequiredFields; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"Nested required fields were incorrectly hoisted to parent level.\\n\"+\n\t\t\t\"Body definition required fields:\\n\"+\n\t\t\t\"  got  = %v\\n\"+\n\t\t\t\"  want = %v (only top-level field names)\\n\"+\n\t\t\t\"Nested field 'value' should be in 'thing' property's required array, not parent's.\",\n\t\t\tgot, want)\n\t}\n\n\tvar thingKV *keyVal\n\tif definition.Properties != nil {\n\t\tfor i := range *definition.Properties {\n\t\t\tif (*definition.Properties)[i].Key == \"thing\" {\n\t\t\t\tthingKV = &(*definition.Properties)[i]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif thingKV == nil {\n\t\tt.Fatal(\"'thing' property not found in body definition\")\n\t}\n\n\tif _, ok := thingKV.Value.(openapiSchemaObject); !ok {\n\t\tt.Fatal(\"'thing' property value is not an openapiSchemaObject\")\n\t}\n}\n\n// TestBodyParameterSelfReferentialBug tests the bug where the body parameter name\n// is added to the required array even though it's not a property of the schema\nfunc TestBodyParameterSelfReferentialBug(t *testing.T) {\n\tfieldBehaviorRequired := []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED}\n\trequiredFieldOptions := new(descriptorpb.FieldOptions)\n\tproto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, fieldBehaviorRequired)\n\n\t// Define the Direction message with REQUIRED fields (but NO field named \"direction\")\n\tdirectionDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"Direction\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:   proto.String(\"name\"),\n\t\t\t\tType:   descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber: proto.Int32(1),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:    proto.String(\"title\"),\n\t\t\t\tType:    descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(),\n\t\t\t\tNumber:  proto.Int32(2),\n\t\t\t\tOptions: requiredFieldOptions,\n\t\t\t},\n\t\t},\n\t}\n\n\t// Define the UpdateDirectionRequest message\n\tupdateDirectionReqDesc := &descriptorpb.DescriptorProto{\n\t\tName: proto.String(\"UpdateDirectionRequest\"),\n\t\tField: []*descriptorpb.FieldDescriptorProto{\n\t\t\t{\n\t\t\t\tName:     proto.String(\"direction\"),\n\t\t\t\tType:     descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(),\n\t\t\t\tTypeName: proto.String(\".test.Direction\"),\n\t\t\t\tNumber:   proto.Int32(1),\n\t\t\t\tOptions:  requiredFieldOptions, // direction field is REQUIRED\n\t\t\t},\n\t\t},\n\t}\n\n\tdirectionMsg := &descriptor.Message{\n\t\tDescriptorProto: directionDesc,\n\t}\n\n\tupdateDirectionReqMsg := &descriptor.Message{\n\t\tDescriptorProto: updateDirectionReqDesc,\n\t}\n\n\tnameField := &descriptor.Field{\n\t\tMessage:              directionMsg,\n\t\tFieldDescriptorProto: directionMsg.GetField()[0],\n\t}\n\ttitleField := &descriptor.Field{\n\t\tMessage:              directionMsg,\n\t\tFieldDescriptorProto: directionMsg.GetField()[1],\n\t}\n\tdirectionMsg.Fields = []*descriptor.Field{nameField, titleField}\n\n\tdirectionReqField := &descriptor.Field{\n\t\tMessage:              updateDirectionReqMsg,\n\t\tFieldMessage:         directionMsg,\n\t\tFieldDescriptorProto: updateDirectionReqMsg.GetField()[0],\n\t}\n\tupdateDirectionReqMsg.Fields = []*descriptor.Field{directionReqField}\n\n\tmeth := &descriptorpb.MethodDescriptorProto{\n\t\tName:       proto.String(\"UpdateDirection\"),\n\t\tInputType:  proto.String(\"UpdateDirectionRequest\"),\n\t\tOutputType: proto.String(\"Direction\"),\n\t}\n\n\tsvc := &descriptorpb.ServiceDescriptorProto{\n\t\tName:   proto.String(\"DirectionService\"),\n\t\tMethod: []*descriptorpb.MethodDescriptorProto{meth},\n\t}\n\n\tfile := descriptor.File{\n\t\tFileDescriptorProto: &descriptorpb.FileDescriptorProto{\n\t\t\tSourceCodeInfo: &descriptorpb.SourceCodeInfo{},\n\t\t\tName:           proto.String(\"direction.proto\"),\n\t\t\tPackage:        proto.String(\"test\"),\n\t\t\tMessageType:    []*descriptorpb.DescriptorProto{directionDesc, updateDirectionReqDesc},\n\t\t\tService:        []*descriptorpb.ServiceDescriptorProto{svc},\n\t\t\tOptions: &descriptorpb.FileOptions{\n\t\t\t\tGoPackage: proto.String(\"github.com/example/test;test\"),\n\t\t\t},\n\t\t},\n\t\tGoPkg: descriptor.GoPackage{\n\t\t\tPath: \"example.com/path/to/test/test.pb\",\n\t\t\tName: \"test_pb\",\n\t\t},\n\t\tMessages: []*descriptor.Message{directionMsg, updateDirectionReqMsg},\n\t\tServices: []*descriptor.Service{\n\t\t\t{\n\t\t\t\tServiceDescriptorProto: svc,\n\t\t\t\tMethods: []*descriptor.Method{\n\t\t\t\t\t{\n\t\t\t\t\t\tMethodDescriptorProto: meth,\n\t\t\t\t\t\tRequestType:           updateDirectionReqMsg,\n\t\t\t\t\t\tResponseType:          directionMsg,\n\t\t\t\t\t\tBindings: []*descriptor.Binding{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tHTTPMethod: \"PATCH\",\n\t\t\t\t\t\t\t\tPathTmpl: httprule.Template{\n\t\t\t\t\t\t\t\t\tVersion:  1,\n\t\t\t\t\t\t\t\t\tOpCodes:  []int{0, 0},\n\t\t\t\t\t\t\t\t\tTemplate: \"/api/v1/{direction.name}\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPathParams: []descriptor.Parameter{\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"direction\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tName: \"name\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tTarget: nameField,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tBody: &descriptor.Body{\n\t\t\t\t\t\t\t\t\tFieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tName:   \"direction\",\n\t\t\t\t\t\t\t\t\t\t\tTarget: directionReqField,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\treg := descriptor.NewRegistry()\n\tfileCL := crossLinkFixture(&file)\n\terr := reg.Load(reqFromFile(fileCL))\n\tif err != nil {\n\t\tt.Errorf(\"reg.Load(%#v) failed with %v; want success\", file, err)\n\t\treturn\n\t}\n\n\tresult, err := applyTemplate(param{File: fileCL, reg: reg})\n\tif err != nil {\n\t\tt.Fatalf(\"applyTemplate(%#v) failed with %v; want success\", file, err)\n\t}\n\n\tpaths := GetPaths(result)\n\tif got, want := len(paths), 1; got != want {\n\t\tt.Fatalf(\"Results path length differed, got %d want %d\", got, want)\n\t}\n\n\toperation := *result.getPathItemObject(\"/api/v1/{direction.name}\").Patch\n\n\t// Find the body parameter\n\tvar bodyParam *openapiParameterObject\n\tfor i := range operation.Parameters {\n\t\tif operation.Parameters[i].In == \"body\" {\n\t\t\tbodyParam = &operation.Parameters[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif bodyParam == nil {\n\t\tt.Fatal(\"Body parameter not found\")\n\t}\n\n\tif bodyParam.Schema == nil {\n\t\tt.Fatal(\"Body parameter schema is nil\")\n\t}\n\n\t// Check that we don't have the parameter name in the required array\n\t// when it's not actually a property of the schema\n\texpectedRequired := []string{\"title\"}\n\n\tif bodyParam.Schema.Properties != nil {\n\t\tpropertyNames := make(map[string]bool)\n\t\tfor _, prop := range *bodyParam.Schema.Properties {\n\t\t\tpropertyNames[prop.Key] = true\n\t\t}\n\n\t\tvar invalidRequired []string\n\t\tfor _, req := range bodyParam.Schema.Required {\n\t\t\tif !propertyNames[req] {\n\t\t\t\tinvalidRequired = append(invalidRequired, req)\n\t\t\t}\n\t\t}\n\n\t\tif len(invalidRequired) > 0 {\n\t\t\tt.Errorf(\"BUG REPRODUCED: Required array contains fields that are not properties: %v\", invalidRequired)\n\t\t\tt.Errorf(\"Full required array: %v\", bodyParam.Schema.Required)\n\t\t\tt.Errorf(\"Available properties: %v\", func() []string {\n\t\t\t\tkeys := make([]string, 0, len(*bodyParam.Schema.Properties))\n\t\t\t\tfor _, prop := range *bodyParam.Schema.Properties {\n\t\t\t\t\tkeys = append(keys, prop.Key)\n\t\t\t\t}\n\t\t\t\treturn keys\n\t\t\t}())\n\t\t}\n\t}\n\n\tif !reflect.DeepEqual(bodyParam.Schema.Required, expectedRequired) {\n\t\tt.Errorf(\"Required array doesn't match expected:\\n\"+\n\t\t\t\"  got  = %v\\n\"+\n\t\t\t\"  want = %v\\n\"+\n\t\t\t\"  diff = %s\",\n\t\t\tbodyParam.Schema.Required, expectedRequired, cmp.Diff(expectedRequired, bodyParam.Schema.Required))\n\t}\n}\n\nfunc TestFieldCommentsWithNewlines(t *testing.T) {\n\ttests := []struct {\n\t\tname          string\n\t\tcomments      string\n\t\texpectedTitle string\n\t\texpectedDesc  string\n\t}{\n\t\t{\n\t\t\tname:          \"single line comment goes to title\",\n\t\t\tcomments:      \"Short comment without newlines\",\n\t\t\texpectedTitle: \"Short comment without newlines\",\n\t\t\texpectedDesc:  \"\",\n\t\t},\n\t\t{\n\t\t\tname:          \"two paragraphs - first goes to title\",\n\t\t\tcomments:      \"Short title\\n\\nLonger description here\",\n\t\t\texpectedTitle: \"Short title\",\n\t\t\texpectedDesc:  \"Longer description here\",\n\t\t},\n\t\t{\n\t\t\tname:          \"multi-line first paragraph goes to description only\",\n\t\t\tcomments:      \"a comment about my body parameter that is quite long\\nand may have multiple lines\\nthat should become the description\",\n\t\t\texpectedTitle: \"\",\n\t\t\texpectedDesc:  \"a comment about my body parameter that is quite long\\nand may have multiple lines\\nthat should become the description\",\n\t\t},\n\t\t{\n\t\t\tname:          \"multi-line first paragraph with second paragraph\",\n\t\t\tcomments:      \"first line\\nstill first paragraph\\n\\nsecond paragraph\",\n\t\t\texpectedTitle: \"\",\n\t\t\texpectedDesc:  \"first line\\nstill first paragraph\\n\\nsecond paragraph\",\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tvar title, desc string\n\t\t\tcomments := tt.comments\n\t\t\tif len(comments) > 0 {\n\t\t\t\tparagraphs := strings.Split(comments, paragraphDeliminator)\n\t\t\t\tfirstParagraph := strings.TrimSpace(paragraphs[0])\n\t\t\t\tif !strings.Contains(firstParagraph, \"\\n\") {\n\t\t\t\t\ttitle = firstParagraph\n\t\t\t\t\tdesc = strings.TrimSpace(strings.Join(paragraphs[1:], paragraphDeliminator))\n\t\t\t\t} else {\n\t\t\t\t\tdesc = strings.TrimSpace(comments)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif title != tt.expectedTitle {\n\t\t\t\tt.Errorf(\"Title mismatch: got %q, want %q\", title, tt.expectedTitle)\n\t\t\t}\n\t\t\tif desc != tt.expectedDesc {\n\t\t\t\tt.Errorf(\"Description mismatch: got %q, want %q\", desc, tt.expectedDesc)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/testdata/generator/path_item_object.prototext",
    "content": "file_to_generate:  \"your/service/v1/your_service.proto\"\nproto_file:  {\n name:  \"your/service/v1/your_service.proto\"\n package:  \"your.service.v1\"\n message_type:  {\n  name:  \"StringMessage\"\n  field:  {\n   name:  \"value\"\n   number:  1\n   label:  LABEL_OPTIONAL\n   type:  TYPE_STRING\n   json_name:  \"value\"\n  }\n }\n service:  {\n  name:  \"YourService\"\n  method:  {\n   name:  \"Echo\"\n   input_type:  \".your.service.v1.StringMessage\"\n   output_type:  \".your.service.v1.StringMessage\"\n   options:  {\n    [google.api.http]:  {\n     post:  \"/api/echo\"\n    }\n   }\n  }\n }\n options:  {\n  go_package:  \"github.com/yourorg/yourprotos/gen/go/your/service/v1\"\n }\n syntax:  \"proto3\"\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/testdata/generator/path_item_object.swagger.yaml",
    "content": "swagger: \"2.0\"\ninfo:\n  title: your/service/v1/your_service.proto\n  version: version not set\ntags:\n  - name: YourService\nconsumes:\n  - application/json\nproduces:\n  - application/json\npaths:\n  /api/echo:\n    post:\n      operationId: YourService_Echo\n      responses:\n        \"200\":\n          description: A successful response.\n          schema:\n            $ref: '#/definitions/v1StringMessage'\n      parameters:\n        - name: value\n          in: query\n          required: false\n          type: string\n      tags:\n        - YourService\ndefinitions:\n  v1StringMessage:\n    type: object\n    properties:\n      value:\n        type: string\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/testdata/generator/x_go_type.prototext",
    "content": "file_to_generate: \"test/service/v1/service.proto\"\nproto_file: {\n  name: \"test/service/v1/service.proto\"\n  package: \"test.service.v1\"\n  message_type: {\n    name: \"TestMessage\"\n    field: {\n      name: \"value\"\n      number: 1\n      label: LABEL_OPTIONAL\n      type: TYPE_STRING\n      json_name: \"value\"\n    }\n  }\n  service: {\n    name: \"TestService\"\n    method: {\n      name: \"Test\"\n      input_type: \".test.service.v1.TestMessage\"\n      output_type: \".test.service.v1.TestMessage\"\n      options: {\n        [google.api.http]: {\n          post: \"/v1/test\"\n          body: \"*\"\n        }\n      }\n    }\n  }\n  options: {\n    go_package: \"github.com/grpc-ecosystem/grpc-gateway/v2/test/service/v1;servicev1\"\n  }\n}"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/testdata/generator/x_go_type.swagger.yaml",
    "content": "swagger: \"2.0\"\ninfo:\n  title: test/service/v1/service.proto\n  version: version not set\ntags:\n- name: TestService\nconsumes:\n- application/json\nproduces:\n- application/json\npaths:\n  /v1/test:\n    post:\n      operationId: TestService_Test\n      responses:\n        \"200\":\n          description: A successful response.\n          schema:\n            $ref: '#/definitions/v1TestMessage'\n      parameters:\n      - name: body\n        in: body\n        required: true\n        schema:\n          $ref: '#/definitions/v1TestMessage'\n      tags:\n      - TestService\ndefinitions:\n  v1TestMessage:\n    type: object\n    properties:\n      value:\n        type: string\n    x-go-type:\n      import:\n        package: \"github.com/grpc-ecosystem/grpc-gateway/v2/test/service/v1\"\n      type: \"TestMessage\""
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/types.go",
    "content": "package genopenapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"go.yaml.in/yaml/v3\"\n)\n\ntype param struct {\n\t*descriptor.File\n\treg *descriptor.Registry\n}\n\n// http://swagger.io/specification/#infoObject\ntype openapiInfoObject struct {\n\tTitle          string `json:\"title\" yaml:\"title\"`\n\tDescription    string `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tTermsOfService string `json:\"termsOfService,omitempty\" yaml:\"termsOfService,omitempty\"`\n\tVersion        string `json:\"version\" yaml:\"version\"`\n\n\tContact *openapiContactObject `json:\"contact,omitempty\" yaml:\"contact,omitempty\"`\n\tLicense *openapiLicenseObject `json:\"license,omitempty\" yaml:\"license,omitempty\"`\n\n\textensions []extension `json:\"-\" yaml:\"-\"`\n}\n\n// https://swagger.io/specification/#tagObject\ntype openapiTagObject struct {\n\tName         string                              `json:\"name\" yaml:\"name\"`\n\tDescription  string                              `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tExternalDocs *openapiExternalDocumentationObject `json:\"externalDocs,omitempty\" yaml:\"externalDocs,omitempty\"`\n\n\textensions []extension `json:\"-\" yaml:\"-\"`\n}\n\n// http://swagger.io/specification/#contactObject\ntype openapiContactObject struct {\n\tName  string `json:\"name,omitempty\" yaml:\"name,omitempty\"`\n\tURL   string `json:\"url,omitempty\" yaml:\"url,omitempty\"`\n\tEmail string `json:\"email,omitempty\" yaml:\"email,omitempty\"`\n}\n\n// http://swagger.io/specification/#licenseObject\ntype openapiLicenseObject struct {\n\tName string `json:\"name,omitempty\" yaml:\"name,omitempty\"`\n\tURL  string `json:\"url,omitempty\" yaml:\"url,omitempty\"`\n}\n\n// http://swagger.io/specification/#externalDocumentationObject\ntype openapiExternalDocumentationObject struct {\n\tDescription string `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tURL         string `json:\"url,omitempty\" yaml:\"url,omitempty\"`\n}\n\ntype extension struct {\n\tkey   string          `json:\"-\" yaml:\"-\"`\n\tvalue json.RawMessage `json:\"-\" yaml:\"-\"`\n}\n\n// http://swagger.io/specification/#swaggerObject\ntype openapiSwaggerObject struct {\n\tSwagger             string                              `json:\"swagger\" yaml:\"swagger\"`\n\tInfo                openapiInfoObject                   `json:\"info\" yaml:\"info\"`\n\tTags                []openapiTagObject                  `json:\"tags,omitempty\" yaml:\"tags,omitempty\"`\n\tHost                string                              `json:\"host,omitempty\" yaml:\"host,omitempty\"`\n\tBasePath            string                              `json:\"basePath,omitempty\" yaml:\"basePath,omitempty\"`\n\tSchemes             []string                            `json:\"schemes,omitempty\" yaml:\"schemes,omitempty\"`\n\tConsumes            []string                            `json:\"consumes\" yaml:\"consumes\"`\n\tProduces            []string                            `json:\"produces\" yaml:\"produces\"`\n\tPaths               openapiPathsObject                  `json:\"paths\" yaml:\"paths\"`\n\tDefinitions         openapiDefinitionsObject            `json:\"definitions\" yaml:\"definitions\"`\n\tSecurityDefinitions openapiSecurityDefinitionsObject    `json:\"securityDefinitions,omitempty\" yaml:\"securityDefinitions,omitempty\"`\n\tSecurity            []openapiSecurityRequirementObject  `json:\"security,omitempty\" yaml:\"security,omitempty\"`\n\tExternalDocs        *openapiExternalDocumentationObject `json:\"externalDocs,omitempty\" yaml:\"externalDocs,omitempty\"`\n\n\textensions []extension `json:\"-\" yaml:\"-\"`\n}\n\n// http://swagger.io/specification/#securityDefinitionsObject\ntype openapiSecurityDefinitionsObject map[string]openapiSecuritySchemeObject\n\n// http://swagger.io/specification/#securitySchemeObject\ntype openapiSecuritySchemeObject struct {\n\tType             string              `json:\"type\" yaml:\"type\"`\n\tDescription      string              `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tName             string              `json:\"name,omitempty\" yaml:\"name,omitempty\"`\n\tIn               string              `json:\"in,omitempty\" yaml:\"in,omitempty\"`\n\tFlow             string              `json:\"flow,omitempty\" yaml:\"flow,omitempty\"`\n\tAuthorizationURL string              `json:\"authorizationUrl,omitempty\" yaml:\"authorizationUrl,omitempty\"`\n\tTokenURL         string              `json:\"tokenUrl,omitempty\" yaml:\"tokenUrl,omitempty\"`\n\tScopes           openapiScopesObject `json:\"scopes,omitempty\" yaml:\"scopes,omitempty\"`\n\n\textensions []extension `json:\"-\" yaml:\"-\"`\n}\n\n// http://swagger.io/specification/#scopesObject\ntype openapiScopesObject map[string]string\n\n// http://swagger.io/specification/#securityRequirementObject\ntype openapiSecurityRequirementObject map[string][]string\n\n// http://swagger.io/specification/#pathsObject\ntype openapiPathsObject []pathData\n\ntype pathData struct {\n\tPath           string\n\tPathItemObject openapiPathItemObject\n}\n\n// http://swagger.io/specification/#pathItemObject\ntype openapiPathItemObject struct {\n\tGet     *openapiOperationObject `json:\"get,omitempty\" yaml:\"get,omitempty\"`\n\tDelete  *openapiOperationObject `json:\"delete,omitempty\" yaml:\"delete,omitempty\"`\n\tPost    *openapiOperationObject `json:\"post,omitempty\" yaml:\"post,omitempty\"`\n\tPut     *openapiOperationObject `json:\"put,omitempty\" yaml:\"put,omitempty\"`\n\tPatch   *openapiOperationObject `json:\"patch,omitempty\" yaml:\"patch,omitempty\"`\n\tHead    *openapiOperationObject `json:\"head,omitempty\" yaml:\"head,omitempty\"`\n\tOptions *openapiOperationObject `json:\"options,omitempty\" yaml:\"options,omitempty\"`\n\t// While TRACE is supported in OpenAPI v3, it is not supported in OpenAPI v2\n\t// Trace   *openapiOperationObject `json:\"trace,omitempty\" yaml:\"trace,omitempty\"`\n}\n\n// http://swagger.io/specification/#operationObject\ntype openapiOperationObject struct {\n\tSummary     string                  `json:\"summary,omitempty\" yaml:\"summary,omitempty\"`\n\tDescription string                  `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tOperationID string                  `json:\"operationId\" yaml:\"operationId\"`\n\tResponses   openapiResponsesObject  `json:\"responses\" yaml:\"responses\"`\n\tParameters  openapiParametersObject `json:\"parameters,omitempty\" yaml:\"parameters,omitempty\"`\n\tTags        []string                `json:\"tags,omitempty\" yaml:\"tags,omitempty\"`\n\tDeprecated  bool                    `json:\"deprecated,omitempty\" yaml:\"deprecated,omitempty\"`\n\tConsumes    []string                `json:\"consumes,omitempty\" yaml:\"consumes,omitempty\"`\n\tProduces    []string                `json:\"produces,omitempty\" yaml:\"produces,omitempty\"`\n\n\tSecurity     *[]openapiSecurityRequirementObject `json:\"security,omitempty\" yaml:\"security,omitempty\"`\n\tExternalDocs *openapiExternalDocumentationObject `json:\"externalDocs,omitempty\" yaml:\"externalDocs,omitempty\"`\n\n\textensions []extension `json:\"-\" yaml:\"-\"`\n}\n\ntype openapiParametersObject []openapiParameterObject\n\n// http://swagger.io/specification/#parameterObject\ntype openapiParameterObject struct {\n\tName             string              `json:\"name\" yaml:\"name\"`\n\tDescription      string              `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tIn               string              `json:\"in,omitempty\" yaml:\"in,omitempty\"`\n\tRequired         bool                `json:\"required\" yaml:\"required\"`\n\tDeprecated       bool                `json:\"deprecated,omitempty\" yaml:\"deprecated,omitempty\"`\n\tType             string              `json:\"type,omitempty\" yaml:\"type,omitempty\"`\n\tFormat           string              `json:\"format,omitempty\" yaml:\"format,omitempty\"`\n\tUniqueItems      bool                `json:\"uniqueItems,omitempty\" yaml:\"uniqueItems,omitempty\"`\n\tItems            *openapiItemsObject `json:\"items,omitempty\" yaml:\"items,omitempty\"`\n\tEnum             interface{}         `json:\"enum,omitempty\" yaml:\"enum,omitempty\"`\n\tCollectionFormat string              `json:\"collectionFormat,omitempty\" yaml:\"collectionFormat,omitempty\"`\n\tDefault          interface{}         `json:\"default,omitempty\" yaml:\"default,omitempty\"`\n\tMinItems         *int                `json:\"minItems,omitempty\" yaml:\"minItems,omitempty\"`\n\tPattern          string              `json:\"pattern,omitempty\" yaml:\"pattern,omitempty\"`\n\n\t// Or you can explicitly refer to another type. If this is defined all\n\t// other fields should be empty\n\tSchema *openapiSchemaObject `json:\"schema,omitempty\" yaml:\"schema,omitempty\"`\n\n\textensions []extension\n}\n\n// core part of schema, which is common to itemsObject and schemaObject.\n// http://swagger.io/specification/v2/#itemsObject\n// The OAS3 spec (https://swagger.io/specification/#schemaObject) defines the\n// `nullable` field as part of a Schema Object. This behavior has been\n// \"back-ported\" to OAS2 as the Specification Extension `x-nullable`, and is\n// supported by generation tools such as swagger-codegen and go-swagger.\n// For protoc-gen-openapiv3, we'd want to add `nullable` instead.\ntype schemaCore struct {\n\tType      string     `json:\"type,omitempty\" yaml:\"type,omitempty\"`\n\tFormat    string     `json:\"format,omitempty\" yaml:\"format,omitempty\"`\n\tRef       string     `json:\"$ref,omitempty\" yaml:\"$ref,omitempty\"`\n\tXNullable bool       `json:\"x-nullable,omitempty\" yaml:\"x-nullable,omitempty\"`\n\tExample   RawExample `json:\"example,omitempty\" yaml:\"example,omitempty\"`\n\n\tItems *openapiItemsObject `json:\"items,omitempty\" yaml:\"items,omitempty\"`\n\n\t// If the item is an enumeration include a list of all the *NAMES* of the\n\t// enum values.  I'm not sure how well this will work but assuming all enums\n\t// start from 0 index it will be great. I don't think that is a good assumption.\n\tEnum    interface{} `json:\"enum,omitempty\" yaml:\"enum,omitempty\"`\n\tDefault interface{} `json:\"default,omitempty\" yaml:\"default,omitempty\"`\n}\n\ntype allOfEntry struct {\n\tRef string `json:\"$ref,omitempty\" yaml:\"$ref,omitempty\"`\n}\n\ntype RawExample json.RawMessage\n\nfunc (m RawExample) MarshalJSON() ([]byte, error) {\n\treturn (json.RawMessage)(m).MarshalJSON()\n}\n\nfunc (m *RawExample) UnmarshalJSON(data []byte) error {\n\treturn (*json.RawMessage)(m).UnmarshalJSON(data)\n}\n\n// MarshalYAML implements yaml.Marshaler interface.\n//\n// It converts RawExample to one of yaml-supported types and returns it.\n//\n// From yaml.Marshaler docs: The Marshaler interface may be implemented\n// by types to customize their behavior when being marshaled into a YAML\n// document. The returned value is marshaled in place of the original\n// value implementing Marshaler.\nfunc (e RawExample) MarshalYAML() (interface{}, error) {\n\t// From docs, json.Unmarshal will store one of next types to data:\n\t// - bool, for JSON booleans;\n\t// - float64, for JSON numbers;\n\t// - string, for JSON strings;\n\t// - []interface{}, for JSON arrays;\n\t// - map[string]interface{}, for JSON objects;\n\t// - nil for JSON null.\n\tvar data interface{}\n\tif err := json.Unmarshal(e, &data); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn data, nil\n}\n\nfunc (s *schemaCore) setRefFromFQN(ref string, reg *descriptor.Registry) error {\n\tname, ok := fullyQualifiedNameToOpenAPIName(ref, reg)\n\tif !ok {\n\t\treturn fmt.Errorf(\"setRefFromFQN: can't resolve OpenAPI name from %q\", ref)\n\t}\n\ts.Ref = fmt.Sprintf(\"#/definitions/%s\", name)\n\treturn nil\n}\n\ntype openapiItemsObject openapiSchemaObject\n\n// http://swagger.io/specification/#responsesObject\ntype openapiResponsesObject map[string]openapiResponseObject\n\n// http://swagger.io/specification/#responseObject\ntype openapiResponseObject struct {\n\tDescription string                 `json:\"description\" yaml:\"description\"`\n\tSchema      openapiSchemaObject    `json:\"schema\" yaml:\"schema\"`\n\tExamples    map[string]interface{} `json:\"examples,omitempty\" yaml:\"examples,omitempty\"`\n\tHeaders     openapiHeadersObject   `json:\"headers,omitempty\" yaml:\"headers,omitempty\"`\n\n\textensions []extension `json:\"-\" yaml:\"-\"`\n}\n\ntype openapiHeadersObject map[string]openapiHeaderObject\n\n// http://swagger.io/specification/#headerObject\ntype openapiHeaderObject struct {\n\tDescription string     `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tType        string     `json:\"type,omitempty\" yaml:\"type,omitempty\"`\n\tFormat      string     `json:\"format,omitempty\" yaml:\"format,omitempty\"`\n\tDefault     RawExample `json:\"default,omitempty\" yaml:\"default,omitempty\"`\n\tPattern     string     `json:\"pattern,omitempty\" yaml:\"pattern,omitempty\"`\n}\n\ntype keyVal struct {\n\tKey   string\n\tValue interface{}\n}\n\ntype openapiSchemaObjectProperties []keyVal\n\nfunc (p openapiSchemaObjectProperties) MarshalYAML() (interface{}, error) {\n\tn := yaml.Node{\n\t\tKind:    yaml.MappingNode,\n\t\tContent: make([]*yaml.Node, len(p)*2),\n\t}\n\tfor i, v := range p {\n\t\tkeyNode := yaml.Node{}\n\t\tif err := keyNode.Encode(v.Key); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalueNode := yaml.Node{}\n\t\tif err := valueNode.Encode(v.Value); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tn.Content[i*2+0] = &keyNode\n\t\tn.Content[i*2+1] = &valueNode\n\t}\n\treturn n, nil\n}\n\nfunc (op openapiSchemaObjectProperties) MarshalJSON() ([]byte, error) {\n\tvar buf bytes.Buffer\n\tbuf.WriteString(\"{\")\n\tfor i, kv := range op {\n\t\tif i != 0 {\n\t\t\tbuf.WriteString(\",\")\n\t\t}\n\t\tkey, err := json.Marshal(kv.Key)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.Write(key)\n\t\tbuf.WriteString(\":\")\n\t\tval, err := json.Marshal(kv.Value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.Write(val)\n\t}\n\n\tbuf.WriteString(\"}\")\n\treturn buf.Bytes(), nil\n}\n\n// http://swagger.io/specification/#schemaObject\ntype openapiSchemaObject struct {\n\tschemaCore `yaml:\",inline\"`\n\t// Properties can be recursively defined\n\tProperties           *openapiSchemaObjectProperties `json:\"properties,omitempty\" yaml:\"properties,omitempty\"`\n\tAdditionalProperties *openapiSchemaObject           `json:\"additionalProperties,omitempty\" yaml:\"additionalProperties,omitempty\"`\n\n\tDescription string `json:\"description,omitempty\" yaml:\"description,omitempty\"`\n\tTitle       string `json:\"title,omitempty\" yaml:\"title,omitempty\"`\n\n\tExternalDocs *openapiExternalDocumentationObject `json:\"externalDocs,omitempty\" yaml:\"externalDocs,omitempty\"`\n\n\tReadOnly         bool     `json:\"readOnly,omitempty\" yaml:\"readOnly,omitempty\"`\n\tMultipleOf       float64  `json:\"multipleOf,omitempty\" yaml:\"multipleOf,omitempty\"`\n\tMaximum          float64  `json:\"maximum,omitempty\" yaml:\"maximum,omitempty\"`\n\tExclusiveMaximum bool     `json:\"exclusiveMaximum,omitempty\" yaml:\"exclusiveMaximum,omitempty\"`\n\tMinimum          float64  `json:\"minimum,omitempty\" yaml:\"minimum,omitempty\"`\n\tExclusiveMinimum bool     `json:\"exclusiveMinimum,omitempty\" yaml:\"exclusiveMinimum,omitempty\"`\n\tMaxLength        uint64   `json:\"maxLength,omitempty\" yaml:\"maxLength,omitempty\"`\n\tMinLength        uint64   `json:\"minLength,omitempty\" yaml:\"minLength,omitempty\"`\n\tPattern          string   `json:\"pattern,omitempty\" yaml:\"pattern,omitempty\"`\n\tMaxItems         uint64   `json:\"maxItems,omitempty\" yaml:\"maxItems,omitempty\"`\n\tMinItems         uint64   `json:\"minItems,omitempty\" yaml:\"minItems,omitempty\"`\n\tUniqueItems      bool     `json:\"uniqueItems,omitempty\" yaml:\"uniqueItems,omitempty\"`\n\tMaxProperties    uint64   `json:\"maxProperties,omitempty\" yaml:\"maxProperties,omitempty\"`\n\tMinProperties    uint64   `json:\"minProperties,omitempty\" yaml:\"minProperties,omitempty\"`\n\tRequired         []string `json:\"required,omitempty\" yaml:\"required,omitempty\"`\n\n\textensions []extension\n\n\tAllOf []allOfEntry `json:\"allOf,omitempty\" yaml:\"allOf,omitempty\"`\n}\n\n// http://swagger.io/specification/#definitionsObject\ntype openapiDefinitionsObject map[string]openapiSchemaObject\n\n// Internal type mapping from FQMN to descriptor.Message. Used as a set by the\n// findServiceMessages function.\ntype messageMap map[string]*descriptor.Message\n\n// Internal type mapping from FQEN to descriptor.Enum. Used as a set by the\n// findServiceMessages function.\ntype enumMap map[string]*descriptor.Enum\n\n// Internal type to store used references.\ntype refMap map[string]struct{}\n"
  },
  {
    "path": "protoc-gen-openapiv2/internal/genopenapi/types_test.go",
    "content": "package genopenapi\n\nimport (\n\t\"encoding/json\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"go.yaml.in/yaml/v3\"\n)\n\nfunc newSpaceReplacer() *strings.Replacer {\n\treturn strings.NewReplacer(\" \", \"\", \"\\n\", \"\", \"\\t\", \"\")\n}\n\nfunc TestRawExample(t *testing.T) {\n\tt.Parallel()\n\n\ttestCases := [...]struct {\n\t\tIn  RawExample\n\t\tExp string\n\t}{{\n\t\tIn:  RawExample(`1`),\n\t\tExp: `1`,\n\t}, {\n\t\tIn:  RawExample(`\"1\"`),\n\t\tExp: `\"1\"`,\n\t}, {\n\t\tIn: RawExample(`{\"hello\":\"worldr\"}`),\n\t\tExp: `\n\t\t\thello:\n\t\t\t\tworldr\n\t\t`,\n\t}}\n\n\tsr := newSpaceReplacer()\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(string(tc.In), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tex := tc.In\n\n\t\t\tout, err := yaml.Marshal(ex)\n\t\t\tswitch {\n\t\t\tcase err != nil:\n\t\t\t\tt.Fatalf(\"expect no yaml marshal error, got: %s\", err)\n\t\t\tcase !json.Valid(tc.In):\n\t\t\t\tt.Fatalf(\"json is invalid: %#q\", tc.In)\n\t\t\tcase sr.Replace(tc.Exp) != sr.Replace(string(out)):\n\t\t\t\tt.Fatalf(\"expected: %s, actual: %s\", tc.Exp, out)\n\t\t\t}\n\n\t\t\tout, err = json.Marshal(tc.In)\n\t\t\tswitch {\n\t\t\tcase err != nil:\n\t\t\t\tt.Fatalf(\"expect no json marshal error, got: %s\", err)\n\t\t\tcase sr.Replace(string(tc.In)) != sr.Replace(string(out)):\n\t\t\t\tt.Fatalf(\"expected: %s, actual: %s\", tc.In, out)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestOpenapiSchemaObjectProperties(t *testing.T) {\n\tt.Parallel()\n\n\tv := map[string]interface{}{\n\t\t\"example\": openapiSchemaObjectProperties{{\n\t\t\tKey:   \"test1\",\n\t\t\tValue: 1,\n\t\t}, {\n\t\t\tKey:   \"test2\",\n\t\t\tValue: 2,\n\t\t}},\n\t}\n\n\tt.Run(\"yaml\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tconst exp = `\n\t\t\texample:\n\t\t\t\ttest1: 1\n\t\t\t\ttest2: 2\n\t\t\t`\n\n\t\tsr := newSpaceReplacer()\n\n\t\tout, err := yaml.Marshal(v)\n\t\tswitch {\n\t\tcase err != nil:\n\t\t\tt.Fatalf(\"expect no marshal error, got: %s\", err)\n\t\tcase sr.Replace(exp) != sr.Replace(string(out)):\n\t\t\tt.Fatalf(\"expected: %s, actual: %s\", exp, out)\n\t\t}\n\t})\n\n\tt.Run(\"json\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tconst exp = `{\"example\":{\"test1\":1,\"test2\":2}}`\n\n\t\tgot, err := json.Marshal(v)\n\t\tswitch {\n\t\tcase err != nil:\n\t\t\tt.Fatalf(\"expect no marshal error, got: %s\", err)\n\t\tcase exp != string(got):\n\t\t\tt.Fatalf(\"expected: %s, actual: %s\", exp, got)\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/main.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime/debug\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/pluginpb\"\n)\n\nvar (\n\timportPrefix                    = flag.String(\"import_prefix\", \"\", \"prefix to be added to go package paths for imported proto files\")\n\tfile                            = flag.String(\"file\", \"-\", \"where to load data from\")\n\tallowDeleteBody                 = flag.Bool(\"allow_delete_body\", false, \"unless set, HTTP DELETE methods may not have a body\")\n\tgrpcAPIConfiguration            = flag.String(\"grpc_api_configuration\", \"\", \"path to file which describes the gRPC API Configuration in YAML format\")\n\tallowMerge                      = flag.Bool(\"allow_merge\", false, \"if set, generation one OpenAPI file out of multiple protos\")\n\tmergeFileName                   = flag.String(\"merge_file_name\", \"apidocs\", \"target OpenAPI file name prefix after merge\")\n\tuseJSONNamesForFields           = flag.Bool(\"json_names_for_fields\", true, \"if disabled, the original proto name will be used for generating OpenAPI definitions\")\n\trepeatedPathParamSeparator      = flag.String(\"repeated_path_param_separator\", \"csv\", \"configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`\")\n\tversionFlag                     = flag.Bool(\"version\", false, \"print the current version\")\n\t_                               = flag.Bool(\"allow_repeated_fields_in_body\", true, \"allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option. DEPRECATED: the value is ignored and always behaves as `true`.\")\n\tincludePackageInTags            = flag.Bool(\"include_package_in_tags\", false, \"if unset, the gRPC service name is added to the `Tags` field of each operation. If set and the `package` directive is shown in the proto file, the package name will be prepended to the service name\")\n\tuseFQNForOpenAPIName            = flag.Bool(\"fqn_for_openapi_name\", false, \"if set, the object's OpenAPI names will use the fully qualified names from the proto definition (ie my.package.MyMessage.MyInnerMessage). DEPRECATED: prefer `openapi_naming_strategy=fqn`\")\n\topenAPINamingStrategy           = flag.String(\"openapi_naming_strategy\", \"\", \"use the given OpenAPI naming strategy. Allowed values are `legacy`, `fqn`, `simple`, `package`. If unset, either `legacy` or `fqn` are selected, depending on the value of the `fqn_for_openapi_name` flag\")\n\tuseGoTemplate                   = flag.Bool(\"use_go_templates\", false, \"if set, you can use Go templates in protofile comments\")\n\tgoTemplateArgs                  = utilities.StringArrayFlag(flag.CommandLine, \"go_template_args\", \"provide a custom value that can override a key in the Go template. Requires the `use_go_templates` option to be set\")\n\tignoreComments                  = flag.Bool(\"ignore_comments\", false, \"if set, all protofile comments are excluded from output\")\n\tremoveInternalComments          = flag.Bool(\"remove_internal_comments\", false, \"if set, removes all substrings in comments that start with `(--` and end with `--)` as specified in https://google.aip.dev/192#internal-comments\")\n\tdisableDefaultErrors            = flag.Bool(\"disable_default_errors\", false, \"if set, disables generation of default errors. This is useful if you have defined custom error handling\")\n\tenumsAsInts                     = flag.Bool(\"enums_as_ints\", false, \"whether to render enum values as integers, as opposed to string values\")\n\tsimpleOperationIDs              = flag.Bool(\"simple_operation_ids\", false, \"whether to remove the service prefix in the operationID generation. Can introduce duplicate operationIDs, use with caution.\")\n\tproto3OptionalNullable          = flag.Bool(\"proto3_optional_nullable\", false, \"whether Proto3 Optional fields should be marked as x-nullable\")\n\topenAPIConfiguration            = flag.String(\"openapi_configuration\", \"\", \"path to file which describes the OpenAPI Configuration in YAML format\")\n\tgenerateUnboundMethods          = flag.Bool(\"generate_unbound_methods\", false, \"generate swagger metadata even for RPC methods that have no HttpRule annotation\")\n\trecursiveDepth                  = flag.Int(\"recursive-depth\", 1000, \"maximum recursion count allowed for a field type\")\n\tomitEnumDefaultValue            = flag.Bool(\"omit_enum_default_value\", false, \"if set, omit default enum value\")\n\toutputFormat                    = flag.String(\"output_format\", string(genopenapi.FormatJSON), fmt.Sprintf(\"output content format. Allowed values are: `%s`, `%s`\", genopenapi.FormatJSON, genopenapi.FormatYAML))\n\tvisibilityRestrictionSelectors  = utilities.StringArrayFlag(flag.CommandLine, \"visibility_restriction_selectors\", \"list of `google.api.VisibilityRule` visibility labels to include in the generated output when a visibility annotation is defined. Repeat this option to supply multiple values. Elements without visibility annotations are unaffected by this setting.\")\n\tdisableServiceTags              = flag.Bool(\"disable_service_tags\", false, \"if set, disables generation of service tags. This is useful if you do not want to expose the names of your backend grpc services.\")\n\tdisableDefaultResponses         = flag.Bool(\"disable_default_responses\", false, \"if set, disables generation of default responses. Useful if you have to support custom response codes that are not 200.\")\n\tuseAllOfForRefs                 = flag.Bool(\"use_allof_for_refs\", false, \"if set, will use allOf as container for $ref to preserve same-level properties.\")\n\tomitArrayItemTypeWhenRefSibling = flag.Bool(\"omit_array_item_type_when_ref_sibling\", false, \"if set, will omit 'type: object' in array items when $ref is present to avoid strict no-$ref-siblings rule violations.\")\n\tallowPatchFeature               = flag.Bool(\"allow_patch_feature\", true, \"whether to hide update_mask fields in PATCH requests from the generated swagger file.\")\n\tpreserveRPCOrder                = flag.Bool(\"preserve_rpc_order\", false, \"if true, will ensure the order of paths emitted in openapi swagger files mirror the order of RPC methods found in proto files. If false, emitted paths will be ordered alphabetically.\")\n\tenableRpcDeprecation            = flag.Bool(\"enable_rpc_deprecation\", false, \"whether to process grpc method's deprecated option.\")\n\tenableFieldDeprecation          = flag.Bool(\"enable_field_deprecation\", false, \"whether to process proto field's deprecated option.\")\n\texpandSlashedPathPatterns       = flag.Bool(\"expand_slashed_path_patterns\", false, \"if set, expands path parameters with URI sub-paths into the URI. For example, \\\"/v1/{name=projects/*}/resource\\\" becomes \\\"/v1/projects/{project}/resource\\\".\")\n\tuseProto3FieldSemantics         = flag.Bool(\"use_proto3_field_semantics\", false, \"if set, uses proto3 field semantics for the OpenAPI schema. This means that fields are required by default.\")\n\tgenerateXGoType                 = flag.Bool(\"generate_x_go_type\", false, \"if set, generates x-go-type extension using the go_package option from proto files\")\n\n\t_ = flag.Bool(\"logtostderr\", false, \"Legacy glog compatibility. This flag is a no-op, you can safely remove it\")\n)\n\n// Variables set by goreleaser at build time\nvar (\n\tversion = \"dev\"\n\tcommit  = \"unknown\"\n\tdate    = \"unknown\"\n)\n\nfunc main() {\n\tflag.Parse()\n\n\tif *versionFlag {\n\t\tif commit == \"unknown\" {\n\t\t\tbuildInfo, ok := debug.ReadBuildInfo()\n\t\t\tif ok {\n\t\t\t\tversion = buildInfo.Main.Version\n\t\t\t\tfor _, setting := range buildInfo.Settings {\n\t\t\t\t\tif setting.Key == \"vcs.revision\" {\n\t\t\t\t\t\tcommit = setting.Value\n\t\t\t\t\t}\n\t\t\t\t\tif setting.Key == \"vcs.time\" {\n\t\t\t\t\t\tdate = setting.Value\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfmt.Printf(\"Version %v, commit %v, built at %v\\n\", version, commit, date)\n\t\tos.Exit(0)\n\t}\n\n\treg := descriptor.NewRegistry()\n\tif grpclog.V(1) {\n\t\tgrpclog.Info(\"Processing code generator request\")\n\t}\n\tf := os.Stdin\n\tif *file != \"-\" {\n\t\tvar err error\n\t\tf, err = os.Open(*file)\n\t\tif err != nil {\n\t\t\tgrpclog.Fatal(err)\n\t\t}\n\t}\n\tif grpclog.V(1) {\n\t\tgrpclog.Info(\"Parsing code generator request\")\n\t}\n\treq, err := codegenerator.ParseRequest(f)\n\tif err != nil {\n\t\tgrpclog.Fatal(err)\n\t}\n\tif grpclog.V(1) {\n\t\tgrpclog.Info(\"Parsed code generator request\")\n\t}\n\tpkgMap := make(map[string]string)\n\tif req.Parameter != nil {\n\t\tif err := parseReqParam(req.GetParameter(), flag.CommandLine, pkgMap); err != nil {\n\t\t\tgrpclog.Fatalf(\"Error parsing flags: %v\", err)\n\t\t}\n\t}\n\n\treg.SetPrefix(*importPrefix)\n\treg.SetAllowDeleteBody(*allowDeleteBody)\n\treg.SetAllowMerge(*allowMerge)\n\treg.SetMergeFileName(*mergeFileName)\n\treg.SetUseJSONNamesForFields(*useJSONNamesForFields)\n\treg.SetUseProto3FieldSemantics(*useProto3FieldSemantics)\n\n\tflag.Visit(func(f *flag.Flag) {\n\t\tif f.Name == \"allow_repeated_fields_in_body\" {\n\t\t\tgrpclog.Warning(\"The `allow_repeated_fields_in_body` flag is deprecated and will always behave as `true`.\")\n\t\t}\n\t})\n\n\treg.SetIncludePackageInTags(*includePackageInTags)\n\n\treg.SetUseFQNForOpenAPIName(*useFQNForOpenAPIName)\n\t// Set the naming strategy either directly from the flag, or via the value of the legacy fqn_for_openapi_name\n\t// flag.\n\tnamingStrategy := *openAPINamingStrategy\n\tif *useFQNForOpenAPIName {\n\t\tif namingStrategy != \"\" {\n\t\t\tgrpclog.Fatal(\"The deprecated `fqn_for_openapi_name` flag must remain unset if `openapi_naming_strategy` is set.\")\n\t\t}\n\t\tgrpclog.Warning(\"The `fqn_for_openapi_name` flag is deprecated. Please use `openapi_naming_strategy=fqn` instead.\")\n\t\tnamingStrategy = \"fqn\"\n\t} else if namingStrategy == \"\" {\n\t\tnamingStrategy = \"legacy\"\n\t}\n\tif strategyFn := genopenapi.LookupNamingStrategy(namingStrategy); strategyFn == nil {\n\t\temitError(fmt.Errorf(\"invalid naming strategy %q\", namingStrategy))\n\t\treturn\n\t}\n\n\tif *useGoTemplate && *ignoreComments {\n\t\temitError(fmt.Errorf(\"`ignore_comments` and `use_go_templates` are mutually exclusive and cannot be enabled at the same time\"))\n\t\treturn\n\t}\n\treg.SetUseGoTemplate(*useGoTemplate)\n\treg.SetIgnoreComments(*ignoreComments)\n\treg.SetRemoveInternalComments(*removeInternalComments)\n\n\tif len(*goTemplateArgs) > 0 && !*useGoTemplate {\n\t\temitError(fmt.Errorf(\"`go_template_args` requires `use_go_templates` to be enabled\"))\n\t\treturn\n\t}\n\treg.SetGoTemplateArgs(*goTemplateArgs)\n\n\treg.SetOpenAPINamingStrategy(namingStrategy)\n\treg.SetEnumsAsInts(*enumsAsInts)\n\treg.SetDisableDefaultErrors(*disableDefaultErrors)\n\treg.SetSimpleOperationIDs(*simpleOperationIDs)\n\treg.SetProto3OptionalNullable(*proto3OptionalNullable)\n\treg.SetGenerateUnboundMethods(*generateUnboundMethods)\n\treg.SetRecursiveDepth(*recursiveDepth)\n\treg.SetOmitEnumDefaultValue(*omitEnumDefaultValue)\n\treg.SetVisibilityRestrictionSelectors(*visibilityRestrictionSelectors)\n\treg.SetDisableServiceTags(*disableServiceTags)\n\treg.SetDisableDefaultResponses(*disableDefaultResponses)\n\treg.SetUseAllOfForRefs(*useAllOfForRefs)\n\treg.SetOmitArrayItemTypeWhenRefSibling(*omitArrayItemTypeWhenRefSibling)\n\treg.SetAllowPatchFeature(*allowPatchFeature)\n\treg.SetPreserveRPCOrder(*preserveRPCOrder)\n\treg.SetEnableRpcDeprecation(*enableRpcDeprecation)\n\treg.SetEnableFieldDeprecation(*enableFieldDeprecation)\n\treg.SetExpandSlashedPathPatterns(*expandSlashedPathPatterns)\n\treg.SetGenerateXGoType(*generateXGoType)\n\n\tif err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil {\n\t\temitError(err)\n\t\treturn\n\t}\n\tfor k, v := range pkgMap {\n\t\treg.AddPkgMap(k, v)\n\t}\n\n\tif *grpcAPIConfiguration != \"\" {\n\t\tif err := reg.LoadGrpcAPIServiceFromYAML(*grpcAPIConfiguration); err != nil {\n\t\t\temitError(err)\n\t\t\treturn\n\t\t}\n\t}\n\n\tformat := genopenapi.Format(*outputFormat)\n\tif err := format.Validate(); err != nil {\n\t\temitError(err)\n\t\treturn\n\t}\n\n\tg := genopenapi.New(reg, format)\n\n\tif err := genopenapi.AddErrorDefs(reg); err != nil {\n\t\temitError(err)\n\t\treturn\n\t}\n\n\tif err := reg.Load(req); err != nil {\n\t\temitError(err)\n\t\treturn\n\t}\n\n\tif *openAPIConfiguration != \"\" {\n\t\tif err := reg.LoadOpenAPIConfigFromYAML(*openAPIConfiguration); err != nil {\n\t\t\temitError(err)\n\t\t\treturn\n\t\t}\n\t}\n\n\ttargets := make([]*descriptor.File, 0, len(req.FileToGenerate))\n\tfor _, target := range req.FileToGenerate {\n\t\tf, err := reg.LookupFile(target)\n\t\tif err != nil {\n\t\t\tgrpclog.Fatal(err)\n\t\t}\n\t\ttargets = append(targets, f)\n\t}\n\n\tout, err := g.Generate(targets)\n\tif grpclog.V(1) {\n\t\tgrpclog.Info(\"Processed code generator request\")\n\t}\n\tif err != nil {\n\t\temitError(err)\n\t\treturn\n\t}\n\temitFiles(out)\n}\n\nfunc emitFiles(out []*descriptor.ResponseFile) {\n\tfiles := make([]*pluginpb.CodeGeneratorResponse_File, len(out))\n\tfor idx, item := range out {\n\t\tfiles[idx] = item.CodeGeneratorResponse_File\n\t}\n\tresp := &pluginpb.CodeGeneratorResponse{File: files}\n\tcodegenerator.SetSupportedFeaturesOnCodeGeneratorResponse(resp)\n\temitResp(resp)\n}\n\nfunc emitError(err error) {\n\temitResp(&pluginpb.CodeGeneratorResponse{Error: proto.String(err.Error())})\n}\n\nfunc emitResp(resp *pluginpb.CodeGeneratorResponse) {\n\tbuf, err := proto.Marshal(resp)\n\tif err != nil {\n\t\tgrpclog.Fatal(err)\n\t}\n\tif _, err := os.Stdout.Write(buf); err != nil {\n\t\tgrpclog.Fatal(err)\n\t}\n}\n\n// parseReqParam parses a CodeGeneratorRequest parameter and adds the\n// extracted values to the given FlagSet and pkgMap. Returns a non-nil\n// error if setting a flag failed.\nfunc parseReqParam(param string, f *flag.FlagSet, pkgMap map[string]string) error {\n\tif param == \"\" {\n\t\treturn nil\n\t}\n\tfor _, p := range strings.Split(param, \",\") {\n\t\tspec := strings.SplitN(p, \"=\", 2)\n\t\tif len(spec) == 1 {\n\t\t\tswitch spec[0] {\n\t\t\tcase \"allow_delete_body\":\n\t\t\t\tif err := f.Set(spec[0], \"true\"); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot set flag %s: %w\", p, err)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\tcase \"allow_merge\":\n\t\t\t\tif err := f.Set(spec[0], \"true\"); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot set flag %s: %w\", p, err)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\tcase \"allow_repeated_fields_in_body\":\n\t\t\t\tif err := f.Set(spec[0], \"true\"); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot set flag %s: %w\", p, err)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\tcase \"include_package_in_tags\":\n\t\t\t\tif err := f.Set(spec[0], \"true\"); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot set flag %s: %w\", p, err)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := f.Set(spec[0], \"\"); err != nil {\n\t\t\t\treturn fmt.Errorf(\"cannot set flag %s: %w\", p, err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tname, value := spec[0], spec[1]\n\t\tif strings.HasPrefix(name, \"M\") {\n\t\t\tpkgMap[name[1:]] = value\n\t\t\tcontinue\n\t\t}\n\t\tif err := f.Set(name, value); err != nil {\n\t\t\treturn fmt.Errorf(\"cannot set flag %s: %w\", p, err)\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/main_test.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"flag\"\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestParseReqParam(t *testing.T) {\n\n\ttestcases := []struct {\n\t\tname                   string\n\t\texpected               map[string]string\n\t\trequest                string\n\t\texpectedError          error\n\t\tallowDeleteBodyV       bool\n\t\tallowMergeV            bool\n\t\tincludePackageInTagsV  bool\n\t\tfileV                  string\n\t\timportPathV            string\n\t\tmergeFileNameV         string\n\t\tuseFQNForOpenAPINameV  bool\n\t\topenAPINamingStrategyV string\n\t}{\n\t\t{\n\t\t\t// this one must be first - with no leading clearFlags call it\n\t\t\t// verifies our expectation of default values as we reset by\n\t\t\t// clearFlags\n\t\t\tname:                  \"Test 0\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"\",\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tfileV:                 \"-\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 1\",\n\t\t\texpected:              map[string]string{\"google/api/annotations.proto\": \"github.com/googleapis/googleapis/google/api\"},\n\t\t\trequest:               \"allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api\",\n\t\t\tallowDeleteBodyV:      true,\n\t\t\tallowMergeV:           true,\n\t\t\tincludePackageInTagsV: true,\n\t\t\tfileV:                 \"./foo.pb\",\n\t\t\timportPathV:           \"/bar/baz\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 2\",\n\t\t\texpected:              map[string]string{\"google/api/annotations.proto\": \"github.com/googleapis/googleapis/google/api\"},\n\t\t\trequest:               \"allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api\",\n\t\t\tallowDeleteBodyV:      true,\n\t\t\tallowMergeV:           true,\n\t\t\tincludePackageInTagsV: true,\n\t\t\tfileV:                 \"./foo.pb\",\n\t\t\timportPathV:           \"/bar/baz\",\n\t\t\tmergeFileNameV:        \"test_name\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 3\",\n\t\t\texpected:              map[string]string{\"a/b/c.proto\": \"github.com/x/y/z\", \"f/g/h.proto\": \"github.com/1/2/3/\"},\n\t\t\trequest:               \"allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/\",\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tfileV:                 \"stdin\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 4\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"\",\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tfileV:                 \"stdin\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 5\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"unknown_param=17\",\n\t\t\texpectedError:         errors.New(\"cannot set flag unknown_param=17: no such flag -unknown_param\"),\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tfileV:                 \"stdin\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 6\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"Mfoo\",\n\t\t\texpectedError:         errors.New(\"cannot set flag Mfoo: no such flag -Mfoo\"),\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tfileV:                 \"stdin\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 7\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,merge_file_name\",\n\t\t\tallowDeleteBodyV:      true,\n\t\t\tallowMergeV:           true,\n\t\t\tincludePackageInTagsV: true,\n\t\t\tfileV:                 \"\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 8\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name\",\n\t\t\texpectedError:         errors.New(`cannot set flag allow_repeated_fields_in_body=3: parse error`),\n\t\t\tallowDeleteBodyV:      true,\n\t\t\tallowMergeV:           true,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tfileV:                 \"\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 9\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"include_package_in_tags=3\",\n\t\t\texpectedError:         errors.New(`cannot set flag include_package_in_tags=3: parse error`),\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tfileV:                 \"stdin\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 10\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"fqn_for_openapi_name=3\",\n\t\t\texpectedError:         errors.New(`cannot set flag fqn_for_openapi_name=3: parse error`),\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tuseFQNForOpenAPINameV: false,\n\t\t\tfileV:                 \"stdin\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                  \"Test 11\",\n\t\t\texpected:              map[string]string{},\n\t\t\trequest:               \"fqn_for_openapi_name=true\",\n\t\t\tallowDeleteBodyV:      false,\n\t\t\tallowMergeV:           false,\n\t\t\tincludePackageInTagsV: false,\n\t\t\tuseFQNForOpenAPINameV: true,\n\t\t\tfileV:                 \"stdin\",\n\t\t\timportPathV:           \"\",\n\t\t\tmergeFileNameV:        \"apidocs\",\n\t\t},\n\t\t{\n\t\t\tname:                   \"Test 12\",\n\t\t\texpected:               map[string]string{},\n\t\t\trequest:                \"openapi_naming_strategy=simple\",\n\t\t\tallowDeleteBodyV:       false,\n\t\t\tallowMergeV:            false,\n\t\t\tincludePackageInTagsV:  false,\n\t\t\tuseFQNForOpenAPINameV:  false,\n\t\t\topenAPINamingStrategyV: \"simple\",\n\t\t\tfileV:                  \"stdin\",\n\t\t\timportPathV:            \"\",\n\t\t\tmergeFileNameV:         \"apidocs\",\n\t\t},\n\t}\n\n\tfor i, tc := range testcases {\n\t\tt.Run(tc.name, func(tt *testing.T) {\n\t\t\tf := flag.CommandLine\n\t\t\tpkgMap := make(map[string]string)\n\t\t\terr := parseReqParam(tc.request, f, pkgMap)\n\t\t\tif tc.expectedError == nil {\n\t\t\t\tif err != nil {\n\t\t\t\t\ttt.Errorf(\"unexpected parse error '%v'\", err)\n\t\t\t\t}\n\t\t\t\tif !reflect.DeepEqual(pkgMap, tc.expected) {\n\t\t\t\t\ttt.Errorf(\"pkgMap parse error, expected '%v', got '%v'\", tc.expected, pkgMap)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err == nil {\n\t\t\t\t\ttt.Error(\"expected parse error not returned\")\n\t\t\t\t}\n\t\t\t\tif !reflect.DeepEqual(pkgMap, tc.expected) {\n\t\t\t\t\ttt.Errorf(\"pkgMap parse error, expected '%v', got '%v'\", tc.expected, pkgMap)\n\t\t\t\t}\n\t\t\t\tif err.Error() != tc.expectedError.Error() {\n\t\t\t\t\ttt.Errorf(\"expected error malformed, expected %q, got %q\", tc.expectedError.Error(), err.Error())\n\t\t\t\t}\n\t\t\t}\n\t\t\tcheckFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.includePackageInTagsV, tc.useFQNForOpenAPINameV, tc.openAPINamingStrategyV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i)\n\n\t\t\tclearFlags()\n\t\t})\n\t}\n}\n\nfunc checkFlags(\n\tallowDeleteV,\n\tallowMergeV,\n\tincludePackageInTagsV bool,\n\tuseFQNForOpenAPINameV bool,\n\topenAPINamingStrategyV,\n\tfileV,\n\timportPathV,\n\tmergeFileNameV string,\n\tt *testing.T,\n\ttid int,\n) {\n\tif *importPrefix != importPathV {\n\t\tt.Errorf(\"Test %v: import_prefix misparsed, expected '%v', got '%v'\", tid, importPathV, *importPrefix)\n\t}\n\tif *file != fileV {\n\t\tt.Errorf(\"Test %v: file misparsed, expected '%v', got '%v'\", tid, fileV, *file)\n\t}\n\tif *allowDeleteBody != allowDeleteV {\n\t\tt.Errorf(\"Test %v: allow_delete_body misparsed, expected '%v', got '%v'\", tid, allowDeleteV, *allowDeleteBody)\n\t}\n\tif *allowMerge != allowMergeV {\n\t\tt.Errorf(\"Test %v: allow_merge misparsed, expected '%v', got '%v'\", tid, allowMergeV, *allowMerge)\n\t}\n\tif *mergeFileName != mergeFileNameV {\n\t\tt.Errorf(\"Test %v: merge_file_name misparsed, expected '%v', got '%v'\", tid, mergeFileNameV, *mergeFileName)\n\t}\n\tif *includePackageInTags != includePackageInTagsV {\n\t\tt.Errorf(\"Test %v: include_package_in_tags misparsed, expected '%v', got '%v'\", tid, includePackageInTagsV, *includePackageInTags)\n\t}\n\tif *useFQNForOpenAPIName != useFQNForOpenAPINameV {\n\t\tt.Errorf(\"Test %v: fqn_for_openapi_name misparsed, expected '%v', got '%v'\", tid, useFQNForOpenAPINameV, *useFQNForOpenAPIName)\n\t}\n\tif *openAPINamingStrategy != openAPINamingStrategyV {\n\t\tt.Errorf(\"Test %v: openapi_naming_strategy misparsed, expected '%v', got '%v'\", tid, openAPINamingStrategyV, *openAPINamingStrategy)\n\t}\n}\n\nfunc clearFlags() {\n\t*importPrefix = \"\"\n\t*file = \"stdin\"\n\t*allowDeleteBody = false\n\t*allowMerge = false\n\t*includePackageInTags = false\n\t*mergeFileName = \"apidocs\"\n\t*useFQNForOpenAPIName = false\n\t*openAPINamingStrategy = \"\"\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n    name = \"options_proto_files\",\n    srcs = [\n        \"annotations.proto\",\n        \"openapiv2.proto\",\n    ],\n)\n\ngo_library(\n    name = \"options\",\n    embed = [\":options_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\",\n)\n\nproto_library(\n    name = \"options_proto\",\n    srcs = [\n        \"annotations.proto\",\n        \"openapiv2.proto\",\n    ],\n    deps = [\n        \"@com_google_protobuf//:descriptor_proto\",\n        \"@com_google_protobuf//:struct_proto\",\n    ],\n)\n\ngo_proto_library(\n    name = \"options_go_proto\",\n    compilers = [\"//:go_apiv2\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\",\n    proto = \":options_proto\",\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":options\",\n    visibility = [\"//visibility:public\"],\n)\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/annotations.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.0\n// \tprotoc        (unknown)\n// source: protoc-gen-openapiv2/options/annotations.proto\n\n//go:build !protoopaque\n\npackage options\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdescriptorpb \"google.golang.org/protobuf/types/descriptorpb\"\n\treflect \"reflect\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\nvar file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.ExtensionInfo{\n\t{\n\t\tExtendedType:  (*descriptorpb.FileOptions)(nil),\n\t\tExtensionType: (*Swagger)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_swagger\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.MethodOptions)(nil),\n\t\tExtensionType: (*Operation)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_operation\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.MessageOptions)(nil),\n\t\tExtensionType: (*Schema)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_schema\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.EnumOptions)(nil),\n\t\tExtensionType: (*EnumSchema)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_enum\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.ServiceOptions)(nil),\n\t\tExtensionType: (*Tag)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_tag\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.FieldOptions)(nil),\n\t\tExtensionType: (*JSONSchema)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_field\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n}\n\n// Extension fields to descriptorpb.FileOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Swagger openapiv2_swagger = 1042;\n\tE_Openapiv2Swagger = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[0]\n)\n\n// Extension fields to descriptorpb.MethodOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Operation openapiv2_operation = 1042;\n\tE_Openapiv2Operation = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[1]\n)\n\n// Extension fields to descriptorpb.MessageOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Schema openapiv2_schema = 1042;\n\tE_Openapiv2Schema = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[2]\n)\n\n// Extension fields to descriptorpb.EnumOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.EnumSchema openapiv2_enum = 1042;\n\tE_Openapiv2Enum = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[3]\n)\n\n// Extension fields to descriptorpb.ServiceOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Tag openapiv2_tag = 1042;\n\tE_Openapiv2Tag = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[4]\n)\n\n// Extension fields to descriptorpb.FieldOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.JSONSchema openapiv2_field = 1042;\n\tE_Openapiv2Field = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[5]\n)\n\nvar File_protoc_gen_openapiv2_options_annotations_proto protoreflect.FileDescriptor\n\nvar file_protoc_gen_openapiv2_options_annotations_proto_rawDesc = []byte{\n\t0x0a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61,\n\t0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x12, 0x29, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73,\n\t0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x7e, 0x0a, 0x11, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72,\n\t0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92,\n\t0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x61,\n\t0x70, 0x69, 0x76, 0x32, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x3a, 0x86, 0x01, 0x0a, 0x13,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x52, 0x12, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x4f, 0x70, 0x65, 0x72, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x7e, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61,\n\t0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68,\n\t0x65, 0x6d, 0x61, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x53, 0x63,\n\t0x68, 0x65, 0x6d, 0x61, 0x3a, 0x7b, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x61, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x45, 0x6e, 0x75,\n\t0x6d, 0x3a, 0x75, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x74,\n\t0x61, 0x67, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x54, 0x61, 0x67, 0x3a, 0x7e, 0x0a, 0x0f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69,\n\t0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53,\n\t0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68,\n\t0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73,\n\t0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e,\n\t0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar file_protoc_gen_openapiv2_options_annotations_proto_goTypes = []any{\n\t(*descriptorpb.FileOptions)(nil),    // 0: google.protobuf.FileOptions\n\t(*descriptorpb.MethodOptions)(nil),  // 1: google.protobuf.MethodOptions\n\t(*descriptorpb.MessageOptions)(nil), // 2: google.protobuf.MessageOptions\n\t(*descriptorpb.EnumOptions)(nil),    // 3: google.protobuf.EnumOptions\n\t(*descriptorpb.ServiceOptions)(nil), // 4: google.protobuf.ServiceOptions\n\t(*descriptorpb.FieldOptions)(nil),   // 5: google.protobuf.FieldOptions\n\t(*Swagger)(nil),                     // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t(*Operation)(nil),                   // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t(*Schema)(nil),                      // 8: grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t(*EnumSchema)(nil),                  // 9: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema\n\t(*Tag)(nil),                         // 10: grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t(*JSONSchema)(nil),                  // 11: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n}\nvar file_protoc_gen_openapiv2_options_annotations_proto_depIdxs = []int32{\n\t0,  // 0: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger:extendee -> google.protobuf.FileOptions\n\t1,  // 1: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation:extendee -> google.protobuf.MethodOptions\n\t2,  // 2: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema:extendee -> google.protobuf.MessageOptions\n\t3,  // 3: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum:extendee -> google.protobuf.EnumOptions\n\t4,  // 4: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag:extendee -> google.protobuf.ServiceOptions\n\t5,  // 5: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field:extendee -> google.protobuf.FieldOptions\n\t6,  // 6: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t7,  // 7: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t8,  // 8: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t9,  // 9: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum:type_name -> grpc.gateway.protoc_gen_openapiv2.options.EnumSchema\n\t10, // 10: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t11, // 11: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n\t12, // [12:12] is the sub-list for method output_type\n\t12, // [12:12] is the sub-list for method input_type\n\t6,  // [6:12] is the sub-list for extension type_name\n\t0,  // [0:6] is the sub-list for extension extendee\n\t0,  // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_protoc_gen_openapiv2_options_annotations_proto_init() }\nfunc file_protoc_gen_openapiv2_options_annotations_proto_init() {\n\tif File_protoc_gen_openapiv2_options_annotations_proto != nil {\n\t\treturn\n\t}\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_init()\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_protoc_gen_openapiv2_options_annotations_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   0,\n\t\t\tNumExtensions: 6,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_protoc_gen_openapiv2_options_annotations_proto_goTypes,\n\t\tDependencyIndexes: file_protoc_gen_openapiv2_options_annotations_proto_depIdxs,\n\t\tExtensionInfos:    file_protoc_gen_openapiv2_options_annotations_proto_extTypes,\n\t}.Build()\n\tFile_protoc_gen_openapiv2_options_annotations_proto = out.File\n\tfile_protoc_gen_openapiv2_options_annotations_proto_rawDesc = nil\n\tfile_protoc_gen_openapiv2_options_annotations_proto_goTypes = nil\n\tfile_protoc_gen_openapiv2_options_annotations_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/annotations.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.protoc_gen_openapiv2.options;\n\nimport \"google/protobuf/descriptor.proto\";\nimport \"protoc-gen-openapiv2/options/openapiv2.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\";\n\nextend google.protobuf.FileOptions {\n  // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n  //\n  // All IDs are the same, as assigned. It is okay that they are the same, as they extend\n  // different descriptor messages.\n  Swagger openapiv2_swagger = 1042;\n}\nextend google.protobuf.MethodOptions {\n  // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n  //\n  // All IDs are the same, as assigned. It is okay that they are the same, as they extend\n  // different descriptor messages.\n  Operation openapiv2_operation = 1042;\n}\nextend google.protobuf.MessageOptions {\n  // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n  //\n  // All IDs are the same, as assigned. It is okay that they are the same, as they extend\n  // different descriptor messages.\n  Schema openapiv2_schema = 1042;\n}\nextend google.protobuf.EnumOptions {\n  // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n  //\n  // All IDs are the same, as assigned. It is okay that they are the same, as they extend\n  // different descriptor messages.\n  EnumSchema openapiv2_enum = 1042;\n}\nextend google.protobuf.ServiceOptions {\n  // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n  //\n  // All IDs are the same, as assigned. It is okay that they are the same, as they extend\n  // different descriptor messages.\n  Tag openapiv2_tag = 1042;\n}\nextend google.protobuf.FieldOptions {\n  // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n  //\n  // All IDs are the same, as assigned. It is okay that they are the same, as they extend\n  // different descriptor messages.\n  JSONSchema openapiv2_field = 1042;\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/annotations_protoopaque.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.0\n// \tprotoc        (unknown)\n// source: protoc-gen-openapiv2/options/annotations.proto\n\n//go:build protoopaque\n\npackage options\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdescriptorpb \"google.golang.org/protobuf/types/descriptorpb\"\n\treflect \"reflect\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\nvar file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.ExtensionInfo{\n\t{\n\t\tExtendedType:  (*descriptorpb.FileOptions)(nil),\n\t\tExtensionType: (*Swagger)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_swagger\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.MethodOptions)(nil),\n\t\tExtensionType: (*Operation)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_operation\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.MessageOptions)(nil),\n\t\tExtensionType: (*Schema)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_schema\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.EnumOptions)(nil),\n\t\tExtensionType: (*EnumSchema)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_enum\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.ServiceOptions)(nil),\n\t\tExtensionType: (*Tag)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_tag\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n\t{\n\t\tExtendedType:  (*descriptorpb.FieldOptions)(nil),\n\t\tExtensionType: (*JSONSchema)(nil),\n\t\tField:         1042,\n\t\tName:          \"grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field\",\n\t\tTag:           \"bytes,1042,opt,name=openapiv2_field\",\n\t\tFilename:      \"protoc-gen-openapiv2/options/annotations.proto\",\n\t},\n}\n\n// Extension fields to descriptorpb.FileOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Swagger openapiv2_swagger = 1042;\n\tE_Openapiv2Swagger = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[0]\n)\n\n// Extension fields to descriptorpb.MethodOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Operation openapiv2_operation = 1042;\n\tE_Openapiv2Operation = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[1]\n)\n\n// Extension fields to descriptorpb.MessageOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Schema openapiv2_schema = 1042;\n\tE_Openapiv2Schema = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[2]\n)\n\n// Extension fields to descriptorpb.EnumOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.EnumSchema openapiv2_enum = 1042;\n\tE_Openapiv2Enum = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[3]\n)\n\n// Extension fields to descriptorpb.ServiceOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.Tag openapiv2_tag = 1042;\n\tE_Openapiv2Tag = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[4]\n)\n\n// Extension fields to descriptorpb.FieldOptions.\nvar (\n\t// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.\n\t//\n\t// All IDs are the same, as assigned. It is okay that they are the same, as they extend\n\t// different descriptor messages.\n\t//\n\t// optional grpc.gateway.protoc_gen_openapiv2.options.JSONSchema openapiv2_field = 1042;\n\tE_Openapiv2Field = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[5]\n)\n\nvar File_protoc_gen_openapiv2_options_annotations_proto protoreflect.FileDescriptor\n\nvar file_protoc_gen_openapiv2_options_annotations_proto_rawDesc = []byte{\n\t0x0a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61,\n\t0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x12, 0x29, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73,\n\t0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x7e, 0x0a, 0x11, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72,\n\t0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92,\n\t0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x61,\n\t0x70, 0x69, 0x76, 0x32, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x3a, 0x86, 0x01, 0x0a, 0x13,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x52, 0x12, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x4f, 0x70, 0x65, 0x72, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x7e, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61,\n\t0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68,\n\t0x65, 0x6d, 0x61, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x53, 0x63,\n\t0x68, 0x65, 0x6d, 0x61, 0x3a, 0x7b, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x61, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x45, 0x6e, 0x75,\n\t0x6d, 0x3a, 0x75, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x74,\n\t0x61, 0x67, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x54, 0x61, 0x67, 0x3a, 0x7e, 0x0a, 0x0f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69,\n\t0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53,\n\t0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68,\n\t0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73,\n\t0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e,\n\t0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar file_protoc_gen_openapiv2_options_annotations_proto_goTypes = []any{\n\t(*descriptorpb.FileOptions)(nil),    // 0: google.protobuf.FileOptions\n\t(*descriptorpb.MethodOptions)(nil),  // 1: google.protobuf.MethodOptions\n\t(*descriptorpb.MessageOptions)(nil), // 2: google.protobuf.MessageOptions\n\t(*descriptorpb.EnumOptions)(nil),    // 3: google.protobuf.EnumOptions\n\t(*descriptorpb.ServiceOptions)(nil), // 4: google.protobuf.ServiceOptions\n\t(*descriptorpb.FieldOptions)(nil),   // 5: google.protobuf.FieldOptions\n\t(*Swagger)(nil),                     // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t(*Operation)(nil),                   // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t(*Schema)(nil),                      // 8: grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t(*EnumSchema)(nil),                  // 9: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema\n\t(*Tag)(nil),                         // 10: grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t(*JSONSchema)(nil),                  // 11: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n}\nvar file_protoc_gen_openapiv2_options_annotations_proto_depIdxs = []int32{\n\t0,  // 0: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger:extendee -> google.protobuf.FileOptions\n\t1,  // 1: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation:extendee -> google.protobuf.MethodOptions\n\t2,  // 2: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema:extendee -> google.protobuf.MessageOptions\n\t3,  // 3: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum:extendee -> google.protobuf.EnumOptions\n\t4,  // 4: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag:extendee -> google.protobuf.ServiceOptions\n\t5,  // 5: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field:extendee -> google.protobuf.FieldOptions\n\t6,  // 6: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t7,  // 7: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t8,  // 8: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t9,  // 9: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum:type_name -> grpc.gateway.protoc_gen_openapiv2.options.EnumSchema\n\t10, // 10: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t11, // 11: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n\t12, // [12:12] is the sub-list for method output_type\n\t12, // [12:12] is the sub-list for method input_type\n\t6,  // [6:12] is the sub-list for extension type_name\n\t0,  // [0:6] is the sub-list for extension extendee\n\t0,  // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_protoc_gen_openapiv2_options_annotations_proto_init() }\nfunc file_protoc_gen_openapiv2_options_annotations_proto_init() {\n\tif File_protoc_gen_openapiv2_options_annotations_proto != nil {\n\t\treturn\n\t}\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_init()\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_protoc_gen_openapiv2_options_annotations_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   0,\n\t\t\tNumExtensions: 6,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_protoc_gen_openapiv2_options_annotations_proto_goTypes,\n\t\tDependencyIndexes: file_protoc_gen_openapiv2_options_annotations_proto_depIdxs,\n\t\tExtensionInfos:    file_protoc_gen_openapiv2_options_annotations_proto_extTypes,\n\t}.Build()\n\tFile_protoc_gen_openapiv2_options_annotations_proto = out.File\n\tfile_protoc_gen_openapiv2_options_annotations_proto_rawDesc = nil\n\tfile_protoc_gen_openapiv2_options_annotations_proto_goTypes = nil\n\tfile_protoc_gen_openapiv2_options_annotations_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/buf.gen.yaml",
    "content": "version: v2\nplugins:\n  - remote: buf.build/protocolbuffers/go:v1.36.0\n    out: .\n    opt:\n      - paths=source_relative\n      - default_api_level=API_HYBRID\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/openapiv2.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.0\n// \tprotoc        (unknown)\n// source: protoc-gen-openapiv2/options/openapiv2.proto\n\n//go:build !protoopaque\n\npackage options\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n\treflect \"reflect\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// Scheme describes the schemes supported by the OpenAPI Swagger\n// and Operation objects.\ntype Scheme int32\n\nconst (\n\tScheme_UNKNOWN Scheme = 0\n\tScheme_HTTP    Scheme = 1\n\tScheme_HTTPS   Scheme = 2\n\tScheme_WS      Scheme = 3\n\tScheme_WSS     Scheme = 4\n)\n\n// Enum value maps for Scheme.\nvar (\n\tScheme_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"HTTP\",\n\t\t2: \"HTTPS\",\n\t\t3: \"WS\",\n\t\t4: \"WSS\",\n\t}\n\tScheme_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"HTTP\":    1,\n\t\t\"HTTPS\":   2,\n\t\t\"WS\":      3,\n\t\t\"WSS\":     4,\n\t}\n)\n\nfunc (x Scheme) Enum() *Scheme {\n\tp := new(Scheme)\n\t*p = x\n\treturn p\n}\n\nfunc (x Scheme) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (Scheme) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[0].Descriptor()\n}\n\nfunc (Scheme) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[0]\n}\n\nfunc (x Scheme) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// `Type` is a supported HTTP header type.\n// See https://swagger.io/specification/v2/#parameterType.\ntype HeaderParameter_Type int32\n\nconst (\n\tHeaderParameter_UNKNOWN HeaderParameter_Type = 0\n\tHeaderParameter_STRING  HeaderParameter_Type = 1\n\tHeaderParameter_NUMBER  HeaderParameter_Type = 2\n\tHeaderParameter_INTEGER HeaderParameter_Type = 3\n\tHeaderParameter_BOOLEAN HeaderParameter_Type = 4\n)\n\n// Enum value maps for HeaderParameter_Type.\nvar (\n\tHeaderParameter_Type_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"STRING\",\n\t\t2: \"NUMBER\",\n\t\t3: \"INTEGER\",\n\t\t4: \"BOOLEAN\",\n\t}\n\tHeaderParameter_Type_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"STRING\":  1,\n\t\t\"NUMBER\":  2,\n\t\t\"INTEGER\": 3,\n\t\t\"BOOLEAN\": 4,\n\t}\n)\n\nfunc (x HeaderParameter_Type) Enum() *HeaderParameter_Type {\n\tp := new(HeaderParameter_Type)\n\t*p = x\n\treturn p\n}\n\nfunc (x HeaderParameter_Type) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (HeaderParameter_Type) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1].Descriptor()\n}\n\nfunc (HeaderParameter_Type) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1]\n}\n\nfunc (x HeaderParameter_Type) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype JSONSchema_JSONSchemaSimpleTypes int32\n\nconst (\n\tJSONSchema_UNKNOWN JSONSchema_JSONSchemaSimpleTypes = 0\n\tJSONSchema_ARRAY   JSONSchema_JSONSchemaSimpleTypes = 1\n\tJSONSchema_BOOLEAN JSONSchema_JSONSchemaSimpleTypes = 2\n\tJSONSchema_INTEGER JSONSchema_JSONSchemaSimpleTypes = 3\n\tJSONSchema_NULL    JSONSchema_JSONSchemaSimpleTypes = 4\n\tJSONSchema_NUMBER  JSONSchema_JSONSchemaSimpleTypes = 5\n\tJSONSchema_OBJECT  JSONSchema_JSONSchemaSimpleTypes = 6\n\tJSONSchema_STRING  JSONSchema_JSONSchemaSimpleTypes = 7\n)\n\n// Enum value maps for JSONSchema_JSONSchemaSimpleTypes.\nvar (\n\tJSONSchema_JSONSchemaSimpleTypes_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"ARRAY\",\n\t\t2: \"BOOLEAN\",\n\t\t3: \"INTEGER\",\n\t\t4: \"NULL\",\n\t\t5: \"NUMBER\",\n\t\t6: \"OBJECT\",\n\t\t7: \"STRING\",\n\t}\n\tJSONSchema_JSONSchemaSimpleTypes_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"ARRAY\":   1,\n\t\t\"BOOLEAN\": 2,\n\t\t\"INTEGER\": 3,\n\t\t\"NULL\":    4,\n\t\t\"NUMBER\":  5,\n\t\t\"OBJECT\":  6,\n\t\t\"STRING\":  7,\n\t}\n)\n\nfunc (x JSONSchema_JSONSchemaSimpleTypes) Enum() *JSONSchema_JSONSchemaSimpleTypes {\n\tp := new(JSONSchema_JSONSchemaSimpleTypes)\n\t*p = x\n\treturn p\n}\n\nfunc (x JSONSchema_JSONSchemaSimpleTypes) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (JSONSchema_JSONSchemaSimpleTypes) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2].Descriptor()\n}\n\nfunc (JSONSchema_JSONSchemaSimpleTypes) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2]\n}\n\nfunc (x JSONSchema_JSONSchemaSimpleTypes) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// The type of the security scheme. Valid values are \"basic\",\n// \"apiKey\" or \"oauth2\".\ntype SecurityScheme_Type int32\n\nconst (\n\tSecurityScheme_TYPE_INVALID SecurityScheme_Type = 0\n\tSecurityScheme_TYPE_BASIC   SecurityScheme_Type = 1\n\tSecurityScheme_TYPE_API_KEY SecurityScheme_Type = 2\n\tSecurityScheme_TYPE_OAUTH2  SecurityScheme_Type = 3\n)\n\n// Enum value maps for SecurityScheme_Type.\nvar (\n\tSecurityScheme_Type_name = map[int32]string{\n\t\t0: \"TYPE_INVALID\",\n\t\t1: \"TYPE_BASIC\",\n\t\t2: \"TYPE_API_KEY\",\n\t\t3: \"TYPE_OAUTH2\",\n\t}\n\tSecurityScheme_Type_value = map[string]int32{\n\t\t\"TYPE_INVALID\": 0,\n\t\t\"TYPE_BASIC\":   1,\n\t\t\"TYPE_API_KEY\": 2,\n\t\t\"TYPE_OAUTH2\":  3,\n\t}\n)\n\nfunc (x SecurityScheme_Type) Enum() *SecurityScheme_Type {\n\tp := new(SecurityScheme_Type)\n\t*p = x\n\treturn p\n}\n\nfunc (x SecurityScheme_Type) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SecurityScheme_Type) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3].Descriptor()\n}\n\nfunc (SecurityScheme_Type) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3]\n}\n\nfunc (x SecurityScheme_Type) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// The location of the API key. Valid values are \"query\" or \"header\".\ntype SecurityScheme_In int32\n\nconst (\n\tSecurityScheme_IN_INVALID SecurityScheme_In = 0\n\tSecurityScheme_IN_QUERY   SecurityScheme_In = 1\n\tSecurityScheme_IN_HEADER  SecurityScheme_In = 2\n)\n\n// Enum value maps for SecurityScheme_In.\nvar (\n\tSecurityScheme_In_name = map[int32]string{\n\t\t0: \"IN_INVALID\",\n\t\t1: \"IN_QUERY\",\n\t\t2: \"IN_HEADER\",\n\t}\n\tSecurityScheme_In_value = map[string]int32{\n\t\t\"IN_INVALID\": 0,\n\t\t\"IN_QUERY\":   1,\n\t\t\"IN_HEADER\":  2,\n\t}\n)\n\nfunc (x SecurityScheme_In) Enum() *SecurityScheme_In {\n\tp := new(SecurityScheme_In)\n\t*p = x\n\treturn p\n}\n\nfunc (x SecurityScheme_In) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SecurityScheme_In) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4].Descriptor()\n}\n\nfunc (SecurityScheme_In) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4]\n}\n\nfunc (x SecurityScheme_In) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// The flow used by the OAuth2 security scheme. Valid values are\n// \"implicit\", \"password\", \"application\" or \"accessCode\".\ntype SecurityScheme_Flow int32\n\nconst (\n\tSecurityScheme_FLOW_INVALID     SecurityScheme_Flow = 0\n\tSecurityScheme_FLOW_IMPLICIT    SecurityScheme_Flow = 1\n\tSecurityScheme_FLOW_PASSWORD    SecurityScheme_Flow = 2\n\tSecurityScheme_FLOW_APPLICATION SecurityScheme_Flow = 3\n\tSecurityScheme_FLOW_ACCESS_CODE SecurityScheme_Flow = 4\n)\n\n// Enum value maps for SecurityScheme_Flow.\nvar (\n\tSecurityScheme_Flow_name = map[int32]string{\n\t\t0: \"FLOW_INVALID\",\n\t\t1: \"FLOW_IMPLICIT\",\n\t\t2: \"FLOW_PASSWORD\",\n\t\t3: \"FLOW_APPLICATION\",\n\t\t4: \"FLOW_ACCESS_CODE\",\n\t}\n\tSecurityScheme_Flow_value = map[string]int32{\n\t\t\"FLOW_INVALID\":     0,\n\t\t\"FLOW_IMPLICIT\":    1,\n\t\t\"FLOW_PASSWORD\":    2,\n\t\t\"FLOW_APPLICATION\": 3,\n\t\t\"FLOW_ACCESS_CODE\": 4,\n\t}\n)\n\nfunc (x SecurityScheme_Flow) Enum() *SecurityScheme_Flow {\n\tp := new(SecurityScheme_Flow)\n\t*p = x\n\treturn p\n}\n\nfunc (x SecurityScheme_Flow) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SecurityScheme_Flow) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[5].Descriptor()\n}\n\nfunc (SecurityScheme_Flow) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[5]\n}\n\nfunc (x SecurityScheme_Flow) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// `Swagger` is a representation of OpenAPI v2 specification's Swagger object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    title: \"Echo API\";\n//\t    version: \"1.0\";\n//\t    description: \"\";\n//\t    contact: {\n//\t      name: \"gRPC-Gateway project\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t      email: \"none@example.com\";\n//\t    };\n//\t    license: {\n//\t      name: \"BSD 3-Clause License\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//\t    };\n//\t  };\n//\t  schemes: HTTPS;\n//\t  consumes: \"application/json\";\n//\t  produces: \"application/json\";\n//\t};\ntype Swagger struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// Specifies the OpenAPI Specification version being used. It can be\n\t// used by the OpenAPI UI and other clients to interpret the API listing. The\n\t// value MUST be \"2.0\".\n\tSwagger string `protobuf:\"bytes,1,opt,name=swagger,proto3\" json:\"swagger,omitempty\"`\n\t// Provides metadata about the API. The metadata can be used by the\n\t// clients if needed.\n\tInfo *Info `protobuf:\"bytes,2,opt,name=info,proto3\" json:\"info,omitempty\"`\n\t// The host (name or ip) serving the API. This MUST be the host only and does\n\t// not include the scheme nor sub-paths. It MAY include a port. If the host is\n\t// not included, the host serving the documentation is to be used (including\n\t// the port). The host does not support path templating.\n\tHost string `protobuf:\"bytes,3,opt,name=host,proto3\" json:\"host,omitempty\"`\n\t// The base path on which the API is served, which is relative to the host. If\n\t// it is not included, the API is served directly under the host. The value\n\t// MUST start with a leading slash (/). The basePath does not support path\n\t// templating.\n\t// Note that using `base_path` does not change the endpoint paths that are\n\t// generated in the resulting OpenAPI file. If you wish to use `base_path`\n\t// with relatively generated OpenAPI paths, the `base_path` prefix must be\n\t// manually removed from your `google.api.http` paths and your code changed to\n\t// serve the API from the `base_path`.\n\tBasePath string `protobuf:\"bytes,4,opt,name=base_path,json=basePath,proto3\" json:\"base_path,omitempty\"`\n\t// The transfer protocol of the API. Values MUST be from the list: \"http\",\n\t// \"https\", \"ws\", \"wss\". If the schemes is not included, the default scheme to\n\t// be used is the one used to access the OpenAPI definition itself.\n\tSchemes []Scheme `protobuf:\"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.Scheme\" json:\"schemes,omitempty\"`\n\t// A list of MIME types the APIs can consume. This is global to all APIs but\n\t// can be overridden on specific API calls. Value MUST be as described under\n\t// Mime Types.\n\tConsumes []string `protobuf:\"bytes,6,rep,name=consumes,proto3\" json:\"consumes,omitempty\"`\n\t// A list of MIME types the APIs can produce. This is global to all APIs but\n\t// can be overridden on specific API calls. Value MUST be as described under\n\t// Mime Types.\n\tProduces []string `protobuf:\"bytes,7,rep,name=produces,proto3\" json:\"produces,omitempty\"`\n\t// An object to hold responses that can be used across operations. This\n\t// property does not define global responses for all operations.\n\tResponses map[string]*Response `protobuf:\"bytes,10,rep,name=responses,proto3\" json:\"responses,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\t// Security scheme definitions that can be used across the specification.\n\tSecurityDefinitions *SecurityDefinitions `protobuf:\"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3\" json:\"security_definitions,omitempty\"`\n\t// A declaration of which security schemes are applied for the API as a whole.\n\t// The list of values describes alternative security schemes that can be used\n\t// (that is, there is a logical OR between the security requirements).\n\t// Individual operations can override this definition.\n\tSecurity []*SecurityRequirement `protobuf:\"bytes,12,rep,name=security,proto3\" json:\"security,omitempty\"`\n\t// A list of tags for API documentation control. Tags can be used for logical\n\t// grouping of operations by resources or any other qualifier.\n\tTags []*Tag `protobuf:\"bytes,13,rep,name=tags,proto3\" json:\"tags,omitempty\"`\n\t// Additional external documentation.\n\tExternalDocs *ExternalDocumentation `protobuf:\"bytes,14,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions    map[string]*structpb.Value `protobuf:\"bytes,15,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Swagger) Reset() {\n\t*x = Swagger{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Swagger) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Swagger) ProtoMessage() {}\n\nfunc (x *Swagger) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Swagger) GetSwagger() string {\n\tif x != nil {\n\t\treturn x.Swagger\n\t}\n\treturn \"\"\n}\n\nfunc (x *Swagger) GetInfo() *Info {\n\tif x != nil {\n\t\treturn x.Info\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetHost() string {\n\tif x != nil {\n\t\treturn x.Host\n\t}\n\treturn \"\"\n}\n\nfunc (x *Swagger) GetBasePath() string {\n\tif x != nil {\n\t\treturn x.BasePath\n\t}\n\treturn \"\"\n}\n\nfunc (x *Swagger) GetSchemes() []Scheme {\n\tif x != nil {\n\t\treturn x.Schemes\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetConsumes() []string {\n\tif x != nil {\n\t\treturn x.Consumes\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetProduces() []string {\n\tif x != nil {\n\t\treturn x.Produces\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetResponses() map[string]*Response {\n\tif x != nil {\n\t\treturn x.Responses\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetSecurityDefinitions() *SecurityDefinitions {\n\tif x != nil {\n\t\treturn x.SecurityDefinitions\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetSecurity() []*SecurityRequirement {\n\tif x != nil {\n\t\treturn x.Security\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetTags() []*Tag {\n\tif x != nil {\n\t\treturn x.Tags\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) SetSwagger(v string) {\n\tx.Swagger = v\n}\n\nfunc (x *Swagger) SetInfo(v *Info) {\n\tx.Info = v\n}\n\nfunc (x *Swagger) SetHost(v string) {\n\tx.Host = v\n}\n\nfunc (x *Swagger) SetBasePath(v string) {\n\tx.BasePath = v\n}\n\nfunc (x *Swagger) SetSchemes(v []Scheme) {\n\tx.Schemes = v\n}\n\nfunc (x *Swagger) SetConsumes(v []string) {\n\tx.Consumes = v\n}\n\nfunc (x *Swagger) SetProduces(v []string) {\n\tx.Produces = v\n}\n\nfunc (x *Swagger) SetResponses(v map[string]*Response) {\n\tx.Responses = v\n}\n\nfunc (x *Swagger) SetSecurityDefinitions(v *SecurityDefinitions) {\n\tx.SecurityDefinitions = v\n}\n\nfunc (x *Swagger) SetSecurity(v []*SecurityRequirement) {\n\tx.Security = v\n}\n\nfunc (x *Swagger) SetTags(v []*Tag) {\n\tx.Tags = v\n}\n\nfunc (x *Swagger) SetExternalDocs(v *ExternalDocumentation) {\n\tx.ExternalDocs = v\n}\n\nfunc (x *Swagger) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *Swagger) HasInfo() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.Info != nil\n}\n\nfunc (x *Swagger) HasSecurityDefinitions() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.SecurityDefinitions != nil\n}\n\nfunc (x *Swagger) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.ExternalDocs != nil\n}\n\nfunc (x *Swagger) ClearInfo() {\n\tx.Info = nil\n}\n\nfunc (x *Swagger) ClearSecurityDefinitions() {\n\tx.SecurityDefinitions = nil\n}\n\nfunc (x *Swagger) ClearExternalDocs() {\n\tx.ExternalDocs = nil\n}\n\ntype Swagger_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Specifies the OpenAPI Specification version being used. It can be\n\t// used by the OpenAPI UI and other clients to interpret the API listing. The\n\t// value MUST be \"2.0\".\n\tSwagger string\n\t// Provides metadata about the API. The metadata can be used by the\n\t// clients if needed.\n\tInfo *Info\n\t// The host (name or ip) serving the API. This MUST be the host only and does\n\t// not include the scheme nor sub-paths. It MAY include a port. If the host is\n\t// not included, the host serving the documentation is to be used (including\n\t// the port). The host does not support path templating.\n\tHost string\n\t// The base path on which the API is served, which is relative to the host. If\n\t// it is not included, the API is served directly under the host. The value\n\t// MUST start with a leading slash (/). The basePath does not support path\n\t// templating.\n\t// Note that using `base_path` does not change the endpoint paths that are\n\t// generated in the resulting OpenAPI file. If you wish to use `base_path`\n\t// with relatively generated OpenAPI paths, the `base_path` prefix must be\n\t// manually removed from your `google.api.http` paths and your code changed to\n\t// serve the API from the `base_path`.\n\tBasePath string\n\t// The transfer protocol of the API. Values MUST be from the list: \"http\",\n\t// \"https\", \"ws\", \"wss\". If the schemes is not included, the default scheme to\n\t// be used is the one used to access the OpenAPI definition itself.\n\tSchemes []Scheme\n\t// A list of MIME types the APIs can consume. This is global to all APIs but\n\t// can be overridden on specific API calls. Value MUST be as described under\n\t// Mime Types.\n\tConsumes []string\n\t// A list of MIME types the APIs can produce. This is global to all APIs but\n\t// can be overridden on specific API calls. Value MUST be as described under\n\t// Mime Types.\n\tProduces []string\n\t// An object to hold responses that can be used across operations. This\n\t// property does not define global responses for all operations.\n\tResponses map[string]*Response\n\t// Security scheme definitions that can be used across the specification.\n\tSecurityDefinitions *SecurityDefinitions\n\t// A declaration of which security schemes are applied for the API as a whole.\n\t// The list of values describes alternative security schemes that can be used\n\t// (that is, there is a logical OR between the security requirements).\n\t// Individual operations can override this definition.\n\tSecurity []*SecurityRequirement\n\t// A list of tags for API documentation control. Tags can be used for logical\n\t// grouping of operations by resources or any other qualifier.\n\tTags []*Tag\n\t// Additional external documentation.\n\tExternalDocs *ExternalDocumentation\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Swagger_builder) Build() *Swagger {\n\tm0 := &Swagger{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Swagger = b.Swagger\n\tx.Info = b.Info\n\tx.Host = b.Host\n\tx.BasePath = b.BasePath\n\tx.Schemes = b.Schemes\n\tx.Consumes = b.Consumes\n\tx.Produces = b.Produces\n\tx.Responses = b.Responses\n\tx.SecurityDefinitions = b.SecurityDefinitions\n\tx.Security = b.Security\n\tx.Tags = b.Tags\n\tx.ExternalDocs = b.ExternalDocs\n\tx.Extensions = b.Extensions\n\treturn m0\n}\n\n// `Operation` is a representation of OpenAPI v2 specification's Operation object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject\n//\n// Example:\n//\n//\tservice EchoService {\n//\t  rpc Echo(SimpleMessage) returns (SimpleMessage) {\n//\t    option (google.api.http) = {\n//\t      get: \"/v1/example/echo/{id}\"\n//\t    };\n//\n//\t    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n//\t      summary: \"Get a message.\";\n//\t      operation_id: \"getMessage\";\n//\t      tags: \"echo\";\n//\t      responses: {\n//\t        key: \"200\"\n//\t          value: {\n//\t          description: \"OK\";\n//\t        }\n//\t      }\n//\t    };\n//\t  }\n//\t}\ntype Operation struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// A list of tags for API documentation control. Tags can be used for logical\n\t// grouping of operations by resources or any other qualifier.\n\tTags []string `protobuf:\"bytes,1,rep,name=tags,proto3\" json:\"tags,omitempty\"`\n\t// A short summary of what the operation does. For maximum readability in the\n\t// swagger-ui, this field SHOULD be less than 120 characters.\n\tSummary string `protobuf:\"bytes,2,opt,name=summary,proto3\" json:\"summary,omitempty\"`\n\t// A verbose explanation of the operation behavior. GFM syntax can be used for\n\t// rich text representation.\n\tDescription string `protobuf:\"bytes,3,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// Additional external documentation for this operation.\n\tExternalDocs *ExternalDocumentation `protobuf:\"bytes,4,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\t// Unique string used to identify the operation. The id MUST be unique among\n\t// all operations described in the API. Tools and libraries MAY use the\n\t// operationId to uniquely identify an operation, therefore, it is recommended\n\t// to follow common programming naming conventions.\n\tOperationId string `protobuf:\"bytes,5,opt,name=operation_id,json=operationId,proto3\" json:\"operation_id,omitempty\"`\n\t// A list of MIME types the operation can consume. This overrides the consumes\n\t// definition at the OpenAPI Object. An empty value MAY be used to clear the\n\t// global definition. Value MUST be as described under Mime Types.\n\tConsumes []string `protobuf:\"bytes,6,rep,name=consumes,proto3\" json:\"consumes,omitempty\"`\n\t// A list of MIME types the operation can produce. This overrides the produces\n\t// definition at the OpenAPI Object. An empty value MAY be used to clear the\n\t// global definition. Value MUST be as described under Mime Types.\n\tProduces []string `protobuf:\"bytes,7,rep,name=produces,proto3\" json:\"produces,omitempty\"`\n\t// The list of possible responses as they are returned from executing this\n\t// operation.\n\tResponses map[string]*Response `protobuf:\"bytes,9,rep,name=responses,proto3\" json:\"responses,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\t// The transfer protocol for the operation. Values MUST be from the list:\n\t// \"http\", \"https\", \"ws\", \"wss\". The value overrides the OpenAPI Object\n\t// schemes definition.\n\tSchemes []Scheme `protobuf:\"varint,10,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.Scheme\" json:\"schemes,omitempty\"`\n\t// Declares this operation to be deprecated. Usage of the declared operation\n\t// should be refrained. Default value is false.\n\tDeprecated bool `protobuf:\"varint,11,opt,name=deprecated,proto3\" json:\"deprecated,omitempty\"`\n\t// A declaration of which security schemes are applied for this operation. The\n\t// list of values describes alternative security schemes that can be used\n\t// (that is, there is a logical OR between the security requirements). This\n\t// definition overrides any declared top-level security. To remove a top-level\n\t// security declaration, an empty array can be used.\n\tSecurity []*SecurityRequirement `protobuf:\"bytes,12,rep,name=security,proto3\" json:\"security,omitempty\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value `protobuf:\"bytes,13,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\t// Custom parameters such as HTTP request headers.\n\t// See: https://swagger.io/docs/specification/2-0/describing-parameters/\n\t// and https://swagger.io/specification/v2/#parameter-object.\n\tParameters    *Parameters `protobuf:\"bytes,14,opt,name=parameters,proto3\" json:\"parameters,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Operation) Reset() {\n\t*x = Operation{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Operation) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Operation) ProtoMessage() {}\n\nfunc (x *Operation) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Operation) GetTags() []string {\n\tif x != nil {\n\t\treturn x.Tags\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetSummary() string {\n\tif x != nil {\n\t\treturn x.Summary\n\t}\n\treturn \"\"\n}\n\nfunc (x *Operation) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Operation) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetOperationId() string {\n\tif x != nil {\n\t\treturn x.OperationId\n\t}\n\treturn \"\"\n}\n\nfunc (x *Operation) GetConsumes() []string {\n\tif x != nil {\n\t\treturn x.Consumes\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetProduces() []string {\n\tif x != nil {\n\t\treturn x.Produces\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetResponses() map[string]*Response {\n\tif x != nil {\n\t\treturn x.Responses\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetSchemes() []Scheme {\n\tif x != nil {\n\t\treturn x.Schemes\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetDeprecated() bool {\n\tif x != nil {\n\t\treturn x.Deprecated\n\t}\n\treturn false\n}\n\nfunc (x *Operation) GetSecurity() []*SecurityRequirement {\n\tif x != nil {\n\t\treturn x.Security\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetParameters() *Parameters {\n\tif x != nil {\n\t\treturn x.Parameters\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) SetTags(v []string) {\n\tx.Tags = v\n}\n\nfunc (x *Operation) SetSummary(v string) {\n\tx.Summary = v\n}\n\nfunc (x *Operation) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *Operation) SetExternalDocs(v *ExternalDocumentation) {\n\tx.ExternalDocs = v\n}\n\nfunc (x *Operation) SetOperationId(v string) {\n\tx.OperationId = v\n}\n\nfunc (x *Operation) SetConsumes(v []string) {\n\tx.Consumes = v\n}\n\nfunc (x *Operation) SetProduces(v []string) {\n\tx.Produces = v\n}\n\nfunc (x *Operation) SetResponses(v map[string]*Response) {\n\tx.Responses = v\n}\n\nfunc (x *Operation) SetSchemes(v []Scheme) {\n\tx.Schemes = v\n}\n\nfunc (x *Operation) SetDeprecated(v bool) {\n\tx.Deprecated = v\n}\n\nfunc (x *Operation) SetSecurity(v []*SecurityRequirement) {\n\tx.Security = v\n}\n\nfunc (x *Operation) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *Operation) SetParameters(v *Parameters) {\n\tx.Parameters = v\n}\n\nfunc (x *Operation) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.ExternalDocs != nil\n}\n\nfunc (x *Operation) HasParameters() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.Parameters != nil\n}\n\nfunc (x *Operation) ClearExternalDocs() {\n\tx.ExternalDocs = nil\n}\n\nfunc (x *Operation) ClearParameters() {\n\tx.Parameters = nil\n}\n\ntype Operation_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A list of tags for API documentation control. Tags can be used for logical\n\t// grouping of operations by resources or any other qualifier.\n\tTags []string\n\t// A short summary of what the operation does. For maximum readability in the\n\t// swagger-ui, this field SHOULD be less than 120 characters.\n\tSummary string\n\t// A verbose explanation of the operation behavior. GFM syntax can be used for\n\t// rich text representation.\n\tDescription string\n\t// Additional external documentation for this operation.\n\tExternalDocs *ExternalDocumentation\n\t// Unique string used to identify the operation. The id MUST be unique among\n\t// all operations described in the API. Tools and libraries MAY use the\n\t// operationId to uniquely identify an operation, therefore, it is recommended\n\t// to follow common programming naming conventions.\n\tOperationId string\n\t// A list of MIME types the operation can consume. This overrides the consumes\n\t// definition at the OpenAPI Object. An empty value MAY be used to clear the\n\t// global definition. Value MUST be as described under Mime Types.\n\tConsumes []string\n\t// A list of MIME types the operation can produce. This overrides the produces\n\t// definition at the OpenAPI Object. An empty value MAY be used to clear the\n\t// global definition. Value MUST be as described under Mime Types.\n\tProduces []string\n\t// The list of possible responses as they are returned from executing this\n\t// operation.\n\tResponses map[string]*Response\n\t// The transfer protocol for the operation. Values MUST be from the list:\n\t// \"http\", \"https\", \"ws\", \"wss\". The value overrides the OpenAPI Object\n\t// schemes definition.\n\tSchemes []Scheme\n\t// Declares this operation to be deprecated. Usage of the declared operation\n\t// should be refrained. Default value is false.\n\tDeprecated bool\n\t// A declaration of which security schemes are applied for this operation. The\n\t// list of values describes alternative security schemes that can be used\n\t// (that is, there is a logical OR between the security requirements). This\n\t// definition overrides any declared top-level security. To remove a top-level\n\t// security declaration, an empty array can be used.\n\tSecurity []*SecurityRequirement\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n\t// Custom parameters such as HTTP request headers.\n\t// See: https://swagger.io/docs/specification/2-0/describing-parameters/\n\t// and https://swagger.io/specification/v2/#parameter-object.\n\tParameters *Parameters\n}\n\nfunc (b0 Operation_builder) Build() *Operation {\n\tm0 := &Operation{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Tags = b.Tags\n\tx.Summary = b.Summary\n\tx.Description = b.Description\n\tx.ExternalDocs = b.ExternalDocs\n\tx.OperationId = b.OperationId\n\tx.Consumes = b.Consumes\n\tx.Produces = b.Produces\n\tx.Responses = b.Responses\n\tx.Schemes = b.Schemes\n\tx.Deprecated = b.Deprecated\n\tx.Security = b.Security\n\tx.Extensions = b.Extensions\n\tx.Parameters = b.Parameters\n\treturn m0\n}\n\n// `Parameters` is a representation of OpenAPI v2 specification's parameters object.\n// Note: This technically breaks compatibility with the OpenAPI 2 definition structure as we only\n// allow header parameters to be set here since we do not want users specifying custom non-header\n// parameters beyond those inferred from the Protobuf schema.\n// See: https://swagger.io/specification/v2/#parameter-object\ntype Parameters struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// `Headers` is one or more HTTP header parameter.\n\t// See: https://swagger.io/docs/specification/2-0/describing-parameters/#header-parameters\n\tHeaders       []*HeaderParameter `protobuf:\"bytes,1,rep,name=headers,proto3\" json:\"headers,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Parameters) Reset() {\n\t*x = Parameters{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Parameters) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Parameters) ProtoMessage() {}\n\nfunc (x *Parameters) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Parameters) GetHeaders() []*HeaderParameter {\n\tif x != nil {\n\t\treturn x.Headers\n\t}\n\treturn nil\n}\n\nfunc (x *Parameters) SetHeaders(v []*HeaderParameter) {\n\tx.Headers = v\n}\n\ntype Parameters_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Headers` is one or more HTTP header parameter.\n\t// See: https://swagger.io/docs/specification/2-0/describing-parameters/#header-parameters\n\tHeaders []*HeaderParameter\n}\n\nfunc (b0 Parameters_builder) Build() *Parameters {\n\tm0 := &Parameters{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Headers = b.Headers\n\treturn m0\n}\n\n// `HeaderParameter` a HTTP header parameter.\n// See: https://swagger.io/specification/v2/#parameter-object\ntype HeaderParameter struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// `Name` is the header name.\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\t// `Description` is a short description of the header.\n\tDescription string `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// `Type` is the type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n\t// See: https://swagger.io/specification/v2/#parameterType.\n\tType HeaderParameter_Type `protobuf:\"varint,3,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter_Type\" json:\"type,omitempty\"`\n\t// `Format` The extending format for the previously mentioned type.\n\tFormat string `protobuf:\"bytes,4,opt,name=format,proto3\" json:\"format,omitempty\"`\n\t// `Required` indicates if the header is optional\n\tRequired      bool `protobuf:\"varint,5,opt,name=required,proto3\" json:\"required,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *HeaderParameter) Reset() {\n\t*x = HeaderParameter{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *HeaderParameter) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*HeaderParameter) ProtoMessage() {}\n\nfunc (x *HeaderParameter) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *HeaderParameter) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *HeaderParameter) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *HeaderParameter) GetType() HeaderParameter_Type {\n\tif x != nil {\n\t\treturn x.Type\n\t}\n\treturn HeaderParameter_UNKNOWN\n}\n\nfunc (x *HeaderParameter) GetFormat() string {\n\tif x != nil {\n\t\treturn x.Format\n\t}\n\treturn \"\"\n}\n\nfunc (x *HeaderParameter) GetRequired() bool {\n\tif x != nil {\n\t\treturn x.Required\n\t}\n\treturn false\n}\n\nfunc (x *HeaderParameter) SetName(v string) {\n\tx.Name = v\n}\n\nfunc (x *HeaderParameter) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *HeaderParameter) SetType(v HeaderParameter_Type) {\n\tx.Type = v\n}\n\nfunc (x *HeaderParameter) SetFormat(v string) {\n\tx.Format = v\n}\n\nfunc (x *HeaderParameter) SetRequired(v bool) {\n\tx.Required = v\n}\n\ntype HeaderParameter_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Name` is the header name.\n\tName string\n\t// `Description` is a short description of the header.\n\tDescription string\n\t// `Type` is the type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n\t// See: https://swagger.io/specification/v2/#parameterType.\n\tType HeaderParameter_Type\n\t// `Format` The extending format for the previously mentioned type.\n\tFormat string\n\t// `Required` indicates if the header is optional\n\tRequired bool\n}\n\nfunc (b0 HeaderParameter_builder) Build() *HeaderParameter {\n\tm0 := &HeaderParameter{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Name = b.Name\n\tx.Description = b.Description\n\tx.Type = b.Type\n\tx.Format = b.Format\n\tx.Required = b.Required\n\treturn m0\n}\n\n// `Header` is a representation of OpenAPI v2 specification's Header object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject\ntype Header struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// `Description` is a short description of the header.\n\tDescription string `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// The type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n\tType string `protobuf:\"bytes,2,opt,name=type,proto3\" json:\"type,omitempty\"`\n\t// `Format` The extending format for the previously mentioned type.\n\tFormat string `protobuf:\"bytes,3,opt,name=format,proto3\" json:\"format,omitempty\"`\n\t// `Default` Declares the value of the header that the server will use if none is provided.\n\t// See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2.\n\t// Unlike JSON Schema this value MUST conform to the defined type for the header.\n\tDefault string `protobuf:\"bytes,6,opt,name=default,proto3\" json:\"default,omitempty\"`\n\t// 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3.\n\tPattern       string `protobuf:\"bytes,13,opt,name=pattern,proto3\" json:\"pattern,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Header) Reset() {\n\t*x = Header{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Header) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Header) ProtoMessage() {}\n\nfunc (x *Header) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Header) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetType() string {\n\tif x != nil {\n\t\treturn x.Type\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetFormat() string {\n\tif x != nil {\n\t\treturn x.Format\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetDefault() string {\n\tif x != nil {\n\t\treturn x.Default\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetPattern() string {\n\tif x != nil {\n\t\treturn x.Pattern\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *Header) SetType(v string) {\n\tx.Type = v\n}\n\nfunc (x *Header) SetFormat(v string) {\n\tx.Format = v\n}\n\nfunc (x *Header) SetDefault(v string) {\n\tx.Default = v\n}\n\nfunc (x *Header) SetPattern(v string) {\n\tx.Pattern = v\n}\n\ntype Header_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Description` is a short description of the header.\n\tDescription string\n\t// The type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n\tType string\n\t// `Format` The extending format for the previously mentioned type.\n\tFormat string\n\t// `Default` Declares the value of the header that the server will use if none is provided.\n\t// See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2.\n\t// Unlike JSON Schema this value MUST conform to the defined type for the header.\n\tDefault string\n\t// 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3.\n\tPattern string\n}\n\nfunc (b0 Header_builder) Build() *Header {\n\tm0 := &Header{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Description = b.Description\n\tx.Type = b.Type\n\tx.Format = b.Format\n\tx.Default = b.Default\n\tx.Pattern = b.Pattern\n\treturn m0\n}\n\n// `Response` is a representation of OpenAPI v2 specification's Response object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject\ntype Response struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// `Description` is a short description of the response.\n\t// GFM syntax can be used for rich text representation.\n\tDescription string `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// `Schema` optionally defines the structure of the response.\n\t// If `Schema` is not provided, it means there is no content to the response.\n\tSchema *Schema `protobuf:\"bytes,2,opt,name=schema,proto3\" json:\"schema,omitempty\"`\n\t// `Headers` A list of headers that are sent with the response.\n\t// `Header` name is expected to be a string in the canonical format of the MIME header key\n\t// See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey\n\tHeaders map[string]*Header `protobuf:\"bytes,3,rep,name=headers,proto3\" json:\"headers,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\t// `Examples` gives per-mimetype response examples.\n\t// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object\n\tExamples map[string]string `protobuf:\"bytes,4,rep,name=examples,proto3\" json:\"examples,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions    map[string]*structpb.Value `protobuf:\"bytes,5,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Response) Reset() {\n\t*x = Response{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Response) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Response) ProtoMessage() {}\n\nfunc (x *Response) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Response) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Response) GetSchema() *Schema {\n\tif x != nil {\n\t\treturn x.Schema\n\t}\n\treturn nil\n}\n\nfunc (x *Response) GetHeaders() map[string]*Header {\n\tif x != nil {\n\t\treturn x.Headers\n\t}\n\treturn nil\n}\n\nfunc (x *Response) GetExamples() map[string]string {\n\tif x != nil {\n\t\treturn x.Examples\n\t}\n\treturn nil\n}\n\nfunc (x *Response) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Response) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *Response) SetSchema(v *Schema) {\n\tx.Schema = v\n}\n\nfunc (x *Response) SetHeaders(v map[string]*Header) {\n\tx.Headers = v\n}\n\nfunc (x *Response) SetExamples(v map[string]string) {\n\tx.Examples = v\n}\n\nfunc (x *Response) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *Response) HasSchema() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.Schema != nil\n}\n\nfunc (x *Response) ClearSchema() {\n\tx.Schema = nil\n}\n\ntype Response_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Description` is a short description of the response.\n\t// GFM syntax can be used for rich text representation.\n\tDescription string\n\t// `Schema` optionally defines the structure of the response.\n\t// If `Schema` is not provided, it means there is no content to the response.\n\tSchema *Schema\n\t// `Headers` A list of headers that are sent with the response.\n\t// `Header` name is expected to be a string in the canonical format of the MIME header key\n\t// See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey\n\tHeaders map[string]*Header\n\t// `Examples` gives per-mimetype response examples.\n\t// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object\n\tExamples map[string]string\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Response_builder) Build() *Response {\n\tm0 := &Response{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Description = b.Description\n\tx.Schema = b.Schema\n\tx.Headers = b.Headers\n\tx.Examples = b.Examples\n\tx.Extensions = b.Extensions\n\treturn m0\n}\n\n// `Info` is a representation of OpenAPI v2 specification's Info object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    title: \"Echo API\";\n//\t    version: \"1.0\";\n//\t    description: \"\";\n//\t    contact: {\n//\t      name: \"gRPC-Gateway project\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t      email: \"none@example.com\";\n//\t    };\n//\t    license: {\n//\t      name: \"BSD 3-Clause License\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//\t    };\n//\t  };\n//\t  ...\n//\t};\ntype Info struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// The title of the application.\n\tTitle string `protobuf:\"bytes,1,opt,name=title,proto3\" json:\"title,omitempty\"`\n\t// A short description of the application. GFM syntax can be used for rich\n\t// text representation.\n\tDescription string `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// The Terms of Service for the API.\n\tTermsOfService string `protobuf:\"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3\" json:\"terms_of_service,omitempty\"`\n\t// The contact information for the exposed API.\n\tContact *Contact `protobuf:\"bytes,4,opt,name=contact,proto3\" json:\"contact,omitempty\"`\n\t// The license information for the exposed API.\n\tLicense *License `protobuf:\"bytes,5,opt,name=license,proto3\" json:\"license,omitempty\"`\n\t// Provides the version of the application API (not to be confused\n\t// with the specification version).\n\tVersion string `protobuf:\"bytes,6,opt,name=version,proto3\" json:\"version,omitempty\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions    map[string]*structpb.Value `protobuf:\"bytes,7,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Info) Reset() {\n\t*x = Info{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Info) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Info) ProtoMessage() {}\n\nfunc (x *Info) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Info) GetTitle() string {\n\tif x != nil {\n\t\treturn x.Title\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetTermsOfService() string {\n\tif x != nil {\n\t\treturn x.TermsOfService\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetContact() *Contact {\n\tif x != nil {\n\t\treturn x.Contact\n\t}\n\treturn nil\n}\n\nfunc (x *Info) GetLicense() *License {\n\tif x != nil {\n\t\treturn x.License\n\t}\n\treturn nil\n}\n\nfunc (x *Info) GetVersion() string {\n\tif x != nil {\n\t\treturn x.Version\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Info) SetTitle(v string) {\n\tx.Title = v\n}\n\nfunc (x *Info) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *Info) SetTermsOfService(v string) {\n\tx.TermsOfService = v\n}\n\nfunc (x *Info) SetContact(v *Contact) {\n\tx.Contact = v\n}\n\nfunc (x *Info) SetLicense(v *License) {\n\tx.License = v\n}\n\nfunc (x *Info) SetVersion(v string) {\n\tx.Version = v\n}\n\nfunc (x *Info) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *Info) HasContact() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.Contact != nil\n}\n\nfunc (x *Info) HasLicense() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.License != nil\n}\n\nfunc (x *Info) ClearContact() {\n\tx.Contact = nil\n}\n\nfunc (x *Info) ClearLicense() {\n\tx.License = nil\n}\n\ntype Info_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The title of the application.\n\tTitle string\n\t// A short description of the application. GFM syntax can be used for rich\n\t// text representation.\n\tDescription string\n\t// The Terms of Service for the API.\n\tTermsOfService string\n\t// The contact information for the exposed API.\n\tContact *Contact\n\t// The license information for the exposed API.\n\tLicense *License\n\t// Provides the version of the application API (not to be confused\n\t// with the specification version).\n\tVersion string\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Info_builder) Build() *Info {\n\tm0 := &Info{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Title = b.Title\n\tx.Description = b.Description\n\tx.TermsOfService = b.TermsOfService\n\tx.Contact = b.Contact\n\tx.License = b.License\n\tx.Version = b.Version\n\tx.Extensions = b.Extensions\n\treturn m0\n}\n\n// `Contact` is a representation of OpenAPI v2 specification's Contact object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    ...\n//\t    contact: {\n//\t      name: \"gRPC-Gateway project\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t      email: \"none@example.com\";\n//\t    };\n//\t    ...\n//\t  };\n//\t  ...\n//\t};\ntype Contact struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// The identifying name of the contact person/organization.\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\t// The URL pointing to the contact information. MUST be in the format of a\n\t// URL.\n\tUrl string `protobuf:\"bytes,2,opt,name=url,proto3\" json:\"url,omitempty\"`\n\t// The email address of the contact person/organization. MUST be in the format\n\t// of an email address.\n\tEmail         string `protobuf:\"bytes,3,opt,name=email,proto3\" json:\"email,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Contact) Reset() {\n\t*x = Contact{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Contact) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Contact) ProtoMessage() {}\n\nfunc (x *Contact) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Contact) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *Contact) GetUrl() string {\n\tif x != nil {\n\t\treturn x.Url\n\t}\n\treturn \"\"\n}\n\nfunc (x *Contact) GetEmail() string {\n\tif x != nil {\n\t\treturn x.Email\n\t}\n\treturn \"\"\n}\n\nfunc (x *Contact) SetName(v string) {\n\tx.Name = v\n}\n\nfunc (x *Contact) SetUrl(v string) {\n\tx.Url = v\n}\n\nfunc (x *Contact) SetEmail(v string) {\n\tx.Email = v\n}\n\ntype Contact_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The identifying name of the contact person/organization.\n\tName string\n\t// The URL pointing to the contact information. MUST be in the format of a\n\t// URL.\n\tUrl string\n\t// The email address of the contact person/organization. MUST be in the format\n\t// of an email address.\n\tEmail string\n}\n\nfunc (b0 Contact_builder) Build() *Contact {\n\tm0 := &Contact{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Name = b.Name\n\tx.Url = b.Url\n\tx.Email = b.Email\n\treturn m0\n}\n\n// `License` is a representation of OpenAPI v2 specification's License object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    ...\n//\t    license: {\n//\t      name: \"BSD 3-Clause License\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//\t    };\n//\t    ...\n//\t  };\n//\t  ...\n//\t};\ntype License struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// The license name used for the API.\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\t// A URL to the license used for the API. MUST be in the format of a URL.\n\tUrl           string `protobuf:\"bytes,2,opt,name=url,proto3\" json:\"url,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *License) Reset() {\n\t*x = License{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *License) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*License) ProtoMessage() {}\n\nfunc (x *License) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *License) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *License) GetUrl() string {\n\tif x != nil {\n\t\treturn x.Url\n\t}\n\treturn \"\"\n}\n\nfunc (x *License) SetName(v string) {\n\tx.Name = v\n}\n\nfunc (x *License) SetUrl(v string) {\n\tx.Url = v\n}\n\ntype License_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The license name used for the API.\n\tName string\n\t// A URL to the license used for the API. MUST be in the format of a URL.\n\tUrl string\n}\n\nfunc (b0 License_builder) Build() *License {\n\tm0 := &License{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Name = b.Name\n\tx.Url = b.Url\n\treturn m0\n}\n\n// `ExternalDocumentation` is a representation of OpenAPI v2 specification's\n// ExternalDocumentation object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  ...\n//\t  external_docs: {\n//\t    description: \"More about gRPC-Gateway\";\n//\t    url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t  }\n//\t  ...\n//\t};\ntype ExternalDocumentation struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// A short description of the target documentation. GFM syntax can be used for\n\t// rich text representation.\n\tDescription string `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// The URL for the target documentation. Value MUST be in the format\n\t// of a URL.\n\tUrl           string `protobuf:\"bytes,2,opt,name=url,proto3\" json:\"url,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *ExternalDocumentation) Reset() {\n\t*x = ExternalDocumentation{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ExternalDocumentation) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ExternalDocumentation) ProtoMessage() {}\n\nfunc (x *ExternalDocumentation) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *ExternalDocumentation) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *ExternalDocumentation) GetUrl() string {\n\tif x != nil {\n\t\treturn x.Url\n\t}\n\treturn \"\"\n}\n\nfunc (x *ExternalDocumentation) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *ExternalDocumentation) SetUrl(v string) {\n\tx.Url = v\n}\n\ntype ExternalDocumentation_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A short description of the target documentation. GFM syntax can be used for\n\t// rich text representation.\n\tDescription string\n\t// The URL for the target documentation. Value MUST be in the format\n\t// of a URL.\n\tUrl string\n}\n\nfunc (b0 ExternalDocumentation_builder) Build() *ExternalDocumentation {\n\tm0 := &ExternalDocumentation{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Description = b.Description\n\tx.Url = b.Url\n\treturn m0\n}\n\n// `Schema` is a representation of OpenAPI v2 specification's Schema object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\ntype Schema struct {\n\tstate      protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\tJsonSchema *JSONSchema            `protobuf:\"bytes,1,opt,name=json_schema,json=jsonSchema,proto3\" json:\"json_schema,omitempty\"`\n\t// Adds support for polymorphism. The discriminator is the schema property\n\t// name that is used to differentiate between other schema that inherit this\n\t// schema. The property name used MUST be defined at this schema and it MUST\n\t// be in the required property list. When used, the value MUST be the name of\n\t// this schema or any schema that inherits it.\n\tDiscriminator string `protobuf:\"bytes,2,opt,name=discriminator,proto3\" json:\"discriminator,omitempty\"`\n\t// Relevant only for Schema \"properties\" definitions. Declares the property as\n\t// \"read only\". This means that it MAY be sent as part of a response but MUST\n\t// NOT be sent as part of the request. Properties marked as readOnly being\n\t// true SHOULD NOT be in the required list of the defined schema. Default\n\t// value is false.\n\tReadOnly bool `protobuf:\"varint,3,opt,name=read_only,json=readOnly,proto3\" json:\"read_only,omitempty\"`\n\t// Additional external documentation for this schema.\n\tExternalDocs *ExternalDocumentation `protobuf:\"bytes,5,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\t// A free-form property to include an example of an instance for this schema in JSON.\n\t// This is copied verbatim to the output.\n\tExample       string `protobuf:\"bytes,6,opt,name=example,proto3\" json:\"example,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Schema) Reset() {\n\t*x = Schema{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Schema) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Schema) ProtoMessage() {}\n\nfunc (x *Schema) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Schema) GetJsonSchema() *JSONSchema {\n\tif x != nil {\n\t\treturn x.JsonSchema\n\t}\n\treturn nil\n}\n\nfunc (x *Schema) GetDiscriminator() string {\n\tif x != nil {\n\t\treturn x.Discriminator\n\t}\n\treturn \"\"\n}\n\nfunc (x *Schema) GetReadOnly() bool {\n\tif x != nil {\n\t\treturn x.ReadOnly\n\t}\n\treturn false\n}\n\nfunc (x *Schema) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Schema) GetExample() string {\n\tif x != nil {\n\t\treturn x.Example\n\t}\n\treturn \"\"\n}\n\nfunc (x *Schema) SetJsonSchema(v *JSONSchema) {\n\tx.JsonSchema = v\n}\n\nfunc (x *Schema) SetDiscriminator(v string) {\n\tx.Discriminator = v\n}\n\nfunc (x *Schema) SetReadOnly(v bool) {\n\tx.ReadOnly = v\n}\n\nfunc (x *Schema) SetExternalDocs(v *ExternalDocumentation) {\n\tx.ExternalDocs = v\n}\n\nfunc (x *Schema) SetExample(v string) {\n\tx.Example = v\n}\n\nfunc (x *Schema) HasJsonSchema() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.JsonSchema != nil\n}\n\nfunc (x *Schema) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.ExternalDocs != nil\n}\n\nfunc (x *Schema) ClearJsonSchema() {\n\tx.JsonSchema = nil\n}\n\nfunc (x *Schema) ClearExternalDocs() {\n\tx.ExternalDocs = nil\n}\n\ntype Schema_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tJsonSchema *JSONSchema\n\t// Adds support for polymorphism. The discriminator is the schema property\n\t// name that is used to differentiate between other schema that inherit this\n\t// schema. The property name used MUST be defined at this schema and it MUST\n\t// be in the required property list. When used, the value MUST be the name of\n\t// this schema or any schema that inherits it.\n\tDiscriminator string\n\t// Relevant only for Schema \"properties\" definitions. Declares the property as\n\t// \"read only\". This means that it MAY be sent as part of a response but MUST\n\t// NOT be sent as part of the request. Properties marked as readOnly being\n\t// true SHOULD NOT be in the required list of the defined schema. Default\n\t// value is false.\n\tReadOnly bool\n\t// Additional external documentation for this schema.\n\tExternalDocs *ExternalDocumentation\n\t// A free-form property to include an example of an instance for this schema in JSON.\n\t// This is copied verbatim to the output.\n\tExample string\n}\n\nfunc (b0 Schema_builder) Build() *Schema {\n\tm0 := &Schema{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.JsonSchema = b.JsonSchema\n\tx.Discriminator = b.Discriminator\n\tx.ReadOnly = b.ReadOnly\n\tx.ExternalDocs = b.ExternalDocs\n\tx.Example = b.Example\n\treturn m0\n}\n\n// `EnumSchema` is subset of fields from the OpenAPI v2 specification's Schema object.\n// Only fields that are applicable to Enums are included\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum) = {\n//\t  ...\n//\t  title: \"MyEnum\";\n//\t  description:\"This is my nice enum\";\n//\t  example: \"ZERO\";\n//\t  required: true;\n//\t  ...\n//\t};\ntype EnumSchema struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// A short description of the schema.\n\tDescription string `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\tDefault     string `protobuf:\"bytes,2,opt,name=default,proto3\" json:\"default,omitempty\"`\n\t// The title of the schema.\n\tTitle    string `protobuf:\"bytes,3,opt,name=title,proto3\" json:\"title,omitempty\"`\n\tRequired bool   `protobuf:\"varint,4,opt,name=required,proto3\" json:\"required,omitempty\"`\n\tReadOnly bool   `protobuf:\"varint,5,opt,name=read_only,json=readOnly,proto3\" json:\"read_only,omitempty\"`\n\t// Additional external documentation for this schema.\n\tExternalDocs *ExternalDocumentation `protobuf:\"bytes,6,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\tExample      string                 `protobuf:\"bytes,7,opt,name=example,proto3\" json:\"example,omitempty\"`\n\t// Ref is used to define an external reference to include in the message.\n\t// This could be a fully qualified proto message reference, and that type must\n\t// be imported into the protofile. If no message is identified, the Ref will\n\t// be used verbatim in the output.\n\t// For example:\n\t//\n\t//\t`ref: \".google.protobuf.Timestamp\"`.\n\tRef string `protobuf:\"bytes,8,opt,name=ref,proto3\" json:\"ref,omitempty\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions    map[string]*structpb.Value `protobuf:\"bytes,9,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *EnumSchema) Reset() {\n\t*x = EnumSchema{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *EnumSchema) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*EnumSchema) ProtoMessage() {}\n\nfunc (x *EnumSchema) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *EnumSchema) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetDefault() string {\n\tif x != nil {\n\t\treturn x.Default\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetTitle() string {\n\tif x != nil {\n\t\treturn x.Title\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetRequired() bool {\n\tif x != nil {\n\t\treturn x.Required\n\t}\n\treturn false\n}\n\nfunc (x *EnumSchema) GetReadOnly() bool {\n\tif x != nil {\n\t\treturn x.ReadOnly\n\t}\n\treturn false\n}\n\nfunc (x *EnumSchema) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *EnumSchema) GetExample() string {\n\tif x != nil {\n\t\treturn x.Example\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetRef() string {\n\tif x != nil {\n\t\treturn x.Ref\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *EnumSchema) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *EnumSchema) SetDefault(v string) {\n\tx.Default = v\n}\n\nfunc (x *EnumSchema) SetTitle(v string) {\n\tx.Title = v\n}\n\nfunc (x *EnumSchema) SetRequired(v bool) {\n\tx.Required = v\n}\n\nfunc (x *EnumSchema) SetReadOnly(v bool) {\n\tx.ReadOnly = v\n}\n\nfunc (x *EnumSchema) SetExternalDocs(v *ExternalDocumentation) {\n\tx.ExternalDocs = v\n}\n\nfunc (x *EnumSchema) SetExample(v string) {\n\tx.Example = v\n}\n\nfunc (x *EnumSchema) SetRef(v string) {\n\tx.Ref = v\n}\n\nfunc (x *EnumSchema) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *EnumSchema) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.ExternalDocs != nil\n}\n\nfunc (x *EnumSchema) ClearExternalDocs() {\n\tx.ExternalDocs = nil\n}\n\ntype EnumSchema_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A short description of the schema.\n\tDescription string\n\tDefault     string\n\t// The title of the schema.\n\tTitle    string\n\tRequired bool\n\tReadOnly bool\n\t// Additional external documentation for this schema.\n\tExternalDocs *ExternalDocumentation\n\tExample      string\n\t// Ref is used to define an external reference to include in the message.\n\t// This could be a fully qualified proto message reference, and that type must\n\t// be imported into the protofile. If no message is identified, the Ref will\n\t// be used verbatim in the output.\n\t// For example:\n\t//\n\t//\t`ref: \".google.protobuf.Timestamp\"`.\n\tRef string\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 EnumSchema_builder) Build() *EnumSchema {\n\tm0 := &EnumSchema{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Description = b.Description\n\tx.Default = b.Default\n\tx.Title = b.Title\n\tx.Required = b.Required\n\tx.ReadOnly = b.ReadOnly\n\tx.ExternalDocs = b.ExternalDocs\n\tx.Example = b.Example\n\tx.Ref = b.Ref\n\tx.Extensions = b.Extensions\n\treturn m0\n}\n\n// `JSONSchema` represents properties from JSON Schema taken, and as used, in\n// the OpenAPI v2 spec.\n//\n// This includes changes made by OpenAPI v2.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n//\n// See also: https://cswr.github.io/JsonSchema/spec/basic_types/,\n// https://github.com/json-schema-org/json-schema-spec/blob/master/schema.json\n//\n// Example:\n//\n//\tmessage SimpleMessage {\n//\t  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n//\t    json_schema: {\n//\t      title: \"SimpleMessage\"\n//\t      description: \"A simple message.\"\n//\t      required: [\"id\"]\n//\t    }\n//\t  };\n//\n//\t  // Id represents the message identifier.\n//\t  string id = 1; [\n//\t      (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n//\t        description: \"The unique identifier of the simple message.\"\n//\t      }];\n//\t}\ntype JSONSchema struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// Ref is used to define an external reference to include in the message.\n\t// This could be a fully qualified proto message reference, and that type must\n\t// be imported into the protofile. If no message is identified, the Ref will\n\t// be used verbatim in the output.\n\t// For example:\n\t//\n\t//\t`ref: \".google.protobuf.Timestamp\"`.\n\tRef string `protobuf:\"bytes,3,opt,name=ref,proto3\" json:\"ref,omitempty\"`\n\t// The title of the schema.\n\tTitle string `protobuf:\"bytes,5,opt,name=title,proto3\" json:\"title,omitempty\"`\n\t// A short description of the schema.\n\tDescription string `protobuf:\"bytes,6,opt,name=description,proto3\" json:\"description,omitempty\"`\n\tDefault     string `protobuf:\"bytes,7,opt,name=default,proto3\" json:\"default,omitempty\"`\n\tReadOnly    bool   `protobuf:\"varint,8,opt,name=read_only,json=readOnly,proto3\" json:\"read_only,omitempty\"`\n\t// A free-form property to include a JSON example of this field. This is copied\n\t// verbatim to the output swagger.json. Quotes must be escaped.\n\t// This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject  https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n\tExample    string  `protobuf:\"bytes,9,opt,name=example,proto3\" json:\"example,omitempty\"`\n\tMultipleOf float64 `protobuf:\"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3\" json:\"multiple_of,omitempty\"`\n\t// Maximum represents an inclusive upper limit for a numeric instance. The\n\t// value of MUST be a number,\n\tMaximum          float64 `protobuf:\"fixed64,11,opt,name=maximum,proto3\" json:\"maximum,omitempty\"`\n\tExclusiveMaximum bool    `protobuf:\"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3\" json:\"exclusive_maximum,omitempty\"`\n\t// minimum represents an inclusive lower limit for a numeric instance. The\n\t// value of MUST be a number,\n\tMinimum          float64  `protobuf:\"fixed64,13,opt,name=minimum,proto3\" json:\"minimum,omitempty\"`\n\tExclusiveMinimum bool     `protobuf:\"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3\" json:\"exclusive_minimum,omitempty\"`\n\tMaxLength        uint64   `protobuf:\"varint,15,opt,name=max_length,json=maxLength,proto3\" json:\"max_length,omitempty\"`\n\tMinLength        uint64   `protobuf:\"varint,16,opt,name=min_length,json=minLength,proto3\" json:\"min_length,omitempty\"`\n\tPattern          string   `protobuf:\"bytes,17,opt,name=pattern,proto3\" json:\"pattern,omitempty\"`\n\tMaxItems         uint64   `protobuf:\"varint,20,opt,name=max_items,json=maxItems,proto3\" json:\"max_items,omitempty\"`\n\tMinItems         uint64   `protobuf:\"varint,21,opt,name=min_items,json=minItems,proto3\" json:\"min_items,omitempty\"`\n\tUniqueItems      bool     `protobuf:\"varint,22,opt,name=unique_items,json=uniqueItems,proto3\" json:\"unique_items,omitempty\"`\n\tMaxProperties    uint64   `protobuf:\"varint,24,opt,name=max_properties,json=maxProperties,proto3\" json:\"max_properties,omitempty\"`\n\tMinProperties    uint64   `protobuf:\"varint,25,opt,name=min_properties,json=minProperties,proto3\" json:\"min_properties,omitempty\"`\n\tRequired         []string `protobuf:\"bytes,26,rep,name=required,proto3\" json:\"required,omitempty\"`\n\t// Items in 'array' must be unique.\n\tArray []string                           `protobuf:\"bytes,34,rep,name=array,proto3\" json:\"array,omitempty\"`\n\tType  []JSONSchema_JSONSchemaSimpleTypes `protobuf:\"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.JSONSchema_JSONSchemaSimpleTypes\" json:\"type,omitempty\"`\n\t// `Format`\n\tFormat string `protobuf:\"bytes,36,opt,name=format,proto3\" json:\"format,omitempty\"`\n\t// Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1\n\tEnum []string `protobuf:\"bytes,46,rep,name=enum,proto3\" json:\"enum,omitempty\"`\n\t// Additional field level properties used when generating the OpenAPI v2 file.\n\tFieldConfiguration *JSONSchema_FieldConfiguration `protobuf:\"bytes,1001,opt,name=field_configuration,json=fieldConfiguration,proto3\" json:\"field_configuration,omitempty\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions    map[string]*structpb.Value `protobuf:\"bytes,48,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *JSONSchema) Reset() {\n\t*x = JSONSchema{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *JSONSchema) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*JSONSchema) ProtoMessage() {}\n\nfunc (x *JSONSchema) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *JSONSchema) GetRef() string {\n\tif x != nil {\n\t\treturn x.Ref\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetTitle() string {\n\tif x != nil {\n\t\treturn x.Title\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetDefault() string {\n\tif x != nil {\n\t\treturn x.Default\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetReadOnly() bool {\n\tif x != nil {\n\t\treturn x.ReadOnly\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetExample() string {\n\tif x != nil {\n\t\treturn x.Example\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetMultipleOf() float64 {\n\tif x != nil {\n\t\treturn x.MultipleOf\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMaximum() float64 {\n\tif x != nil {\n\t\treturn x.Maximum\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetExclusiveMaximum() bool {\n\tif x != nil {\n\t\treturn x.ExclusiveMaximum\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetMinimum() float64 {\n\tif x != nil {\n\t\treturn x.Minimum\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetExclusiveMinimum() bool {\n\tif x != nil {\n\t\treturn x.ExclusiveMinimum\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetMaxLength() uint64 {\n\tif x != nil {\n\t\treturn x.MaxLength\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMinLength() uint64 {\n\tif x != nil {\n\t\treturn x.MinLength\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetPattern() string {\n\tif x != nil {\n\t\treturn x.Pattern\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetMaxItems() uint64 {\n\tif x != nil {\n\t\treturn x.MaxItems\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMinItems() uint64 {\n\tif x != nil {\n\t\treturn x.MinItems\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetUniqueItems() bool {\n\tif x != nil {\n\t\treturn x.UniqueItems\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetMaxProperties() uint64 {\n\tif x != nil {\n\t\treturn x.MaxProperties\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMinProperties() uint64 {\n\tif x != nil {\n\t\treturn x.MinProperties\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetRequired() []string {\n\tif x != nil {\n\t\treturn x.Required\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetArray() []string {\n\tif x != nil {\n\t\treturn x.Array\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes {\n\tif x != nil {\n\t\treturn x.Type\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetFormat() string {\n\tif x != nil {\n\t\treturn x.Format\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetEnum() []string {\n\tif x != nil {\n\t\treturn x.Enum\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetFieldConfiguration() *JSONSchema_FieldConfiguration {\n\tif x != nil {\n\t\treturn x.FieldConfiguration\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) SetRef(v string) {\n\tx.Ref = v\n}\n\nfunc (x *JSONSchema) SetTitle(v string) {\n\tx.Title = v\n}\n\nfunc (x *JSONSchema) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *JSONSchema) SetDefault(v string) {\n\tx.Default = v\n}\n\nfunc (x *JSONSchema) SetReadOnly(v bool) {\n\tx.ReadOnly = v\n}\n\nfunc (x *JSONSchema) SetExample(v string) {\n\tx.Example = v\n}\n\nfunc (x *JSONSchema) SetMultipleOf(v float64) {\n\tx.MultipleOf = v\n}\n\nfunc (x *JSONSchema) SetMaximum(v float64) {\n\tx.Maximum = v\n}\n\nfunc (x *JSONSchema) SetExclusiveMaximum(v bool) {\n\tx.ExclusiveMaximum = v\n}\n\nfunc (x *JSONSchema) SetMinimum(v float64) {\n\tx.Minimum = v\n}\n\nfunc (x *JSONSchema) SetExclusiveMinimum(v bool) {\n\tx.ExclusiveMinimum = v\n}\n\nfunc (x *JSONSchema) SetMaxLength(v uint64) {\n\tx.MaxLength = v\n}\n\nfunc (x *JSONSchema) SetMinLength(v uint64) {\n\tx.MinLength = v\n}\n\nfunc (x *JSONSchema) SetPattern(v string) {\n\tx.Pattern = v\n}\n\nfunc (x *JSONSchema) SetMaxItems(v uint64) {\n\tx.MaxItems = v\n}\n\nfunc (x *JSONSchema) SetMinItems(v uint64) {\n\tx.MinItems = v\n}\n\nfunc (x *JSONSchema) SetUniqueItems(v bool) {\n\tx.UniqueItems = v\n}\n\nfunc (x *JSONSchema) SetMaxProperties(v uint64) {\n\tx.MaxProperties = v\n}\n\nfunc (x *JSONSchema) SetMinProperties(v uint64) {\n\tx.MinProperties = v\n}\n\nfunc (x *JSONSchema) SetRequired(v []string) {\n\tx.Required = v\n}\n\nfunc (x *JSONSchema) SetArray(v []string) {\n\tx.Array = v\n}\n\nfunc (x *JSONSchema) SetType(v []JSONSchema_JSONSchemaSimpleTypes) {\n\tx.Type = v\n}\n\nfunc (x *JSONSchema) SetFormat(v string) {\n\tx.Format = v\n}\n\nfunc (x *JSONSchema) SetEnum(v []string) {\n\tx.Enum = v\n}\n\nfunc (x *JSONSchema) SetFieldConfiguration(v *JSONSchema_FieldConfiguration) {\n\tx.FieldConfiguration = v\n}\n\nfunc (x *JSONSchema) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *JSONSchema) HasFieldConfiguration() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.FieldConfiguration != nil\n}\n\nfunc (x *JSONSchema) ClearFieldConfiguration() {\n\tx.FieldConfiguration = nil\n}\n\ntype JSONSchema_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Ref is used to define an external reference to include in the message.\n\t// This could be a fully qualified proto message reference, and that type must\n\t// be imported into the protofile. If no message is identified, the Ref will\n\t// be used verbatim in the output.\n\t// For example:\n\t//\n\t//\t`ref: \".google.protobuf.Timestamp\"`.\n\tRef string\n\t// The title of the schema.\n\tTitle string\n\t// A short description of the schema.\n\tDescription string\n\tDefault     string\n\tReadOnly    bool\n\t// A free-form property to include a JSON example of this field. This is copied\n\t// verbatim to the output swagger.json. Quotes must be escaped.\n\t// This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject  https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n\tExample    string\n\tMultipleOf float64\n\t// Maximum represents an inclusive upper limit for a numeric instance. The\n\t// value of MUST be a number,\n\tMaximum          float64\n\tExclusiveMaximum bool\n\t// minimum represents an inclusive lower limit for a numeric instance. The\n\t// value of MUST be a number,\n\tMinimum          float64\n\tExclusiveMinimum bool\n\tMaxLength        uint64\n\tMinLength        uint64\n\tPattern          string\n\tMaxItems         uint64\n\tMinItems         uint64\n\tUniqueItems      bool\n\tMaxProperties    uint64\n\tMinProperties    uint64\n\tRequired         []string\n\t// Items in 'array' must be unique.\n\tArray []string\n\tType  []JSONSchema_JSONSchemaSimpleTypes\n\t// `Format`\n\tFormat string\n\t// Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1\n\tEnum []string\n\t// Additional field level properties used when generating the OpenAPI v2 file.\n\tFieldConfiguration *JSONSchema_FieldConfiguration\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 JSONSchema_builder) Build() *JSONSchema {\n\tm0 := &JSONSchema{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Ref = b.Ref\n\tx.Title = b.Title\n\tx.Description = b.Description\n\tx.Default = b.Default\n\tx.ReadOnly = b.ReadOnly\n\tx.Example = b.Example\n\tx.MultipleOf = b.MultipleOf\n\tx.Maximum = b.Maximum\n\tx.ExclusiveMaximum = b.ExclusiveMaximum\n\tx.Minimum = b.Minimum\n\tx.ExclusiveMinimum = b.ExclusiveMinimum\n\tx.MaxLength = b.MaxLength\n\tx.MinLength = b.MinLength\n\tx.Pattern = b.Pattern\n\tx.MaxItems = b.MaxItems\n\tx.MinItems = b.MinItems\n\tx.UniqueItems = b.UniqueItems\n\tx.MaxProperties = b.MaxProperties\n\tx.MinProperties = b.MinProperties\n\tx.Required = b.Required\n\tx.Array = b.Array\n\tx.Type = b.Type\n\tx.Format = b.Format\n\tx.Enum = b.Enum\n\tx.FieldConfiguration = b.FieldConfiguration\n\tx.Extensions = b.Extensions\n\treturn m0\n}\n\n// `Tag` is a representation of OpenAPI v2 specification's Tag object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject\ntype Tag struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// The name of the tag. Use it to allow override of the name of a\n\t// global Tag object, then use that name to reference the tag throughout the\n\t// OpenAPI file.\n\tName string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\t// A short description for the tag. GFM syntax can be used for rich text\n\t// representation.\n\tDescription string `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// Additional external documentation for this tag.\n\tExternalDocs *ExternalDocumentation `protobuf:\"bytes,3,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions    map[string]*structpb.Value `protobuf:\"bytes,4,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Tag) Reset() {\n\t*x = Tag{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Tag) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Tag) ProtoMessage() {}\n\nfunc (x *Tag) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Tag) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *Tag) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Tag) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Tag) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Tag) SetName(v string) {\n\tx.Name = v\n}\n\nfunc (x *Tag) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *Tag) SetExternalDocs(v *ExternalDocumentation) {\n\tx.ExternalDocs = v\n}\n\nfunc (x *Tag) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *Tag) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.ExternalDocs != nil\n}\n\nfunc (x *Tag) ClearExternalDocs() {\n\tx.ExternalDocs = nil\n}\n\ntype Tag_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The name of the tag. Use it to allow override of the name of a\n\t// global Tag object, then use that name to reference the tag throughout the\n\t// OpenAPI file.\n\tName string\n\t// A short description for the tag. GFM syntax can be used for rich text\n\t// representation.\n\tDescription string\n\t// Additional external documentation for this tag.\n\tExternalDocs *ExternalDocumentation\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Tag_builder) Build() *Tag {\n\tm0 := &Tag{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Name = b.Name\n\tx.Description = b.Description\n\tx.ExternalDocs = b.ExternalDocs\n\tx.Extensions = b.Extensions\n\treturn m0\n}\n\n// `SecurityDefinitions` is a representation of OpenAPI v2 specification's\n// Security Definitions object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityDefinitionsObject\n//\n// A declaration of the security schemes available to be used in the\n// specification. This does not enforce the security schemes on the operations\n// and only serves to provide the relevant details for each scheme.\ntype SecurityDefinitions struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// A single security scheme definition, mapping a \"name\" to the scheme it\n\t// defines.\n\tSecurity      map[string]*SecurityScheme `protobuf:\"bytes,1,rep,name=security,proto3\" json:\"security,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *SecurityDefinitions) Reset() {\n\t*x = SecurityDefinitions{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityDefinitions) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityDefinitions) ProtoMessage() {}\n\nfunc (x *SecurityDefinitions) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme {\n\tif x != nil {\n\t\treturn x.Security\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityDefinitions) SetSecurity(v map[string]*SecurityScheme) {\n\tx.Security = v\n}\n\ntype SecurityDefinitions_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A single security scheme definition, mapping a \"name\" to the scheme it\n\t// defines.\n\tSecurity map[string]*SecurityScheme\n}\n\nfunc (b0 SecurityDefinitions_builder) Build() *SecurityDefinitions {\n\tm0 := &SecurityDefinitions{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Security = b.Security\n\treturn m0\n}\n\n// `SecurityScheme` is a representation of OpenAPI v2 specification's\n// Security Scheme object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securitySchemeObject\n//\n// Allows the definition of a security scheme that can be used by the\n// operations. Supported schemes are basic authentication, an API key (either as\n// a header or as a query parameter) and OAuth2's common flows (implicit,\n// password, application and access code).\ntype SecurityScheme struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// The type of the security scheme. Valid values are \"basic\",\n\t// \"apiKey\" or \"oauth2\".\n\tType SecurityScheme_Type `protobuf:\"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_Type\" json:\"type,omitempty\"`\n\t// A short description for security scheme.\n\tDescription string `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// The name of the header or query parameter to be used.\n\t// Valid for apiKey.\n\tName string `protobuf:\"bytes,3,opt,name=name,proto3\" json:\"name,omitempty\"`\n\t// The location of the API key. Valid values are \"query\" or\n\t// \"header\".\n\t// Valid for apiKey.\n\tIn SecurityScheme_In `protobuf:\"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_In\" json:\"in,omitempty\"`\n\t// The flow used by the OAuth2 security scheme. Valid values are\n\t// \"implicit\", \"password\", \"application\" or \"accessCode\".\n\t// Valid for oauth2.\n\tFlow SecurityScheme_Flow `protobuf:\"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_Flow\" json:\"flow,omitempty\"`\n\t// The authorization URL to be used for this flow. This SHOULD be in\n\t// the form of a URL.\n\t// Valid for oauth2/implicit and oauth2/accessCode.\n\tAuthorizationUrl string `protobuf:\"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3\" json:\"authorization_url,omitempty\"`\n\t// The token URL to be used for this flow. This SHOULD be in the\n\t// form of a URL.\n\t// Valid for oauth2/password, oauth2/application and oauth2/accessCode.\n\tTokenUrl string `protobuf:\"bytes,7,opt,name=token_url,json=tokenUrl,proto3\" json:\"token_url,omitempty\"`\n\t// The available scopes for the OAuth2 security scheme.\n\t// Valid for oauth2.\n\tScopes *Scopes `protobuf:\"bytes,8,opt,name=scopes,proto3\" json:\"scopes,omitempty\"`\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions    map[string]*structpb.Value `protobuf:\"bytes,9,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *SecurityScheme) Reset() {\n\t*x = SecurityScheme{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[15]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityScheme) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityScheme) ProtoMessage() {}\n\nfunc (x *SecurityScheme) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[15]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityScheme) GetType() SecurityScheme_Type {\n\tif x != nil {\n\t\treturn x.Type\n\t}\n\treturn SecurityScheme_TYPE_INVALID\n}\n\nfunc (x *SecurityScheme) GetDescription() string {\n\tif x != nil {\n\t\treturn x.Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetIn() SecurityScheme_In {\n\tif x != nil {\n\t\treturn x.In\n\t}\n\treturn SecurityScheme_IN_INVALID\n}\n\nfunc (x *SecurityScheme) GetFlow() SecurityScheme_Flow {\n\tif x != nil {\n\t\treturn x.Flow\n\t}\n\treturn SecurityScheme_FLOW_INVALID\n}\n\nfunc (x *SecurityScheme) GetAuthorizationUrl() string {\n\tif x != nil {\n\t\treturn x.AuthorizationUrl\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetTokenUrl() string {\n\tif x != nil {\n\t\treturn x.TokenUrl\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetScopes() *Scopes {\n\tif x != nil {\n\t\treturn x.Scopes\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityScheme) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityScheme) SetType(v SecurityScheme_Type) {\n\tx.Type = v\n}\n\nfunc (x *SecurityScheme) SetDescription(v string) {\n\tx.Description = v\n}\n\nfunc (x *SecurityScheme) SetName(v string) {\n\tx.Name = v\n}\n\nfunc (x *SecurityScheme) SetIn(v SecurityScheme_In) {\n\tx.In = v\n}\n\nfunc (x *SecurityScheme) SetFlow(v SecurityScheme_Flow) {\n\tx.Flow = v\n}\n\nfunc (x *SecurityScheme) SetAuthorizationUrl(v string) {\n\tx.AuthorizationUrl = v\n}\n\nfunc (x *SecurityScheme) SetTokenUrl(v string) {\n\tx.TokenUrl = v\n}\n\nfunc (x *SecurityScheme) SetScopes(v *Scopes) {\n\tx.Scopes = v\n}\n\nfunc (x *SecurityScheme) SetExtensions(v map[string]*structpb.Value) {\n\tx.Extensions = v\n}\n\nfunc (x *SecurityScheme) HasScopes() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.Scopes != nil\n}\n\nfunc (x *SecurityScheme) ClearScopes() {\n\tx.Scopes = nil\n}\n\ntype SecurityScheme_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The type of the security scheme. Valid values are \"basic\",\n\t// \"apiKey\" or \"oauth2\".\n\tType SecurityScheme_Type\n\t// A short description for security scheme.\n\tDescription string\n\t// The name of the header or query parameter to be used.\n\t// Valid for apiKey.\n\tName string\n\t// The location of the API key. Valid values are \"query\" or\n\t// \"header\".\n\t// Valid for apiKey.\n\tIn SecurityScheme_In\n\t// The flow used by the OAuth2 security scheme. Valid values are\n\t// \"implicit\", \"password\", \"application\" or \"accessCode\".\n\t// Valid for oauth2.\n\tFlow SecurityScheme_Flow\n\t// The authorization URL to be used for this flow. This SHOULD be in\n\t// the form of a URL.\n\t// Valid for oauth2/implicit and oauth2/accessCode.\n\tAuthorizationUrl string\n\t// The token URL to be used for this flow. This SHOULD be in the\n\t// form of a URL.\n\t// Valid for oauth2/password, oauth2/application and oauth2/accessCode.\n\tTokenUrl string\n\t// The available scopes for the OAuth2 security scheme.\n\t// Valid for oauth2.\n\tScopes *Scopes\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 SecurityScheme_builder) Build() *SecurityScheme {\n\tm0 := &SecurityScheme{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Type = b.Type\n\tx.Description = b.Description\n\tx.Name = b.Name\n\tx.In = b.In\n\tx.Flow = b.Flow\n\tx.AuthorizationUrl = b.AuthorizationUrl\n\tx.TokenUrl = b.TokenUrl\n\tx.Scopes = b.Scopes\n\tx.Extensions = b.Extensions\n\treturn m0\n}\n\n// `SecurityRequirement` is a representation of OpenAPI v2 specification's\n// Security Requirement object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityRequirementObject\n//\n// Lists the required security schemes to execute this operation. The object can\n// have multiple security schemes declared in it which are all required (that\n// is, there is a logical AND between the schemes).\n//\n// The name used for each property MUST correspond to a security scheme\n// declared in the Security Definitions.\ntype SecurityRequirement struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// Each name must correspond to a security scheme which is declared in\n\t// the Security Definitions. If the security scheme is of type \"oauth2\",\n\t// then the value is a list of scope names required for the execution.\n\t// For other security scheme types, the array MUST be empty.\n\tSecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:\"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3\" json:\"security_requirement,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields       protoimpl.UnknownFields\n\tsizeCache           protoimpl.SizeCache\n}\n\nfunc (x *SecurityRequirement) Reset() {\n\t*x = SecurityRequirement{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[16]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityRequirement) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityRequirement) ProtoMessage() {}\n\nfunc (x *SecurityRequirement) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[16]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequirement_SecurityRequirementValue {\n\tif x != nil {\n\t\treturn x.SecurityRequirement\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityRequirement) SetSecurityRequirement(v map[string]*SecurityRequirement_SecurityRequirementValue) {\n\tx.SecurityRequirement = v\n}\n\ntype SecurityRequirement_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Each name must correspond to a security scheme which is declared in\n\t// the Security Definitions. If the security scheme is of type \"oauth2\",\n\t// then the value is a list of scope names required for the execution.\n\t// For other security scheme types, the array MUST be empty.\n\tSecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue\n}\n\nfunc (b0 SecurityRequirement_builder) Build() *SecurityRequirement {\n\tm0 := &SecurityRequirement{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.SecurityRequirement = b.SecurityRequirement\n\treturn m0\n}\n\n// `Scopes` is a representation of OpenAPI v2 specification's Scopes object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#scopesObject\n//\n// Lists the available scopes for an OAuth2 security scheme.\ntype Scopes struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// Maps between a name of a scope to a short description of it (as the value\n\t// of the property).\n\tScope         map[string]string `protobuf:\"bytes,1,rep,name=scope,proto3\" json:\"scope,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *Scopes) Reset() {\n\t*x = Scopes{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[17]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Scopes) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Scopes) ProtoMessage() {}\n\nfunc (x *Scopes) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[17]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Scopes) GetScope() map[string]string {\n\tif x != nil {\n\t\treturn x.Scope\n\t}\n\treturn nil\n}\n\nfunc (x *Scopes) SetScope(v map[string]string) {\n\tx.Scope = v\n}\n\ntype Scopes_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Maps between a name of a scope to a short description of it (as the value\n\t// of the property).\n\tScope map[string]string\n}\n\nfunc (b0 Scopes_builder) Build() *Scopes {\n\tm0 := &Scopes{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Scope = b.Scope\n\treturn m0\n}\n\n// 'FieldConfiguration' provides additional field level properties used when generating the OpenAPI v2 file.\n// These properties are not defined by OpenAPIv2, but they are used to control the generation.\ntype JSONSchema_FieldConfiguration struct {\n\tstate protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\t// Alternative parameter name when used as path parameter. If set, this will\n\t// be used as the complete parameter name when this field is used as a path\n\t// parameter. Use this to avoid having auto generated path parameter names\n\t// for overlapping paths.\n\tPathParamName string `protobuf:\"bytes,47,opt,name=path_param_name,json=pathParamName,proto3\" json:\"path_param_name,omitempty\"`\n\t// Declares this field to be deprecated. Allows for the generated OpenAPI\n\t// parameter to be marked as deprecated without affecting the proto field.\n\tDeprecated    bool `protobuf:\"varint,49,opt,name=deprecated,proto3\" json:\"deprecated,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *JSONSchema_FieldConfiguration) Reset() {\n\t*x = JSONSchema_FieldConfiguration{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *JSONSchema_FieldConfiguration) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*JSONSchema_FieldConfiguration) ProtoMessage() {}\n\nfunc (x *JSONSchema_FieldConfiguration) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *JSONSchema_FieldConfiguration) GetPathParamName() string {\n\tif x != nil {\n\t\treturn x.PathParamName\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema_FieldConfiguration) GetDeprecated() bool {\n\tif x != nil {\n\t\treturn x.Deprecated\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema_FieldConfiguration) SetPathParamName(v string) {\n\tx.PathParamName = v\n}\n\nfunc (x *JSONSchema_FieldConfiguration) SetDeprecated(v bool) {\n\tx.Deprecated = v\n}\n\ntype JSONSchema_FieldConfiguration_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Alternative parameter name when used as path parameter. If set, this will\n\t// be used as the complete parameter name when this field is used as a path\n\t// parameter. Use this to avoid having auto generated path parameter names\n\t// for overlapping paths.\n\tPathParamName string\n\t// Declares this field to be deprecated. Allows for the generated OpenAPI\n\t// parameter to be marked as deprecated without affecting the proto field.\n\tDeprecated bool\n}\n\nfunc (b0 JSONSchema_FieldConfiguration_builder) Build() *JSONSchema_FieldConfiguration {\n\tm0 := &JSONSchema_FieldConfiguration{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.PathParamName = b.PathParamName\n\tx.Deprecated = b.Deprecated\n\treturn m0\n}\n\n// If the security scheme is of type \"oauth2\", then the value is a list of\n// scope names required for the execution. For other security scheme types,\n// the array MUST be empty.\ntype SecurityRequirement_SecurityRequirementValue struct {\n\tstate         protoimpl.MessageState `protogen:\"hybrid.v1\"`\n\tScope         []string               `protobuf:\"bytes,1,rep,name=scope,proto3\" json:\"scope,omitempty\"`\n\tunknownFields protoimpl.UnknownFields\n\tsizeCache     protoimpl.SizeCache\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) Reset() {\n\t*x = SecurityRequirement_SecurityRequirementValue{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[32]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[32]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) GetScope() []string {\n\tif x != nil {\n\t\treturn x.Scope\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) SetScope(v []string) {\n\tx.Scope = v\n}\n\ntype SecurityRequirement_SecurityRequirementValue_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tScope []string\n}\n\nfunc (b0 SecurityRequirement_SecurityRequirementValue_builder) Build() *SecurityRequirement_SecurityRequirementValue {\n\tm0 := &SecurityRequirement_SecurityRequirementValue{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.Scope = b.Scope\n\treturn m0\n}\n\nvar File_protoc_gen_openapiv2_options_openapiv2_proto protoreflect.FileDescriptor\n\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{\n\t0x0a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63,\n\t0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb3, 0x08, 0x0a, 0x07, 0x53, 0x77, 0x61, 0x67,\n\t0x67, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x12, 0x43, 0x0a,\n\t0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e,\n\t0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70,\n\t0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x73, 0x65, 0x50,\n\t0x61, 0x74, 0x68, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x05,\n\t0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73,\n\t0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03,\n\t0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08,\n\t0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,\n\t0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09,\n\t0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x14, 0x73, 0x65, 0x63,\n\t0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69,\n\t0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,\n\t0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x08,\n\t0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69,\n\t0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72,\n\t0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08,\n\t0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73,\n\t0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x65, 0x0a, 0x0d,\n\t0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x0e, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44,\n\t0x6f, 0x63, 0x73, 0x12, 0x62, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,\n\t0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65,\n\t0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f,\n\t0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52,\n\t0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78,\n\t0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xd6, 0x07,\n\t0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74,\n\t0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,\n\t0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73,\n\t0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,\n\t0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65,\n\t0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45,\n\t0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f,\n\t0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,\n\t0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65,\n\t0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65,\n\t0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20,\n\t0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x61, 0x0a,\n\t0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b,\n\t0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61,\n\t0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65,\n\t0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73,\n\t0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28,\n\t0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63,\n\t0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a,\n\t0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28,\n\t0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x5a, 0x0a,\n\t0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75,\n\t0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52,\n\t0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e,\n\t0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12,\n\t0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61,\n\t0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,\n\t0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,\n\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f,\n\t0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,\n\t0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c,\n\t0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,\n\t0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0x62, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,\n\t0x74, 0x65, 0x72, 0x73, 0x12, 0x54, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18,\n\t0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,\n\t0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0xa3, 0x02, 0x0a, 0x0f, 0x48,\n\t0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x12,\n\t0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,\n\t0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01,\n\t0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x48,\n\t0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x54,\n\t0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72,\n\t0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61,\n\t0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20,\n\t0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0x45, 0x0a,\n\t0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,\n\t0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a,\n\t0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e,\n\t0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45,\n\t0x41, 0x4e, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08,\n\t0x22, 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64,\n\t0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a,\n\t0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70,\n\t0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66,\n\t0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61,\n\t0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0d,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, 0x08,\n\t0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a,\n\t0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10,\n\t0x0b, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08,\n\t0x0e, 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a,\n\t0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, 0x08,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,\n\t0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,\n\t0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63,\n\t0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73,\n\t0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,\n\t0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64,\n\t0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,\n\t0x73, 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x12, 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05,\n\t0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,\n\t0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e,\n\t0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45,\n\t0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, 0x66,\n\t0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,\n\t0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,\n\t0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x72,\n\t0x6d, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76,\n\t0x69, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63,\n\t0x74, 0x12, 0x4c, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c,\n\t0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12,\n\t0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45,\n\t0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a,\n\t0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78,\n\t0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04,\n\t0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,\n\t0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,\n\t0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65,\n\t0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, 0x78, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x61, 0x12, 0x56, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x6a,\n\t0x73, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73,\n\t0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12,\n\t0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01,\n\t0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a, 0x0d,\n\t0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44,\n\t0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, 0x08,\n\t0x04, 0x10, 0x05, 0x22, 0xe8, 0x03, 0x0a, 0x0a, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x14,\n\t0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,\n\t0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,\n\t0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,\n\t0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20,\n\t0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a,\n\t0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x06,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,\n\t0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18,\n\t0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x10,\n\t0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66,\n\t0x12, 0x65, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09,\n\t0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65,\n\t0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e,\n\t0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,\n\t0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7,\n\t0x0a, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a,\n\t0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12,\n\t0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,\n\t0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63,\n\t0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75,\n\t0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,\n\t0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08,\n\t0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18,\n\t0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74,\n\t0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d,\n\t0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78,\n\t0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69,\n\t0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65,\n\t0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,\n\t0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d,\n\t0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28,\n\t0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78,\n\t0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18,\n\t0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65,\n\t0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c,\n\t0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78,\n\t0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65,\n\t0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c,\n\t0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,\n\t0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12,\n\t0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01,\n\t0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09,\n\t0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52,\n\t0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69,\n\t0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52,\n\t0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e,\n\t0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x18,\n\t0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,\n\t0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65,\n\t0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x69, 0x6e,\n\t0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,\n\t0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65,\n\t0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18,\n\t0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x5f, 0x0a, 0x04,\n\t0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x4b, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70,\n\t0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,\n\t0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66,\n\t0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x2e, 0x20,\n\t0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x7a, 0x0a, 0x13, 0x66, 0x69, 0x65,\n\t0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46,\n\t0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,\n\t0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f,\n\t0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,\n\t0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5c, 0x0a, 0x12,\n\t0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d,\n\t0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x74,\n\t0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65,\n\t0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,\n\t0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78,\n\t0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53,\n\t0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,\n\t0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59,\n\t0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12,\n\t0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04,\n\t0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52,\n\t0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a,\n\t0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02,\n\t0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12,\n\t0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04,\n\t0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e,\n\t0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a,\n\t0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0xd9, 0x02, 0x0a, 0x03, 0x54, 0x61, 0x67,\n\t0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,\n\t0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,\n\t0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,\n\t0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x5e, 0x0a,\n\t0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61,\n\t0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a,\n\t0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,\n\t0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,\n\t0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x08,\n\t0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69,\n\t0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72,\n\t0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53,\n\t0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65,\n\t0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69,\n\t0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67,\n\t0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68,\n\t0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff,\n\t0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,\n\t0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75,\n\t0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52,\n\t0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63,\n\t0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,\n\t0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, 0x69,\n\t0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, 0x6f,\n\t0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, 0x0a,\n\t0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75,\n\t0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,\n\t0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f,\n\t0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74,\n\t0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65,\n\t0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70,\n\t0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,\n\t0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a,\n\t0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,\n\t0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c,\n\t0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e,\n\t0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x10,\n\t0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02,\n\t0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10,\n\t0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, 0x4e,\n\t0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, 0x55,\n\t0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x44,\n\t0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x0c,\n\t0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11,\n\t0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10,\n\t0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f,\n\t0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, 0x50,\n\t0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c,\n\t0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04,\n\t0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71,\n\t0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, 0x63,\n\t0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e,\n\t0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75,\n\t0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79,\n\t0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72,\n\t0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,\n\t0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,\n\t0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75,\n\t0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45,\n\t0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72,\n\t0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65,\n\t0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, 0x63,\n\t0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, 0x70,\n\t0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,\n\t0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07,\n\t0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54,\n\t0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, 0x06,\n\t0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, 0x42,\n\t0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72,\n\t0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70,\n\t0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x33,\n}\n\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 6)\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 35)\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []any{\n\t(Scheme)(0),                           // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme\n\t(HeaderParameter_Type)(0),             // 1: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.Type\n\t(JSONSchema_JSONSchemaSimpleTypes)(0), // 2: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes\n\t(SecurityScheme_Type)(0),              // 3: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type\n\t(SecurityScheme_In)(0),                // 4: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In\n\t(SecurityScheme_Flow)(0),              // 5: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow\n\t(*Swagger)(nil),                       // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t(*Operation)(nil),                     // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t(*Parameters)(nil),                    // 8: grpc.gateway.protoc_gen_openapiv2.options.Parameters\n\t(*HeaderParameter)(nil),               // 9: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter\n\t(*Header)(nil),                        // 10: grpc.gateway.protoc_gen_openapiv2.options.Header\n\t(*Response)(nil),                      // 11: grpc.gateway.protoc_gen_openapiv2.options.Response\n\t(*Info)(nil),                          // 12: grpc.gateway.protoc_gen_openapiv2.options.Info\n\t(*Contact)(nil),                       // 13: grpc.gateway.protoc_gen_openapiv2.options.Contact\n\t(*License)(nil),                       // 14: grpc.gateway.protoc_gen_openapiv2.options.License\n\t(*ExternalDocumentation)(nil),         // 15: grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t(*Schema)(nil),                        // 16: grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t(*EnumSchema)(nil),                    // 17: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema\n\t(*JSONSchema)(nil),                    // 18: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n\t(*Tag)(nil),                           // 19: grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t(*SecurityDefinitions)(nil),           // 20: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions\n\t(*SecurityScheme)(nil),                // 21: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme\n\t(*SecurityRequirement)(nil),           // 22: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement\n\t(*Scopes)(nil),                        // 23: grpc.gateway.protoc_gen_openapiv2.options.Scopes\n\tnil,                                   // 24: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry\n\tnil,                                   // 25: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry\n\tnil,                                   // 26: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry\n\tnil,                                   // 27: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry\n\tnil,                                   // 28: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry\n\tnil,                                   // 29: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry\n\tnil,                                   // 30: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry\n\tnil,                                   // 31: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry\n\tnil,                                   // 32: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.ExtensionsEntry\n\t(*JSONSchema_FieldConfiguration)(nil), // 33: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration\n\tnil,                                   // 34: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry\n\tnil,                                   // 35: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry\n\tnil,                                   // 36: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry\n\tnil,                                   // 37: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry\n\t(*SecurityRequirement_SecurityRequirementValue)(nil), // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue\n\tnil,                    // 39: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry\n\tnil,                    // 40: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry\n\t(*structpb.Value)(nil), // 41: google.protobuf.Value\n}\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{\n\t12, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info\n\t0,  // 1: grpc.gateway.protoc_gen_openapiv2.options.Swagger.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme\n\t24, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry\n\t20, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions\n\t22, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement\n\t19, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.tags:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t15, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t25, // 7: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry\n\t15, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t26, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry\n\t0,  // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme\n\t22, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement\n\t27, // 12: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry\n\t8,  // 13: grpc.gateway.protoc_gen_openapiv2.options.Operation.parameters:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Parameters\n\t9,  // 14: grpc.gateway.protoc_gen_openapiv2.options.Parameters.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter\n\t1,  // 15: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.Type\n\t16, // 16: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t28, // 17: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry\n\t29, // 18: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry\n\t30, // 19: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry\n\t13, // 20: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact\n\t14, // 21: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License\n\t31, // 22: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry\n\t18, // 23: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n\t15, // 24: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t15, // 25: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t32, // 26: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.ExtensionsEntry\n\t2,  // 27: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes\n\t33, // 28: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration\n\t34, // 29: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry\n\t15, // 30: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t35, // 31: grpc.gateway.protoc_gen_openapiv2.options.Tag.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry\n\t36, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry\n\t3,  // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type\n\t4,  // 34: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In\n\t5,  // 35: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow\n\t23, // 36: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes\n\t37, // 37: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry\n\t39, // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry\n\t40, // 39: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry\n\t11, // 40: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response\n\t41, // 41: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t11, // 42: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response\n\t41, // 43: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t10, // 44: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header\n\t41, // 45: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 46: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 47: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 48: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 49: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t21, // 50: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme\n\t41, // 51: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t38, // 52: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue\n\t53, // [53:53] is the sub-list for method output_type\n\t53, // [53:53] is the sub-list for method input_type\n\t53, // [53:53] is the sub-list for extension type_name\n\t53, // [53:53] is the sub-list for extension extendee\n\t0,  // [0:53] is the sub-list for field type_name\n}\n\nfunc init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() }\nfunc file_protoc_gen_openapiv2_options_openapiv2_proto_init() {\n\tif File_protoc_gen_openapiv2_options_openapiv2_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc,\n\t\t\tNumEnums:      6,\n\t\t\tNumMessages:   35,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes,\n\t\tDependencyIndexes: file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs,\n\t\tEnumInfos:         file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes,\n\t\tMessageInfos:      file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes,\n\t}.Build()\n\tFile_protoc_gen_openapiv2_options_openapiv2_proto = out.File\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = nil\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = nil\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/openapiv2.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.protoc_gen_openapiv2.options;\n\nimport \"google/protobuf/struct.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\";\n\n// Scheme describes the schemes supported by the OpenAPI Swagger\n// and Operation objects.\nenum Scheme {\n  UNKNOWN = 0;\n  HTTP = 1;\n  HTTPS = 2;\n  WS = 3;\n  WSS = 4;\n}\n\n// `Swagger` is a representation of OpenAPI v2 specification's Swagger object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject\n//\n// Example:\n//\n//  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//    info: {\n//      title: \"Echo API\";\n//      version: \"1.0\";\n//      description: \"\";\n//      contact: {\n//        name: \"gRPC-Gateway project\";\n//        url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//        email: \"none@example.com\";\n//      };\n//      license: {\n//        name: \"BSD 3-Clause License\";\n//        url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//      };\n//    };\n//    schemes: HTTPS;\n//    consumes: \"application/json\";\n//    produces: \"application/json\";\n//  };\n//\nmessage Swagger {\n  // Specifies the OpenAPI Specification version being used. It can be\n  // used by the OpenAPI UI and other clients to interpret the API listing. The\n  // value MUST be \"2.0\".\n  string swagger = 1;\n  // Provides metadata about the API. The metadata can be used by the\n  // clients if needed.\n  Info info = 2;\n  // The host (name or ip) serving the API. This MUST be the host only and does\n  // not include the scheme nor sub-paths. It MAY include a port. If the host is\n  // not included, the host serving the documentation is to be used (including\n  // the port). The host does not support path templating.\n  string host = 3;\n  // The base path on which the API is served, which is relative to the host. If\n  // it is not included, the API is served directly under the host. The value\n  // MUST start with a leading slash (/). The basePath does not support path\n  // templating.\n  // Note that using `base_path` does not change the endpoint paths that are\n  // generated in the resulting OpenAPI file. If you wish to use `base_path`\n  // with relatively generated OpenAPI paths, the `base_path` prefix must be\n  // manually removed from your `google.api.http` paths and your code changed to\n  // serve the API from the `base_path`.\n  string base_path = 4;\n  // The transfer protocol of the API. Values MUST be from the list: \"http\",\n  // \"https\", \"ws\", \"wss\". If the schemes is not included, the default scheme to\n  // be used is the one used to access the OpenAPI definition itself.\n  repeated Scheme schemes = 5;\n  // A list of MIME types the APIs can consume. This is global to all APIs but\n  // can be overridden on specific API calls. Value MUST be as described under\n  // Mime Types.\n  repeated string consumes = 6;\n  // A list of MIME types the APIs can produce. This is global to all APIs but\n  // can be overridden on specific API calls. Value MUST be as described under\n  // Mime Types.\n  repeated string produces = 7;\n  // field 8 is reserved for 'paths'.\n  reserved 8;\n  // field 9 is reserved for 'definitions', which at this time are already\n  // exposed as and customizable as proto messages.\n  reserved 9;\n  // An object to hold responses that can be used across operations. This\n  // property does not define global responses for all operations.\n  map<string, Response> responses = 10;\n  // Security scheme definitions that can be used across the specification.\n  SecurityDefinitions security_definitions = 11;\n  // A declaration of which security schemes are applied for the API as a whole.\n  // The list of values describes alternative security schemes that can be used\n  // (that is, there is a logical OR between the security requirements).\n  // Individual operations can override this definition.\n  repeated SecurityRequirement security = 12;\n  // A list of tags for API documentation control. Tags can be used for logical\n  // grouping of operations by resources or any other qualifier.\n  repeated Tag tags = 13;\n  // Additional external documentation.\n  ExternalDocumentation external_docs = 14;\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 15;\n}\n\n// `Operation` is a representation of OpenAPI v2 specification's Operation object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject\n//\n// Example:\n//\n//  service EchoService {\n//    rpc Echo(SimpleMessage) returns (SimpleMessage) {\n//      option (google.api.http) = {\n//        get: \"/v1/example/echo/{id}\"\n//      };\n//\n//      option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n//        summary: \"Get a message.\";\n//        operation_id: \"getMessage\";\n//        tags: \"echo\";\n//        responses: {\n//          key: \"200\"\n//            value: {\n//            description: \"OK\";\n//          }\n//        }\n//      };\n//    }\n//  }\nmessage Operation {\n  // A list of tags for API documentation control. Tags can be used for logical\n  // grouping of operations by resources or any other qualifier.\n  repeated string tags = 1;\n  // A short summary of what the operation does. For maximum readability in the\n  // swagger-ui, this field SHOULD be less than 120 characters.\n  string summary = 2;\n  // A verbose explanation of the operation behavior. GFM syntax can be used for\n  // rich text representation.\n  string description = 3;\n  // Additional external documentation for this operation.\n  ExternalDocumentation external_docs = 4;\n  // Unique string used to identify the operation. The id MUST be unique among\n  // all operations described in the API. Tools and libraries MAY use the\n  // operationId to uniquely identify an operation, therefore, it is recommended\n  // to follow common programming naming conventions.\n  string operation_id = 5;\n  // A list of MIME types the operation can consume. This overrides the consumes\n  // definition at the OpenAPI Object. An empty value MAY be used to clear the\n  // global definition. Value MUST be as described under Mime Types.\n  repeated string consumes = 6;\n  // A list of MIME types the operation can produce. This overrides the produces\n  // definition at the OpenAPI Object. An empty value MAY be used to clear the\n  // global definition. Value MUST be as described under Mime Types.\n  repeated string produces = 7;\n  // field 8 is reserved for 'parameters'.\n  reserved 8;\n  // The list of possible responses as they are returned from executing this\n  // operation.\n  map<string, Response> responses = 9;\n  // The transfer protocol for the operation. Values MUST be from the list:\n  // \"http\", \"https\", \"ws\", \"wss\". The value overrides the OpenAPI Object\n  // schemes definition.\n  repeated Scheme schemes = 10;\n  // Declares this operation to be deprecated. Usage of the declared operation\n  // should be refrained. Default value is false.\n  bool deprecated = 11;\n  // A declaration of which security schemes are applied for this operation. The\n  // list of values describes alternative security schemes that can be used\n  // (that is, there is a logical OR between the security requirements). This\n  // definition overrides any declared top-level security. To remove a top-level\n  // security declaration, an empty array can be used.\n  repeated SecurityRequirement security = 12;\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 13;\n  // Custom parameters such as HTTP request headers.\n  // See: https://swagger.io/docs/specification/2-0/describing-parameters/\n  // and https://swagger.io/specification/v2/#parameter-object.\n  Parameters parameters = 14;\n}\n\n// `Parameters` is a representation of OpenAPI v2 specification's parameters object.\n// Note: This technically breaks compatibility with the OpenAPI 2 definition structure as we only\n// allow header parameters to be set here since we do not want users specifying custom non-header\n// parameters beyond those inferred from the Protobuf schema.\n// See: https://swagger.io/specification/v2/#parameter-object\nmessage Parameters {\n  // `Headers` is one or more HTTP header parameter.\n  // See: https://swagger.io/docs/specification/2-0/describing-parameters/#header-parameters\n  repeated HeaderParameter headers = 1;\n}\n\n// `HeaderParameter` a HTTP header parameter.\n// See: https://swagger.io/specification/v2/#parameter-object\nmessage HeaderParameter {\n  // `Type` is a supported HTTP header type.\n  // See https://swagger.io/specification/v2/#parameterType.\n  enum Type {\n    UNKNOWN = 0;\n    STRING = 1;\n    NUMBER = 2;\n    INTEGER = 3;\n    BOOLEAN = 4;\n  }\n\n  // `Name` is the header name.\n  string name = 1;\n  // `Description` is a short description of the header.\n  string description = 2;\n  // `Type` is the type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n  // See: https://swagger.io/specification/v2/#parameterType.\n  Type type = 3;\n  // `Format` The extending format for the previously mentioned type.\n  string format = 4;\n  // `Required` indicates if the header is optional\n  bool required = 5;\n  // field 6 is reserved for 'items', but in OpenAPI-specific way.\n  reserved 6;\n  // field 7 is reserved `Collection Format`. Determines the format of the array if type array is used.\n  reserved 7;\n}\n\n// `Header` is a representation of OpenAPI v2 specification's Header object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject\n//\nmessage Header {\n  // `Description` is a short description of the header.\n  string description = 1;\n  // The type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n  string type = 2;\n  // `Format` The extending format for the previously mentioned type.\n  string format = 3;\n  // field 4 is reserved for 'items', but in OpenAPI-specific way.\n  reserved 4;\n  // field 5 is reserved `Collection Format` Determines the format of the array if type array is used.\n  reserved 5;\n  // `Default` Declares the value of the header that the server will use if none is provided.\n  // See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2.\n  // Unlike JSON Schema this value MUST conform to the defined type for the header.\n  string default = 6;\n  // field 7 is reserved for 'maximum'.\n  reserved 7;\n  // field 8 is reserved for 'exclusiveMaximum'.\n  reserved 8;\n  // field 9 is reserved for 'minimum'.\n  reserved 9;\n  // field 10 is reserved for 'exclusiveMinimum'.\n  reserved 10;\n  // field 11 is reserved for 'maxLength'.\n  reserved 11;\n  // field 12 is reserved for 'minLength'.\n  reserved 12;\n  // 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3.\n  string pattern = 13;\n  // field 14 is reserved for 'maxItems'.\n  reserved 14;\n  // field 15 is reserved for 'minItems'.\n  reserved 15;\n  // field 16 is reserved for 'uniqueItems'.\n  reserved 16;\n  // field 17 is reserved for 'enum'.\n  reserved 17;\n  // field 18 is reserved for 'multipleOf'.\n  reserved 18;\n}\n\n// `Response` is a representation of OpenAPI v2 specification's Response object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject\n//\nmessage Response {\n  // `Description` is a short description of the response.\n  // GFM syntax can be used for rich text representation.\n  string description = 1;\n  // `Schema` optionally defines the structure of the response.\n  // If `Schema` is not provided, it means there is no content to the response.\n  Schema schema = 2;\n  // `Headers` A list of headers that are sent with the response.\n  // `Header` name is expected to be a string in the canonical format of the MIME header key\n  // See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey\n  map<string, Header> headers = 3;\n  // `Examples` gives per-mimetype response examples.\n  // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object\n  map<string, string> examples = 4;\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 5;\n}\n\n// `Info` is a representation of OpenAPI v2 specification's Info object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject\n//\n// Example:\n//\n//  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//    info: {\n//      title: \"Echo API\";\n//      version: \"1.0\";\n//      description: \"\";\n//      contact: {\n//        name: \"gRPC-Gateway project\";\n//        url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//        email: \"none@example.com\";\n//      };\n//      license: {\n//        name: \"BSD 3-Clause License\";\n//        url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//      };\n//    };\n//    ...\n//  };\n//\nmessage Info {\n  // The title of the application.\n  string title = 1;\n  // A short description of the application. GFM syntax can be used for rich\n  // text representation.\n  string description = 2;\n  // The Terms of Service for the API.\n  string terms_of_service = 3;\n  // The contact information for the exposed API.\n  Contact contact = 4;\n  // The license information for the exposed API.\n  License license = 5;\n  // Provides the version of the application API (not to be confused\n  // with the specification version).\n  string version = 6;\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 7;\n}\n\n// `Contact` is a representation of OpenAPI v2 specification's Contact object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject\n//\n// Example:\n//\n//  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//    info: {\n//      ...\n//      contact: {\n//        name: \"gRPC-Gateway project\";\n//        url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//        email: \"none@example.com\";\n//      };\n//      ...\n//    };\n//    ...\n//  };\n//\nmessage Contact {\n  // The identifying name of the contact person/organization.\n  string name = 1;\n  // The URL pointing to the contact information. MUST be in the format of a\n  // URL.\n  string url = 2;\n  // The email address of the contact person/organization. MUST be in the format\n  // of an email address.\n  string email = 3;\n}\n\n// `License` is a representation of OpenAPI v2 specification's License object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject\n//\n// Example:\n//\n//  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//    info: {\n//      ...\n//      license: {\n//        name: \"BSD 3-Clause License\";\n//        url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//      };\n//      ...\n//    };\n//    ...\n//  };\n//\nmessage License {\n  // The license name used for the API.\n  string name = 1;\n  // A URL to the license used for the API. MUST be in the format of a URL.\n  string url = 2;\n}\n\n// `ExternalDocumentation` is a representation of OpenAPI v2 specification's\n// ExternalDocumentation object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject\n//\n// Example:\n//\n//  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//    ...\n//    external_docs: {\n//      description: \"More about gRPC-Gateway\";\n//      url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//    }\n//    ...\n//  };\n//\nmessage ExternalDocumentation {\n  // A short description of the target documentation. GFM syntax can be used for\n  // rich text representation.\n  string description = 1;\n  // The URL for the target documentation. Value MUST be in the format\n  // of a URL.\n  string url = 2;\n}\n\n// `Schema` is a representation of OpenAPI v2 specification's Schema object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n//\nmessage Schema {\n  JSONSchema json_schema = 1;\n  // Adds support for polymorphism. The discriminator is the schema property\n  // name that is used to differentiate between other schema that inherit this\n  // schema. The property name used MUST be defined at this schema and it MUST\n  // be in the required property list. When used, the value MUST be the name of\n  // this schema or any schema that inherits it.\n  string discriminator = 2;\n  // Relevant only for Schema \"properties\" definitions. Declares the property as\n  // \"read only\". This means that it MAY be sent as part of a response but MUST\n  // NOT be sent as part of the request. Properties marked as readOnly being\n  // true SHOULD NOT be in the required list of the defined schema. Default\n  // value is false.\n  bool read_only = 3;\n  // field 4 is reserved for 'xml'.\n  reserved 4;\n  // Additional external documentation for this schema.\n  ExternalDocumentation external_docs = 5;\n  // A free-form property to include an example of an instance for this schema in JSON.\n  // This is copied verbatim to the output.\n  string example = 6;\n}\n\n// `EnumSchema` is subset of fields from the OpenAPI v2 specification's Schema object.\n// Only fields that are applicable to Enums are included\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n//\n// Example:\n//\n//  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum) = {\n//    ...\n//    title: \"MyEnum\";\n//    description:\"This is my nice enum\";\n//    example: \"ZERO\";\n//    required: true;\n//    ...\n//  };\n//\nmessage EnumSchema {\n  // A short description of the schema.\n  string description = 1;\n  string default = 2;\n  // The title of the schema.\n  string title = 3;\n  bool required = 4;\n  bool read_only = 5;\n  // Additional external documentation for this schema.\n  ExternalDocumentation external_docs = 6;\n  string example = 7;\n  // Ref is used to define an external reference to include in the message.\n  // This could be a fully qualified proto message reference, and that type must\n  // be imported into the protofile. If no message is identified, the Ref will\n  // be used verbatim in the output.\n  // For example:\n  //  `ref: \".google.protobuf.Timestamp\"`.\n  string ref = 8;\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 9;\n}\n\n// `JSONSchema` represents properties from JSON Schema taken, and as used, in\n// the OpenAPI v2 spec.\n//\n// This includes changes made by OpenAPI v2.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n//\n// See also: https://cswr.github.io/JsonSchema/spec/basic_types/,\n// https://github.com/json-schema-org/json-schema-spec/blob/master/schema.json\n//\n// Example:\n//\n//  message SimpleMessage {\n//    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n//      json_schema: {\n//        title: \"SimpleMessage\"\n//        description: \"A simple message.\"\n//        required: [\"id\"]\n//      }\n//    };\n//\n//    // Id represents the message identifier.\n//    string id = 1; [\n//        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n//          description: \"The unique identifier of the simple message.\"\n//        }];\n//  }\n//\nmessage JSONSchema {\n  // field 1 is reserved for '$id', omitted from OpenAPI v2.\n  reserved 1;\n  // field 2 is reserved for '$schema', omitted from OpenAPI v2.\n  reserved 2;\n  // Ref is used to define an external reference to include in the message.\n  // This could be a fully qualified proto message reference, and that type must\n  // be imported into the protofile. If no message is identified, the Ref will\n  // be used verbatim in the output.\n  // For example:\n  //  `ref: \".google.protobuf.Timestamp\"`.\n  string ref = 3;\n  // field 4 is reserved for '$comment', omitted from OpenAPI v2.\n  reserved 4;\n  // The title of the schema.\n  string title = 5;\n  // A short description of the schema.\n  string description = 6;\n  string default = 7;\n  bool read_only = 8;\n  // A free-form property to include a JSON example of this field. This is copied\n  // verbatim to the output swagger.json. Quotes must be escaped.\n  // This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject  https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n  string example = 9;\n  double multiple_of = 10;\n  // Maximum represents an inclusive upper limit for a numeric instance. The\n  // value of MUST be a number,\n  double maximum = 11;\n  bool exclusive_maximum = 12;\n  // minimum represents an inclusive lower limit for a numeric instance. The\n  // value of MUST be a number,\n  double minimum = 13;\n  bool exclusive_minimum = 14;\n  uint64 max_length = 15;\n  uint64 min_length = 16;\n  string pattern = 17;\n  // field 18 is reserved for 'additionalItems', omitted from OpenAPI v2.\n  reserved 18;\n  // field 19 is reserved for 'items', but in OpenAPI-specific way.\n  // TODO(ivucica): add 'items'?\n  reserved 19;\n  uint64 max_items = 20;\n  uint64 min_items = 21;\n  bool unique_items = 22;\n  // field 23 is reserved for 'contains', omitted from OpenAPI v2.\n  reserved 23;\n  uint64 max_properties = 24;\n  uint64 min_properties = 25;\n  repeated string required = 26;\n  // field 27 is reserved for 'additionalProperties', but in OpenAPI-specific\n  // way. TODO(ivucica): add 'additionalProperties'?\n  reserved 27;\n  // field 28 is reserved for 'definitions', omitted from OpenAPI v2.\n  reserved 28;\n  // field 29 is reserved for 'properties', but in OpenAPI-specific way.\n  // TODO(ivucica): add 'additionalProperties'?\n  reserved 29;\n  // following fields are reserved, as the properties have been omitted from\n  // OpenAPI v2:\n  // patternProperties, dependencies, propertyNames, const\n  reserved 30 to 33;\n  // Items in 'array' must be unique.\n  repeated string array = 34;\n\n  enum JSONSchemaSimpleTypes {\n    UNKNOWN = 0;\n    ARRAY = 1;\n    BOOLEAN = 2;\n    INTEGER = 3;\n    NULL = 4;\n    NUMBER = 5;\n    OBJECT = 6;\n    STRING = 7;\n  }\n\n  repeated JSONSchemaSimpleTypes type = 35;\n  // `Format`\n  string format = 36;\n  // following fields are reserved, as the properties have been omitted from\n  // OpenAPI v2: contentMediaType, contentEncoding, if, then, else\n  reserved 37 to 41;\n  // field 42 is reserved for 'allOf', but in OpenAPI-specific way.\n  // TODO(ivucica): add 'allOf'?\n  reserved 42;\n  // following fields are reserved, as the properties have been omitted from\n  // OpenAPI v2:\n  // anyOf, oneOf, not\n  reserved 43 to 45;\n  // Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1\n  repeated string enum = 46;\n\n  // Additional field level properties used when generating the OpenAPI v2 file.\n  FieldConfiguration field_configuration = 1001;\n\n  // 'FieldConfiguration' provides additional field level properties used when generating the OpenAPI v2 file.\n  // These properties are not defined by OpenAPIv2, but they are used to control the generation.\n  message FieldConfiguration {\n    // Alternative parameter name when used as path parameter. If set, this will\n    // be used as the complete parameter name when this field is used as a path\n    // parameter. Use this to avoid having auto generated path parameter names\n    // for overlapping paths.\n    string path_param_name = 47;\n    // Declares this field to be deprecated. Allows for the generated OpenAPI\n    // parameter to be marked as deprecated without affecting the proto field.\n    bool deprecated = 49;\n  }\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 48;\n}\n\n// `Tag` is a representation of OpenAPI v2 specification's Tag object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject\n//\nmessage Tag {\n  // The name of the tag. Use it to allow override of the name of a\n  // global Tag object, then use that name to reference the tag throughout the\n  // OpenAPI file.\n  string name = 1;\n  // A short description for the tag. GFM syntax can be used for rich text\n  // representation.\n  string description = 2;\n  // Additional external documentation for this tag.\n  ExternalDocumentation external_docs = 3;\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 4;\n}\n\n// `SecurityDefinitions` is a representation of OpenAPI v2 specification's\n// Security Definitions object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityDefinitionsObject\n//\n// A declaration of the security schemes available to be used in the\n// specification. This does not enforce the security schemes on the operations\n// and only serves to provide the relevant details for each scheme.\nmessage SecurityDefinitions {\n  // A single security scheme definition, mapping a \"name\" to the scheme it\n  // defines.\n  map<string, SecurityScheme> security = 1;\n}\n\n// `SecurityScheme` is a representation of OpenAPI v2 specification's\n// Security Scheme object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securitySchemeObject\n//\n// Allows the definition of a security scheme that can be used by the\n// operations. Supported schemes are basic authentication, an API key (either as\n// a header or as a query parameter) and OAuth2's common flows (implicit,\n// password, application and access code).\nmessage SecurityScheme {\n  // The type of the security scheme. Valid values are \"basic\",\n  // \"apiKey\" or \"oauth2\".\n  enum Type {\n    TYPE_INVALID = 0;\n    TYPE_BASIC = 1;\n    TYPE_API_KEY = 2;\n    TYPE_OAUTH2 = 3;\n  }\n\n  // The location of the API key. Valid values are \"query\" or \"header\".\n  enum In {\n    IN_INVALID = 0;\n    IN_QUERY = 1;\n    IN_HEADER = 2;\n  }\n\n  // The flow used by the OAuth2 security scheme. Valid values are\n  // \"implicit\", \"password\", \"application\" or \"accessCode\".\n  enum Flow {\n    FLOW_INVALID = 0;\n    FLOW_IMPLICIT = 1;\n    FLOW_PASSWORD = 2;\n    FLOW_APPLICATION = 3;\n    FLOW_ACCESS_CODE = 4;\n  }\n\n  // The type of the security scheme. Valid values are \"basic\",\n  // \"apiKey\" or \"oauth2\".\n  Type type = 1;\n  // A short description for security scheme.\n  string description = 2;\n  // The name of the header or query parameter to be used.\n  // Valid for apiKey.\n  string name = 3;\n  // The location of the API key. Valid values are \"query\" or\n  // \"header\".\n  // Valid for apiKey.\n  In in = 4;\n  // The flow used by the OAuth2 security scheme. Valid values are\n  // \"implicit\", \"password\", \"application\" or \"accessCode\".\n  // Valid for oauth2.\n  Flow flow = 5;\n  // The authorization URL to be used for this flow. This SHOULD be in\n  // the form of a URL.\n  // Valid for oauth2/implicit and oauth2/accessCode.\n  string authorization_url = 6;\n  // The token URL to be used for this flow. This SHOULD be in the\n  // form of a URL.\n  // Valid for oauth2/password, oauth2/application and oauth2/accessCode.\n  string token_url = 7;\n  // The available scopes for the OAuth2 security scheme.\n  // Valid for oauth2.\n  Scopes scopes = 8;\n  // Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n  // extra functionality that is not covered by the standard OpenAPI Specification.\n  // See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n  map<string, google.protobuf.Value> extensions = 9;\n}\n\n// `SecurityRequirement` is a representation of OpenAPI v2 specification's\n// Security Requirement object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityRequirementObject\n//\n// Lists the required security schemes to execute this operation. The object can\n// have multiple security schemes declared in it which are all required (that\n// is, there is a logical AND between the schemes).\n//\n// The name used for each property MUST correspond to a security scheme\n// declared in the Security Definitions.\nmessage SecurityRequirement {\n  // If the security scheme is of type \"oauth2\", then the value is a list of\n  // scope names required for the execution. For other security scheme types,\n  // the array MUST be empty.\n  message SecurityRequirementValue {\n    repeated string scope = 1;\n  }\n  // Each name must correspond to a security scheme which is declared in\n  // the Security Definitions. If the security scheme is of type \"oauth2\",\n  // then the value is a list of scope names required for the execution.\n  // For other security scheme types, the array MUST be empty.\n  map<string, SecurityRequirementValue> security_requirement = 1;\n}\n\n// `Scopes` is a representation of OpenAPI v2 specification's Scopes object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#scopesObject\n//\n// Lists the available scopes for an OAuth2 security scheme.\nmessage Scopes {\n  // Maps between a name of a scope to a short description of it (as the value\n  // of the property).\n  map<string, string> scope = 1;\n}\n"
  },
  {
    "path": "protoc-gen-openapiv2/options/openapiv2_protoopaque.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.0\n// \tprotoc        (unknown)\n// source: protoc-gen-openapiv2/options/openapiv2.proto\n\n//go:build protoopaque\n\npackage options\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n\treflect \"reflect\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// Scheme describes the schemes supported by the OpenAPI Swagger\n// and Operation objects.\ntype Scheme int32\n\nconst (\n\tScheme_UNKNOWN Scheme = 0\n\tScheme_HTTP    Scheme = 1\n\tScheme_HTTPS   Scheme = 2\n\tScheme_WS      Scheme = 3\n\tScheme_WSS     Scheme = 4\n)\n\n// Enum value maps for Scheme.\nvar (\n\tScheme_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"HTTP\",\n\t\t2: \"HTTPS\",\n\t\t3: \"WS\",\n\t\t4: \"WSS\",\n\t}\n\tScheme_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"HTTP\":    1,\n\t\t\"HTTPS\":   2,\n\t\t\"WS\":      3,\n\t\t\"WSS\":     4,\n\t}\n)\n\nfunc (x Scheme) Enum() *Scheme {\n\tp := new(Scheme)\n\t*p = x\n\treturn p\n}\n\nfunc (x Scheme) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (Scheme) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[0].Descriptor()\n}\n\nfunc (Scheme) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[0]\n}\n\nfunc (x Scheme) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// `Type` is a supported HTTP header type.\n// See https://swagger.io/specification/v2/#parameterType.\ntype HeaderParameter_Type int32\n\nconst (\n\tHeaderParameter_UNKNOWN HeaderParameter_Type = 0\n\tHeaderParameter_STRING  HeaderParameter_Type = 1\n\tHeaderParameter_NUMBER  HeaderParameter_Type = 2\n\tHeaderParameter_INTEGER HeaderParameter_Type = 3\n\tHeaderParameter_BOOLEAN HeaderParameter_Type = 4\n)\n\n// Enum value maps for HeaderParameter_Type.\nvar (\n\tHeaderParameter_Type_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"STRING\",\n\t\t2: \"NUMBER\",\n\t\t3: \"INTEGER\",\n\t\t4: \"BOOLEAN\",\n\t}\n\tHeaderParameter_Type_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"STRING\":  1,\n\t\t\"NUMBER\":  2,\n\t\t\"INTEGER\": 3,\n\t\t\"BOOLEAN\": 4,\n\t}\n)\n\nfunc (x HeaderParameter_Type) Enum() *HeaderParameter_Type {\n\tp := new(HeaderParameter_Type)\n\t*p = x\n\treturn p\n}\n\nfunc (x HeaderParameter_Type) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (HeaderParameter_Type) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1].Descriptor()\n}\n\nfunc (HeaderParameter_Type) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1]\n}\n\nfunc (x HeaderParameter_Type) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\ntype JSONSchema_JSONSchemaSimpleTypes int32\n\nconst (\n\tJSONSchema_UNKNOWN JSONSchema_JSONSchemaSimpleTypes = 0\n\tJSONSchema_ARRAY   JSONSchema_JSONSchemaSimpleTypes = 1\n\tJSONSchema_BOOLEAN JSONSchema_JSONSchemaSimpleTypes = 2\n\tJSONSchema_INTEGER JSONSchema_JSONSchemaSimpleTypes = 3\n\tJSONSchema_NULL    JSONSchema_JSONSchemaSimpleTypes = 4\n\tJSONSchema_NUMBER  JSONSchema_JSONSchemaSimpleTypes = 5\n\tJSONSchema_OBJECT  JSONSchema_JSONSchemaSimpleTypes = 6\n\tJSONSchema_STRING  JSONSchema_JSONSchemaSimpleTypes = 7\n)\n\n// Enum value maps for JSONSchema_JSONSchemaSimpleTypes.\nvar (\n\tJSONSchema_JSONSchemaSimpleTypes_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"ARRAY\",\n\t\t2: \"BOOLEAN\",\n\t\t3: \"INTEGER\",\n\t\t4: \"NULL\",\n\t\t5: \"NUMBER\",\n\t\t6: \"OBJECT\",\n\t\t7: \"STRING\",\n\t}\n\tJSONSchema_JSONSchemaSimpleTypes_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"ARRAY\":   1,\n\t\t\"BOOLEAN\": 2,\n\t\t\"INTEGER\": 3,\n\t\t\"NULL\":    4,\n\t\t\"NUMBER\":  5,\n\t\t\"OBJECT\":  6,\n\t\t\"STRING\":  7,\n\t}\n)\n\nfunc (x JSONSchema_JSONSchemaSimpleTypes) Enum() *JSONSchema_JSONSchemaSimpleTypes {\n\tp := new(JSONSchema_JSONSchemaSimpleTypes)\n\t*p = x\n\treturn p\n}\n\nfunc (x JSONSchema_JSONSchemaSimpleTypes) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (JSONSchema_JSONSchemaSimpleTypes) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2].Descriptor()\n}\n\nfunc (JSONSchema_JSONSchemaSimpleTypes) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2]\n}\n\nfunc (x JSONSchema_JSONSchemaSimpleTypes) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// The type of the security scheme. Valid values are \"basic\",\n// \"apiKey\" or \"oauth2\".\ntype SecurityScheme_Type int32\n\nconst (\n\tSecurityScheme_TYPE_INVALID SecurityScheme_Type = 0\n\tSecurityScheme_TYPE_BASIC   SecurityScheme_Type = 1\n\tSecurityScheme_TYPE_API_KEY SecurityScheme_Type = 2\n\tSecurityScheme_TYPE_OAUTH2  SecurityScheme_Type = 3\n)\n\n// Enum value maps for SecurityScheme_Type.\nvar (\n\tSecurityScheme_Type_name = map[int32]string{\n\t\t0: \"TYPE_INVALID\",\n\t\t1: \"TYPE_BASIC\",\n\t\t2: \"TYPE_API_KEY\",\n\t\t3: \"TYPE_OAUTH2\",\n\t}\n\tSecurityScheme_Type_value = map[string]int32{\n\t\t\"TYPE_INVALID\": 0,\n\t\t\"TYPE_BASIC\":   1,\n\t\t\"TYPE_API_KEY\": 2,\n\t\t\"TYPE_OAUTH2\":  3,\n\t}\n)\n\nfunc (x SecurityScheme_Type) Enum() *SecurityScheme_Type {\n\tp := new(SecurityScheme_Type)\n\t*p = x\n\treturn p\n}\n\nfunc (x SecurityScheme_Type) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SecurityScheme_Type) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3].Descriptor()\n}\n\nfunc (SecurityScheme_Type) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3]\n}\n\nfunc (x SecurityScheme_Type) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// The location of the API key. Valid values are \"query\" or \"header\".\ntype SecurityScheme_In int32\n\nconst (\n\tSecurityScheme_IN_INVALID SecurityScheme_In = 0\n\tSecurityScheme_IN_QUERY   SecurityScheme_In = 1\n\tSecurityScheme_IN_HEADER  SecurityScheme_In = 2\n)\n\n// Enum value maps for SecurityScheme_In.\nvar (\n\tSecurityScheme_In_name = map[int32]string{\n\t\t0: \"IN_INVALID\",\n\t\t1: \"IN_QUERY\",\n\t\t2: \"IN_HEADER\",\n\t}\n\tSecurityScheme_In_value = map[string]int32{\n\t\t\"IN_INVALID\": 0,\n\t\t\"IN_QUERY\":   1,\n\t\t\"IN_HEADER\":  2,\n\t}\n)\n\nfunc (x SecurityScheme_In) Enum() *SecurityScheme_In {\n\tp := new(SecurityScheme_In)\n\t*p = x\n\treturn p\n}\n\nfunc (x SecurityScheme_In) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SecurityScheme_In) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4].Descriptor()\n}\n\nfunc (SecurityScheme_In) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4]\n}\n\nfunc (x SecurityScheme_In) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// The flow used by the OAuth2 security scheme. Valid values are\n// \"implicit\", \"password\", \"application\" or \"accessCode\".\ntype SecurityScheme_Flow int32\n\nconst (\n\tSecurityScheme_FLOW_INVALID     SecurityScheme_Flow = 0\n\tSecurityScheme_FLOW_IMPLICIT    SecurityScheme_Flow = 1\n\tSecurityScheme_FLOW_PASSWORD    SecurityScheme_Flow = 2\n\tSecurityScheme_FLOW_APPLICATION SecurityScheme_Flow = 3\n\tSecurityScheme_FLOW_ACCESS_CODE SecurityScheme_Flow = 4\n)\n\n// Enum value maps for SecurityScheme_Flow.\nvar (\n\tSecurityScheme_Flow_name = map[int32]string{\n\t\t0: \"FLOW_INVALID\",\n\t\t1: \"FLOW_IMPLICIT\",\n\t\t2: \"FLOW_PASSWORD\",\n\t\t3: \"FLOW_APPLICATION\",\n\t\t4: \"FLOW_ACCESS_CODE\",\n\t}\n\tSecurityScheme_Flow_value = map[string]int32{\n\t\t\"FLOW_INVALID\":     0,\n\t\t\"FLOW_IMPLICIT\":    1,\n\t\t\"FLOW_PASSWORD\":    2,\n\t\t\"FLOW_APPLICATION\": 3,\n\t\t\"FLOW_ACCESS_CODE\": 4,\n\t}\n)\n\nfunc (x SecurityScheme_Flow) Enum() *SecurityScheme_Flow {\n\tp := new(SecurityScheme_Flow)\n\t*p = x\n\treturn p\n}\n\nfunc (x SecurityScheme_Flow) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (SecurityScheme_Flow) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[5].Descriptor()\n}\n\nfunc (SecurityScheme_Flow) Type() protoreflect.EnumType {\n\treturn &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[5]\n}\n\nfunc (x SecurityScheme_Flow) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// `Swagger` is a representation of OpenAPI v2 specification's Swagger object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    title: \"Echo API\";\n//\t    version: \"1.0\";\n//\t    description: \"\";\n//\t    contact: {\n//\t      name: \"gRPC-Gateway project\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t      email: \"none@example.com\";\n//\t    };\n//\t    license: {\n//\t      name: \"BSD 3-Clause License\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//\t    };\n//\t  };\n//\t  schemes: HTTPS;\n//\t  consumes: \"application/json\";\n//\t  produces: \"application/json\";\n//\t};\ntype Swagger struct {\n\tstate                          protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Swagger             string                     `protobuf:\"bytes,1,opt,name=swagger,proto3\" json:\"swagger,omitempty\"`\n\txxx_hidden_Info                *Info                      `protobuf:\"bytes,2,opt,name=info,proto3\" json:\"info,omitempty\"`\n\txxx_hidden_Host                string                     `protobuf:\"bytes,3,opt,name=host,proto3\" json:\"host,omitempty\"`\n\txxx_hidden_BasePath            string                     `protobuf:\"bytes,4,opt,name=base_path,json=basePath,proto3\" json:\"base_path,omitempty\"`\n\txxx_hidden_Schemes             []Scheme                   `protobuf:\"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.Scheme\" json:\"schemes,omitempty\"`\n\txxx_hidden_Consumes            []string                   `protobuf:\"bytes,6,rep,name=consumes,proto3\" json:\"consumes,omitempty\"`\n\txxx_hidden_Produces            []string                   `protobuf:\"bytes,7,rep,name=produces,proto3\" json:\"produces,omitempty\"`\n\txxx_hidden_Responses           map[string]*Response       `protobuf:\"bytes,10,rep,name=responses,proto3\" json:\"responses,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_SecurityDefinitions *SecurityDefinitions       `protobuf:\"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3\" json:\"security_definitions,omitempty\"`\n\txxx_hidden_Security            *[]*SecurityRequirement    `protobuf:\"bytes,12,rep,name=security,proto3\" json:\"security,omitempty\"`\n\txxx_hidden_Tags                *[]*Tag                    `protobuf:\"bytes,13,rep,name=tags,proto3\" json:\"tags,omitempty\"`\n\txxx_hidden_ExternalDocs        *ExternalDocumentation     `protobuf:\"bytes,14,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\txxx_hidden_Extensions          map[string]*structpb.Value `protobuf:\"bytes,15,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields                  protoimpl.UnknownFields\n\tsizeCache                      protoimpl.SizeCache\n}\n\nfunc (x *Swagger) Reset() {\n\t*x = Swagger{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Swagger) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Swagger) ProtoMessage() {}\n\nfunc (x *Swagger) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Swagger) GetSwagger() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Swagger\n\t}\n\treturn \"\"\n}\n\nfunc (x *Swagger) GetInfo() *Info {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Info\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetHost() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Host\n\t}\n\treturn \"\"\n}\n\nfunc (x *Swagger) GetBasePath() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_BasePath\n\t}\n\treturn \"\"\n}\n\nfunc (x *Swagger) GetSchemes() []Scheme {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Schemes\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetConsumes() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Consumes\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetProduces() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Produces\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetResponses() map[string]*Response {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Responses\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetSecurityDefinitions() *SecurityDefinitions {\n\tif x != nil {\n\t\treturn x.xxx_hidden_SecurityDefinitions\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetSecurity() []*SecurityRequirement {\n\tif x != nil {\n\t\tif x.xxx_hidden_Security != nil {\n\t\t\treturn *x.xxx_hidden_Security\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetTags() []*Tag {\n\tif x != nil {\n\t\tif x.xxx_hidden_Tags != nil {\n\t\t\treturn *x.xxx_hidden_Tags\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Swagger) SetSwagger(v string) {\n\tx.xxx_hidden_Swagger = v\n}\n\nfunc (x *Swagger) SetInfo(v *Info) {\n\tx.xxx_hidden_Info = v\n}\n\nfunc (x *Swagger) SetHost(v string) {\n\tx.xxx_hidden_Host = v\n}\n\nfunc (x *Swagger) SetBasePath(v string) {\n\tx.xxx_hidden_BasePath = v\n}\n\nfunc (x *Swagger) SetSchemes(v []Scheme) {\n\tx.xxx_hidden_Schemes = v\n}\n\nfunc (x *Swagger) SetConsumes(v []string) {\n\tx.xxx_hidden_Consumes = v\n}\n\nfunc (x *Swagger) SetProduces(v []string) {\n\tx.xxx_hidden_Produces = v\n}\n\nfunc (x *Swagger) SetResponses(v map[string]*Response) {\n\tx.xxx_hidden_Responses = v\n}\n\nfunc (x *Swagger) SetSecurityDefinitions(v *SecurityDefinitions) {\n\tx.xxx_hidden_SecurityDefinitions = v\n}\n\nfunc (x *Swagger) SetSecurity(v []*SecurityRequirement) {\n\tx.xxx_hidden_Security = &v\n}\n\nfunc (x *Swagger) SetTags(v []*Tag) {\n\tx.xxx_hidden_Tags = &v\n}\n\nfunc (x *Swagger) SetExternalDocs(v *ExternalDocumentation) {\n\tx.xxx_hidden_ExternalDocs = v\n}\n\nfunc (x *Swagger) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *Swagger) HasInfo() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Info != nil\n}\n\nfunc (x *Swagger) HasSecurityDefinitions() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_SecurityDefinitions != nil\n}\n\nfunc (x *Swagger) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ExternalDocs != nil\n}\n\nfunc (x *Swagger) ClearInfo() {\n\tx.xxx_hidden_Info = nil\n}\n\nfunc (x *Swagger) ClearSecurityDefinitions() {\n\tx.xxx_hidden_SecurityDefinitions = nil\n}\n\nfunc (x *Swagger) ClearExternalDocs() {\n\tx.xxx_hidden_ExternalDocs = nil\n}\n\ntype Swagger_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Specifies the OpenAPI Specification version being used. It can be\n\t// used by the OpenAPI UI and other clients to interpret the API listing. The\n\t// value MUST be \"2.0\".\n\tSwagger string\n\t// Provides metadata about the API. The metadata can be used by the\n\t// clients if needed.\n\tInfo *Info\n\t// The host (name or ip) serving the API. This MUST be the host only and does\n\t// not include the scheme nor sub-paths. It MAY include a port. If the host is\n\t// not included, the host serving the documentation is to be used (including\n\t// the port). The host does not support path templating.\n\tHost string\n\t// The base path on which the API is served, which is relative to the host. If\n\t// it is not included, the API is served directly under the host. The value\n\t// MUST start with a leading slash (/). The basePath does not support path\n\t// templating.\n\t// Note that using `base_path` does not change the endpoint paths that are\n\t// generated in the resulting OpenAPI file. If you wish to use `base_path`\n\t// with relatively generated OpenAPI paths, the `base_path` prefix must be\n\t// manually removed from your `google.api.http` paths and your code changed to\n\t// serve the API from the `base_path`.\n\tBasePath string\n\t// The transfer protocol of the API. Values MUST be from the list: \"http\",\n\t// \"https\", \"ws\", \"wss\". If the schemes is not included, the default scheme to\n\t// be used is the one used to access the OpenAPI definition itself.\n\tSchemes []Scheme\n\t// A list of MIME types the APIs can consume. This is global to all APIs but\n\t// can be overridden on specific API calls. Value MUST be as described under\n\t// Mime Types.\n\tConsumes []string\n\t// A list of MIME types the APIs can produce. This is global to all APIs but\n\t// can be overridden on specific API calls. Value MUST be as described under\n\t// Mime Types.\n\tProduces []string\n\t// An object to hold responses that can be used across operations. This\n\t// property does not define global responses for all operations.\n\tResponses map[string]*Response\n\t// Security scheme definitions that can be used across the specification.\n\tSecurityDefinitions *SecurityDefinitions\n\t// A declaration of which security schemes are applied for the API as a whole.\n\t// The list of values describes alternative security schemes that can be used\n\t// (that is, there is a logical OR between the security requirements).\n\t// Individual operations can override this definition.\n\tSecurity []*SecurityRequirement\n\t// A list of tags for API documentation control. Tags can be used for logical\n\t// grouping of operations by resources or any other qualifier.\n\tTags []*Tag\n\t// Additional external documentation.\n\tExternalDocs *ExternalDocumentation\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Swagger_builder) Build() *Swagger {\n\tm0 := &Swagger{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Swagger = b.Swagger\n\tx.xxx_hidden_Info = b.Info\n\tx.xxx_hidden_Host = b.Host\n\tx.xxx_hidden_BasePath = b.BasePath\n\tx.xxx_hidden_Schemes = b.Schemes\n\tx.xxx_hidden_Consumes = b.Consumes\n\tx.xxx_hidden_Produces = b.Produces\n\tx.xxx_hidden_Responses = b.Responses\n\tx.xxx_hidden_SecurityDefinitions = b.SecurityDefinitions\n\tx.xxx_hidden_Security = &b.Security\n\tx.xxx_hidden_Tags = &b.Tags\n\tx.xxx_hidden_ExternalDocs = b.ExternalDocs\n\tx.xxx_hidden_Extensions = b.Extensions\n\treturn m0\n}\n\n// `Operation` is a representation of OpenAPI v2 specification's Operation object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject\n//\n// Example:\n//\n//\tservice EchoService {\n//\t  rpc Echo(SimpleMessage) returns (SimpleMessage) {\n//\t    option (google.api.http) = {\n//\t      get: \"/v1/example/echo/{id}\"\n//\t    };\n//\n//\t    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {\n//\t      summary: \"Get a message.\";\n//\t      operation_id: \"getMessage\";\n//\t      tags: \"echo\";\n//\t      responses: {\n//\t        key: \"200\"\n//\t          value: {\n//\t          description: \"OK\";\n//\t        }\n//\t      }\n//\t    };\n//\t  }\n//\t}\ntype Operation struct {\n\tstate                   protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Tags         []string                   `protobuf:\"bytes,1,rep,name=tags,proto3\" json:\"tags,omitempty\"`\n\txxx_hidden_Summary      string                     `protobuf:\"bytes,2,opt,name=summary,proto3\" json:\"summary,omitempty\"`\n\txxx_hidden_Description  string                     `protobuf:\"bytes,3,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_ExternalDocs *ExternalDocumentation     `protobuf:\"bytes,4,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\txxx_hidden_OperationId  string                     `protobuf:\"bytes,5,opt,name=operation_id,json=operationId,proto3\" json:\"operation_id,omitempty\"`\n\txxx_hidden_Consumes     []string                   `protobuf:\"bytes,6,rep,name=consumes,proto3\" json:\"consumes,omitempty\"`\n\txxx_hidden_Produces     []string                   `protobuf:\"bytes,7,rep,name=produces,proto3\" json:\"produces,omitempty\"`\n\txxx_hidden_Responses    map[string]*Response       `protobuf:\"bytes,9,rep,name=responses,proto3\" json:\"responses,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_Schemes      []Scheme                   `protobuf:\"varint,10,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.Scheme\" json:\"schemes,omitempty\"`\n\txxx_hidden_Deprecated   bool                       `protobuf:\"varint,11,opt,name=deprecated,proto3\" json:\"deprecated,omitempty\"`\n\txxx_hidden_Security     *[]*SecurityRequirement    `protobuf:\"bytes,12,rep,name=security,proto3\" json:\"security,omitempty\"`\n\txxx_hidden_Extensions   map[string]*structpb.Value `protobuf:\"bytes,13,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_Parameters   *Parameters                `protobuf:\"bytes,14,opt,name=parameters,proto3\" json:\"parameters,omitempty\"`\n\tunknownFields           protoimpl.UnknownFields\n\tsizeCache               protoimpl.SizeCache\n}\n\nfunc (x *Operation) Reset() {\n\t*x = Operation{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Operation) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Operation) ProtoMessage() {}\n\nfunc (x *Operation) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Operation) GetTags() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Tags\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetSummary() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Summary\n\t}\n\treturn \"\"\n}\n\nfunc (x *Operation) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Operation) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetOperationId() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_OperationId\n\t}\n\treturn \"\"\n}\n\nfunc (x *Operation) GetConsumes() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Consumes\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetProduces() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Produces\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetResponses() map[string]*Response {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Responses\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetSchemes() []Scheme {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Schemes\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetDeprecated() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Deprecated\n\t}\n\treturn false\n}\n\nfunc (x *Operation) GetSecurity() []*SecurityRequirement {\n\tif x != nil {\n\t\tif x.xxx_hidden_Security != nil {\n\t\t\treturn *x.xxx_hidden_Security\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) GetParameters() *Parameters {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Parameters\n\t}\n\treturn nil\n}\n\nfunc (x *Operation) SetTags(v []string) {\n\tx.xxx_hidden_Tags = v\n}\n\nfunc (x *Operation) SetSummary(v string) {\n\tx.xxx_hidden_Summary = v\n}\n\nfunc (x *Operation) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *Operation) SetExternalDocs(v *ExternalDocumentation) {\n\tx.xxx_hidden_ExternalDocs = v\n}\n\nfunc (x *Operation) SetOperationId(v string) {\n\tx.xxx_hidden_OperationId = v\n}\n\nfunc (x *Operation) SetConsumes(v []string) {\n\tx.xxx_hidden_Consumes = v\n}\n\nfunc (x *Operation) SetProduces(v []string) {\n\tx.xxx_hidden_Produces = v\n}\n\nfunc (x *Operation) SetResponses(v map[string]*Response) {\n\tx.xxx_hidden_Responses = v\n}\n\nfunc (x *Operation) SetSchemes(v []Scheme) {\n\tx.xxx_hidden_Schemes = v\n}\n\nfunc (x *Operation) SetDeprecated(v bool) {\n\tx.xxx_hidden_Deprecated = v\n}\n\nfunc (x *Operation) SetSecurity(v []*SecurityRequirement) {\n\tx.xxx_hidden_Security = &v\n}\n\nfunc (x *Operation) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *Operation) SetParameters(v *Parameters) {\n\tx.xxx_hidden_Parameters = v\n}\n\nfunc (x *Operation) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ExternalDocs != nil\n}\n\nfunc (x *Operation) HasParameters() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Parameters != nil\n}\n\nfunc (x *Operation) ClearExternalDocs() {\n\tx.xxx_hidden_ExternalDocs = nil\n}\n\nfunc (x *Operation) ClearParameters() {\n\tx.xxx_hidden_Parameters = nil\n}\n\ntype Operation_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A list of tags for API documentation control. Tags can be used for logical\n\t// grouping of operations by resources or any other qualifier.\n\tTags []string\n\t// A short summary of what the operation does. For maximum readability in the\n\t// swagger-ui, this field SHOULD be less than 120 characters.\n\tSummary string\n\t// A verbose explanation of the operation behavior. GFM syntax can be used for\n\t// rich text representation.\n\tDescription string\n\t// Additional external documentation for this operation.\n\tExternalDocs *ExternalDocumentation\n\t// Unique string used to identify the operation. The id MUST be unique among\n\t// all operations described in the API. Tools and libraries MAY use the\n\t// operationId to uniquely identify an operation, therefore, it is recommended\n\t// to follow common programming naming conventions.\n\tOperationId string\n\t// A list of MIME types the operation can consume. This overrides the consumes\n\t// definition at the OpenAPI Object. An empty value MAY be used to clear the\n\t// global definition. Value MUST be as described under Mime Types.\n\tConsumes []string\n\t// A list of MIME types the operation can produce. This overrides the produces\n\t// definition at the OpenAPI Object. An empty value MAY be used to clear the\n\t// global definition. Value MUST be as described under Mime Types.\n\tProduces []string\n\t// The list of possible responses as they are returned from executing this\n\t// operation.\n\tResponses map[string]*Response\n\t// The transfer protocol for the operation. Values MUST be from the list:\n\t// \"http\", \"https\", \"ws\", \"wss\". The value overrides the OpenAPI Object\n\t// schemes definition.\n\tSchemes []Scheme\n\t// Declares this operation to be deprecated. Usage of the declared operation\n\t// should be refrained. Default value is false.\n\tDeprecated bool\n\t// A declaration of which security schemes are applied for this operation. The\n\t// list of values describes alternative security schemes that can be used\n\t// (that is, there is a logical OR between the security requirements). This\n\t// definition overrides any declared top-level security. To remove a top-level\n\t// security declaration, an empty array can be used.\n\tSecurity []*SecurityRequirement\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n\t// Custom parameters such as HTTP request headers.\n\t// See: https://swagger.io/docs/specification/2-0/describing-parameters/\n\t// and https://swagger.io/specification/v2/#parameter-object.\n\tParameters *Parameters\n}\n\nfunc (b0 Operation_builder) Build() *Operation {\n\tm0 := &Operation{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Tags = b.Tags\n\tx.xxx_hidden_Summary = b.Summary\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_ExternalDocs = b.ExternalDocs\n\tx.xxx_hidden_OperationId = b.OperationId\n\tx.xxx_hidden_Consumes = b.Consumes\n\tx.xxx_hidden_Produces = b.Produces\n\tx.xxx_hidden_Responses = b.Responses\n\tx.xxx_hidden_Schemes = b.Schemes\n\tx.xxx_hidden_Deprecated = b.Deprecated\n\tx.xxx_hidden_Security = &b.Security\n\tx.xxx_hidden_Extensions = b.Extensions\n\tx.xxx_hidden_Parameters = b.Parameters\n\treturn m0\n}\n\n// `Parameters` is a representation of OpenAPI v2 specification's parameters object.\n// Note: This technically breaks compatibility with the OpenAPI 2 definition structure as we only\n// allow header parameters to be set here since we do not want users specifying custom non-header\n// parameters beyond those inferred from the Protobuf schema.\n// See: https://swagger.io/specification/v2/#parameter-object\ntype Parameters struct {\n\tstate              protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Headers *[]*HeaderParameter    `protobuf:\"bytes,1,rep,name=headers,proto3\" json:\"headers,omitempty\"`\n\tunknownFields      protoimpl.UnknownFields\n\tsizeCache          protoimpl.SizeCache\n}\n\nfunc (x *Parameters) Reset() {\n\t*x = Parameters{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Parameters) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Parameters) ProtoMessage() {}\n\nfunc (x *Parameters) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Parameters) GetHeaders() []*HeaderParameter {\n\tif x != nil {\n\t\tif x.xxx_hidden_Headers != nil {\n\t\t\treturn *x.xxx_hidden_Headers\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (x *Parameters) SetHeaders(v []*HeaderParameter) {\n\tx.xxx_hidden_Headers = &v\n}\n\ntype Parameters_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Headers` is one or more HTTP header parameter.\n\t// See: https://swagger.io/docs/specification/2-0/describing-parameters/#header-parameters\n\tHeaders []*HeaderParameter\n}\n\nfunc (b0 Parameters_builder) Build() *Parameters {\n\tm0 := &Parameters{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Headers = &b.Headers\n\treturn m0\n}\n\n// `HeaderParameter` a HTTP header parameter.\n// See: https://swagger.io/specification/v2/#parameter-object\ntype HeaderParameter struct {\n\tstate                  protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Name        string                 `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\txxx_hidden_Description string                 `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_Type        HeaderParameter_Type   `protobuf:\"varint,3,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter_Type\" json:\"type,omitempty\"`\n\txxx_hidden_Format      string                 `protobuf:\"bytes,4,opt,name=format,proto3\" json:\"format,omitempty\"`\n\txxx_hidden_Required    bool                   `protobuf:\"varint,5,opt,name=required,proto3\" json:\"required,omitempty\"`\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *HeaderParameter) Reset() {\n\t*x = HeaderParameter{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *HeaderParameter) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*HeaderParameter) ProtoMessage() {}\n\nfunc (x *HeaderParameter) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *HeaderParameter) GetName() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *HeaderParameter) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *HeaderParameter) GetType() HeaderParameter_Type {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Type\n\t}\n\treturn HeaderParameter_UNKNOWN\n}\n\nfunc (x *HeaderParameter) GetFormat() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Format\n\t}\n\treturn \"\"\n}\n\nfunc (x *HeaderParameter) GetRequired() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Required\n\t}\n\treturn false\n}\n\nfunc (x *HeaderParameter) SetName(v string) {\n\tx.xxx_hidden_Name = v\n}\n\nfunc (x *HeaderParameter) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *HeaderParameter) SetType(v HeaderParameter_Type) {\n\tx.xxx_hidden_Type = v\n}\n\nfunc (x *HeaderParameter) SetFormat(v string) {\n\tx.xxx_hidden_Format = v\n}\n\nfunc (x *HeaderParameter) SetRequired(v bool) {\n\tx.xxx_hidden_Required = v\n}\n\ntype HeaderParameter_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Name` is the header name.\n\tName string\n\t// `Description` is a short description of the header.\n\tDescription string\n\t// `Type` is the type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n\t// See: https://swagger.io/specification/v2/#parameterType.\n\tType HeaderParameter_Type\n\t// `Format` The extending format for the previously mentioned type.\n\tFormat string\n\t// `Required` indicates if the header is optional\n\tRequired bool\n}\n\nfunc (b0 HeaderParameter_builder) Build() *HeaderParameter {\n\tm0 := &HeaderParameter{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Name = b.Name\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_Type = b.Type\n\tx.xxx_hidden_Format = b.Format\n\tx.xxx_hidden_Required = b.Required\n\treturn m0\n}\n\n// `Header` is a representation of OpenAPI v2 specification's Header object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject\ntype Header struct {\n\tstate                  protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Description string                 `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_Type        string                 `protobuf:\"bytes,2,opt,name=type,proto3\" json:\"type,omitempty\"`\n\txxx_hidden_Format      string                 `protobuf:\"bytes,3,opt,name=format,proto3\" json:\"format,omitempty\"`\n\txxx_hidden_Default     string                 `protobuf:\"bytes,6,opt,name=default,proto3\" json:\"default,omitempty\"`\n\txxx_hidden_Pattern     string                 `protobuf:\"bytes,13,opt,name=pattern,proto3\" json:\"pattern,omitempty\"`\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *Header) Reset() {\n\t*x = Header{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Header) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Header) ProtoMessage() {}\n\nfunc (x *Header) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Header) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetType() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Type\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetFormat() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Format\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetDefault() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Default\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) GetPattern() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Pattern\n\t}\n\treturn \"\"\n}\n\nfunc (x *Header) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *Header) SetType(v string) {\n\tx.xxx_hidden_Type = v\n}\n\nfunc (x *Header) SetFormat(v string) {\n\tx.xxx_hidden_Format = v\n}\n\nfunc (x *Header) SetDefault(v string) {\n\tx.xxx_hidden_Default = v\n}\n\nfunc (x *Header) SetPattern(v string) {\n\tx.xxx_hidden_Pattern = v\n}\n\ntype Header_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Description` is a short description of the header.\n\tDescription string\n\t// The type of the object. The value MUST be one of \"string\", \"number\", \"integer\", or \"boolean\". The \"array\" type is not supported.\n\tType string\n\t// `Format` The extending format for the previously mentioned type.\n\tFormat string\n\t// `Default` Declares the value of the header that the server will use if none is provided.\n\t// See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2.\n\t// Unlike JSON Schema this value MUST conform to the defined type for the header.\n\tDefault string\n\t// 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3.\n\tPattern string\n}\n\nfunc (b0 Header_builder) Build() *Header {\n\tm0 := &Header{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_Type = b.Type\n\tx.xxx_hidden_Format = b.Format\n\tx.xxx_hidden_Default = b.Default\n\tx.xxx_hidden_Pattern = b.Pattern\n\treturn m0\n}\n\n// `Response` is a representation of OpenAPI v2 specification's Response object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject\ntype Response struct {\n\tstate                  protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Description string                     `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_Schema      *Schema                    `protobuf:\"bytes,2,opt,name=schema,proto3\" json:\"schema,omitempty\"`\n\txxx_hidden_Headers     map[string]*Header         `protobuf:\"bytes,3,rep,name=headers,proto3\" json:\"headers,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_Examples    map[string]string          `protobuf:\"bytes,4,rep,name=examples,proto3\" json:\"examples,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\txxx_hidden_Extensions  map[string]*structpb.Value `protobuf:\"bytes,5,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *Response) Reset() {\n\t*x = Response{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Response) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Response) ProtoMessage() {}\n\nfunc (x *Response) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Response) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Response) GetSchema() *Schema {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Schema\n\t}\n\treturn nil\n}\n\nfunc (x *Response) GetHeaders() map[string]*Header {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Headers\n\t}\n\treturn nil\n}\n\nfunc (x *Response) GetExamples() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Examples\n\t}\n\treturn nil\n}\n\nfunc (x *Response) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Response) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *Response) SetSchema(v *Schema) {\n\tx.xxx_hidden_Schema = v\n}\n\nfunc (x *Response) SetHeaders(v map[string]*Header) {\n\tx.xxx_hidden_Headers = v\n}\n\nfunc (x *Response) SetExamples(v map[string]string) {\n\tx.xxx_hidden_Examples = v\n}\n\nfunc (x *Response) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *Response) HasSchema() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Schema != nil\n}\n\nfunc (x *Response) ClearSchema() {\n\tx.xxx_hidden_Schema = nil\n}\n\ntype Response_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// `Description` is a short description of the response.\n\t// GFM syntax can be used for rich text representation.\n\tDescription string\n\t// `Schema` optionally defines the structure of the response.\n\t// If `Schema` is not provided, it means there is no content to the response.\n\tSchema *Schema\n\t// `Headers` A list of headers that are sent with the response.\n\t// `Header` name is expected to be a string in the canonical format of the MIME header key\n\t// See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey\n\tHeaders map[string]*Header\n\t// `Examples` gives per-mimetype response examples.\n\t// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object\n\tExamples map[string]string\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Response_builder) Build() *Response {\n\tm0 := &Response{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_Schema = b.Schema\n\tx.xxx_hidden_Headers = b.Headers\n\tx.xxx_hidden_Examples = b.Examples\n\tx.xxx_hidden_Extensions = b.Extensions\n\treturn m0\n}\n\n// `Info` is a representation of OpenAPI v2 specification's Info object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    title: \"Echo API\";\n//\t    version: \"1.0\";\n//\t    description: \"\";\n//\t    contact: {\n//\t      name: \"gRPC-Gateway project\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t      email: \"none@example.com\";\n//\t    };\n//\t    license: {\n//\t      name: \"BSD 3-Clause License\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//\t    };\n//\t  };\n//\t  ...\n//\t};\ntype Info struct {\n\tstate                     protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Title          string                     `protobuf:\"bytes,1,opt,name=title,proto3\" json:\"title,omitempty\"`\n\txxx_hidden_Description    string                     `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_TermsOfService string                     `protobuf:\"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3\" json:\"terms_of_service,omitempty\"`\n\txxx_hidden_Contact        *Contact                   `protobuf:\"bytes,4,opt,name=contact,proto3\" json:\"contact,omitempty\"`\n\txxx_hidden_License        *License                   `protobuf:\"bytes,5,opt,name=license,proto3\" json:\"license,omitempty\"`\n\txxx_hidden_Version        string                     `protobuf:\"bytes,6,opt,name=version,proto3\" json:\"version,omitempty\"`\n\txxx_hidden_Extensions     map[string]*structpb.Value `protobuf:\"bytes,7,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields             protoimpl.UnknownFields\n\tsizeCache                 protoimpl.SizeCache\n}\n\nfunc (x *Info) Reset() {\n\t*x = Info{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Info) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Info) ProtoMessage() {}\n\nfunc (x *Info) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Info) GetTitle() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Title\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetTermsOfService() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_TermsOfService\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetContact() *Contact {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Contact\n\t}\n\treturn nil\n}\n\nfunc (x *Info) GetLicense() *License {\n\tif x != nil {\n\t\treturn x.xxx_hidden_License\n\t}\n\treturn nil\n}\n\nfunc (x *Info) GetVersion() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Version\n\t}\n\treturn \"\"\n}\n\nfunc (x *Info) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Info) SetTitle(v string) {\n\tx.xxx_hidden_Title = v\n}\n\nfunc (x *Info) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *Info) SetTermsOfService(v string) {\n\tx.xxx_hidden_TermsOfService = v\n}\n\nfunc (x *Info) SetContact(v *Contact) {\n\tx.xxx_hidden_Contact = v\n}\n\nfunc (x *Info) SetLicense(v *License) {\n\tx.xxx_hidden_License = v\n}\n\nfunc (x *Info) SetVersion(v string) {\n\tx.xxx_hidden_Version = v\n}\n\nfunc (x *Info) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *Info) HasContact() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Contact != nil\n}\n\nfunc (x *Info) HasLicense() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_License != nil\n}\n\nfunc (x *Info) ClearContact() {\n\tx.xxx_hidden_Contact = nil\n}\n\nfunc (x *Info) ClearLicense() {\n\tx.xxx_hidden_License = nil\n}\n\ntype Info_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The title of the application.\n\tTitle string\n\t// A short description of the application. GFM syntax can be used for rich\n\t// text representation.\n\tDescription string\n\t// The Terms of Service for the API.\n\tTermsOfService string\n\t// The contact information for the exposed API.\n\tContact *Contact\n\t// The license information for the exposed API.\n\tLicense *License\n\t// Provides the version of the application API (not to be confused\n\t// with the specification version).\n\tVersion string\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Info_builder) Build() *Info {\n\tm0 := &Info{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Title = b.Title\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_TermsOfService = b.TermsOfService\n\tx.xxx_hidden_Contact = b.Contact\n\tx.xxx_hidden_License = b.License\n\tx.xxx_hidden_Version = b.Version\n\tx.xxx_hidden_Extensions = b.Extensions\n\treturn m0\n}\n\n// `Contact` is a representation of OpenAPI v2 specification's Contact object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    ...\n//\t    contact: {\n//\t      name: \"gRPC-Gateway project\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t      email: \"none@example.com\";\n//\t    };\n//\t    ...\n//\t  };\n//\t  ...\n//\t};\ntype Contact struct {\n\tstate            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Name  string                 `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\txxx_hidden_Url   string                 `protobuf:\"bytes,2,opt,name=url,proto3\" json:\"url,omitempty\"`\n\txxx_hidden_Email string                 `protobuf:\"bytes,3,opt,name=email,proto3\" json:\"email,omitempty\"`\n\tunknownFields    protoimpl.UnknownFields\n\tsizeCache        protoimpl.SizeCache\n}\n\nfunc (x *Contact) Reset() {\n\t*x = Contact{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Contact) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Contact) ProtoMessage() {}\n\nfunc (x *Contact) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Contact) GetName() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *Contact) GetUrl() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Url\n\t}\n\treturn \"\"\n}\n\nfunc (x *Contact) GetEmail() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Email\n\t}\n\treturn \"\"\n}\n\nfunc (x *Contact) SetName(v string) {\n\tx.xxx_hidden_Name = v\n}\n\nfunc (x *Contact) SetUrl(v string) {\n\tx.xxx_hidden_Url = v\n}\n\nfunc (x *Contact) SetEmail(v string) {\n\tx.xxx_hidden_Email = v\n}\n\ntype Contact_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The identifying name of the contact person/organization.\n\tName string\n\t// The URL pointing to the contact information. MUST be in the format of a\n\t// URL.\n\tUrl string\n\t// The email address of the contact person/organization. MUST be in the format\n\t// of an email address.\n\tEmail string\n}\n\nfunc (b0 Contact_builder) Build() *Contact {\n\tm0 := &Contact{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Name = b.Name\n\tx.xxx_hidden_Url = b.Url\n\tx.xxx_hidden_Email = b.Email\n\treturn m0\n}\n\n// `License` is a representation of OpenAPI v2 specification's License object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  info: {\n//\t    ...\n//\t    license: {\n//\t      name: \"BSD 3-Clause License\";\n//\t      url: \"https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE\";\n//\t    };\n//\t    ...\n//\t  };\n//\t  ...\n//\t};\ntype License struct {\n\tstate           protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Name string                 `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\txxx_hidden_Url  string                 `protobuf:\"bytes,2,opt,name=url,proto3\" json:\"url,omitempty\"`\n\tunknownFields   protoimpl.UnknownFields\n\tsizeCache       protoimpl.SizeCache\n}\n\nfunc (x *License) Reset() {\n\t*x = License{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *License) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*License) ProtoMessage() {}\n\nfunc (x *License) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *License) GetName() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *License) GetUrl() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Url\n\t}\n\treturn \"\"\n}\n\nfunc (x *License) SetName(v string) {\n\tx.xxx_hidden_Name = v\n}\n\nfunc (x *License) SetUrl(v string) {\n\tx.xxx_hidden_Url = v\n}\n\ntype License_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The license name used for the API.\n\tName string\n\t// A URL to the license used for the API. MUST be in the format of a URL.\n\tUrl string\n}\n\nfunc (b0 License_builder) Build() *License {\n\tm0 := &License{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Name = b.Name\n\tx.xxx_hidden_Url = b.Url\n\treturn m0\n}\n\n// `ExternalDocumentation` is a representation of OpenAPI v2 specification's\n// ExternalDocumentation object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {\n//\t  ...\n//\t  external_docs: {\n//\t    description: \"More about gRPC-Gateway\";\n//\t    url: \"https://github.com/grpc-ecosystem/grpc-gateway\";\n//\t  }\n//\t  ...\n//\t};\ntype ExternalDocumentation struct {\n\tstate                  protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Description string                 `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_Url         string                 `protobuf:\"bytes,2,opt,name=url,proto3\" json:\"url,omitempty\"`\n\tunknownFields          protoimpl.UnknownFields\n\tsizeCache              protoimpl.SizeCache\n}\n\nfunc (x *ExternalDocumentation) Reset() {\n\t*x = ExternalDocumentation{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ExternalDocumentation) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ExternalDocumentation) ProtoMessage() {}\n\nfunc (x *ExternalDocumentation) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *ExternalDocumentation) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *ExternalDocumentation) GetUrl() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Url\n\t}\n\treturn \"\"\n}\n\nfunc (x *ExternalDocumentation) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *ExternalDocumentation) SetUrl(v string) {\n\tx.xxx_hidden_Url = v\n}\n\ntype ExternalDocumentation_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A short description of the target documentation. GFM syntax can be used for\n\t// rich text representation.\n\tDescription string\n\t// The URL for the target documentation. Value MUST be in the format\n\t// of a URL.\n\tUrl string\n}\n\nfunc (b0 ExternalDocumentation_builder) Build() *ExternalDocumentation {\n\tm0 := &ExternalDocumentation{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_Url = b.Url\n\treturn m0\n}\n\n// `Schema` is a representation of OpenAPI v2 specification's Schema object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\ntype Schema struct {\n\tstate                    protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_JsonSchema    *JSONSchema            `protobuf:\"bytes,1,opt,name=json_schema,json=jsonSchema,proto3\" json:\"json_schema,omitempty\"`\n\txxx_hidden_Discriminator string                 `protobuf:\"bytes,2,opt,name=discriminator,proto3\" json:\"discriminator,omitempty\"`\n\txxx_hidden_ReadOnly      bool                   `protobuf:\"varint,3,opt,name=read_only,json=readOnly,proto3\" json:\"read_only,omitempty\"`\n\txxx_hidden_ExternalDocs  *ExternalDocumentation `protobuf:\"bytes,5,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\txxx_hidden_Example       string                 `protobuf:\"bytes,6,opt,name=example,proto3\" json:\"example,omitempty\"`\n\tunknownFields            protoimpl.UnknownFields\n\tsizeCache                protoimpl.SizeCache\n}\n\nfunc (x *Schema) Reset() {\n\t*x = Schema{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Schema) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Schema) ProtoMessage() {}\n\nfunc (x *Schema) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Schema) GetJsonSchema() *JSONSchema {\n\tif x != nil {\n\t\treturn x.xxx_hidden_JsonSchema\n\t}\n\treturn nil\n}\n\nfunc (x *Schema) GetDiscriminator() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Discriminator\n\t}\n\treturn \"\"\n}\n\nfunc (x *Schema) GetReadOnly() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ReadOnly\n\t}\n\treturn false\n}\n\nfunc (x *Schema) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Schema) GetExample() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Example\n\t}\n\treturn \"\"\n}\n\nfunc (x *Schema) SetJsonSchema(v *JSONSchema) {\n\tx.xxx_hidden_JsonSchema = v\n}\n\nfunc (x *Schema) SetDiscriminator(v string) {\n\tx.xxx_hidden_Discriminator = v\n}\n\nfunc (x *Schema) SetReadOnly(v bool) {\n\tx.xxx_hidden_ReadOnly = v\n}\n\nfunc (x *Schema) SetExternalDocs(v *ExternalDocumentation) {\n\tx.xxx_hidden_ExternalDocs = v\n}\n\nfunc (x *Schema) SetExample(v string) {\n\tx.xxx_hidden_Example = v\n}\n\nfunc (x *Schema) HasJsonSchema() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_JsonSchema != nil\n}\n\nfunc (x *Schema) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ExternalDocs != nil\n}\n\nfunc (x *Schema) ClearJsonSchema() {\n\tx.xxx_hidden_JsonSchema = nil\n}\n\nfunc (x *Schema) ClearExternalDocs() {\n\tx.xxx_hidden_ExternalDocs = nil\n}\n\ntype Schema_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tJsonSchema *JSONSchema\n\t// Adds support for polymorphism. The discriminator is the schema property\n\t// name that is used to differentiate between other schema that inherit this\n\t// schema. The property name used MUST be defined at this schema and it MUST\n\t// be in the required property list. When used, the value MUST be the name of\n\t// this schema or any schema that inherits it.\n\tDiscriminator string\n\t// Relevant only for Schema \"properties\" definitions. Declares the property as\n\t// \"read only\". This means that it MAY be sent as part of a response but MUST\n\t// NOT be sent as part of the request. Properties marked as readOnly being\n\t// true SHOULD NOT be in the required list of the defined schema. Default\n\t// value is false.\n\tReadOnly bool\n\t// Additional external documentation for this schema.\n\tExternalDocs *ExternalDocumentation\n\t// A free-form property to include an example of an instance for this schema in JSON.\n\t// This is copied verbatim to the output.\n\tExample string\n}\n\nfunc (b0 Schema_builder) Build() *Schema {\n\tm0 := &Schema{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_JsonSchema = b.JsonSchema\n\tx.xxx_hidden_Discriminator = b.Discriminator\n\tx.xxx_hidden_ReadOnly = b.ReadOnly\n\tx.xxx_hidden_ExternalDocs = b.ExternalDocs\n\tx.xxx_hidden_Example = b.Example\n\treturn m0\n}\n\n// `EnumSchema` is subset of fields from the OpenAPI v2 specification's Schema object.\n// Only fields that are applicable to Enums are included\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n//\n// Example:\n//\n//\toption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum) = {\n//\t  ...\n//\t  title: \"MyEnum\";\n//\t  description:\"This is my nice enum\";\n//\t  example: \"ZERO\";\n//\t  required: true;\n//\t  ...\n//\t};\ntype EnumSchema struct {\n\tstate                   protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Description  string                     `protobuf:\"bytes,1,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_Default      string                     `protobuf:\"bytes,2,opt,name=default,proto3\" json:\"default,omitempty\"`\n\txxx_hidden_Title        string                     `protobuf:\"bytes,3,opt,name=title,proto3\" json:\"title,omitempty\"`\n\txxx_hidden_Required     bool                       `protobuf:\"varint,4,opt,name=required,proto3\" json:\"required,omitempty\"`\n\txxx_hidden_ReadOnly     bool                       `protobuf:\"varint,5,opt,name=read_only,json=readOnly,proto3\" json:\"read_only,omitempty\"`\n\txxx_hidden_ExternalDocs *ExternalDocumentation     `protobuf:\"bytes,6,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\txxx_hidden_Example      string                     `protobuf:\"bytes,7,opt,name=example,proto3\" json:\"example,omitempty\"`\n\txxx_hidden_Ref          string                     `protobuf:\"bytes,8,opt,name=ref,proto3\" json:\"ref,omitempty\"`\n\txxx_hidden_Extensions   map[string]*structpb.Value `protobuf:\"bytes,9,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields           protoimpl.UnknownFields\n\tsizeCache               protoimpl.SizeCache\n}\n\nfunc (x *EnumSchema) Reset() {\n\t*x = EnumSchema{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *EnumSchema) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*EnumSchema) ProtoMessage() {}\n\nfunc (x *EnumSchema) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *EnumSchema) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetDefault() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Default\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetTitle() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Title\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetRequired() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Required\n\t}\n\treturn false\n}\n\nfunc (x *EnumSchema) GetReadOnly() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ReadOnly\n\t}\n\treturn false\n}\n\nfunc (x *EnumSchema) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *EnumSchema) GetExample() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Example\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetRef() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Ref\n\t}\n\treturn \"\"\n}\n\nfunc (x *EnumSchema) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *EnumSchema) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *EnumSchema) SetDefault(v string) {\n\tx.xxx_hidden_Default = v\n}\n\nfunc (x *EnumSchema) SetTitle(v string) {\n\tx.xxx_hidden_Title = v\n}\n\nfunc (x *EnumSchema) SetRequired(v bool) {\n\tx.xxx_hidden_Required = v\n}\n\nfunc (x *EnumSchema) SetReadOnly(v bool) {\n\tx.xxx_hidden_ReadOnly = v\n}\n\nfunc (x *EnumSchema) SetExternalDocs(v *ExternalDocumentation) {\n\tx.xxx_hidden_ExternalDocs = v\n}\n\nfunc (x *EnumSchema) SetExample(v string) {\n\tx.xxx_hidden_Example = v\n}\n\nfunc (x *EnumSchema) SetRef(v string) {\n\tx.xxx_hidden_Ref = v\n}\n\nfunc (x *EnumSchema) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *EnumSchema) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ExternalDocs != nil\n}\n\nfunc (x *EnumSchema) ClearExternalDocs() {\n\tx.xxx_hidden_ExternalDocs = nil\n}\n\ntype EnumSchema_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A short description of the schema.\n\tDescription string\n\tDefault     string\n\t// The title of the schema.\n\tTitle    string\n\tRequired bool\n\tReadOnly bool\n\t// Additional external documentation for this schema.\n\tExternalDocs *ExternalDocumentation\n\tExample      string\n\t// Ref is used to define an external reference to include in the message.\n\t// This could be a fully qualified proto message reference, and that type must\n\t// be imported into the protofile. If no message is identified, the Ref will\n\t// be used verbatim in the output.\n\t// For example:\n\t//\n\t//\t`ref: \".google.protobuf.Timestamp\"`.\n\tRef string\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 EnumSchema_builder) Build() *EnumSchema {\n\tm0 := &EnumSchema{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_Default = b.Default\n\tx.xxx_hidden_Title = b.Title\n\tx.xxx_hidden_Required = b.Required\n\tx.xxx_hidden_ReadOnly = b.ReadOnly\n\tx.xxx_hidden_ExternalDocs = b.ExternalDocs\n\tx.xxx_hidden_Example = b.Example\n\tx.xxx_hidden_Ref = b.Ref\n\tx.xxx_hidden_Extensions = b.Extensions\n\treturn m0\n}\n\n// `JSONSchema` represents properties from JSON Schema taken, and as used, in\n// the OpenAPI v2 spec.\n//\n// This includes changes made by OpenAPI v2.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n//\n// See also: https://cswr.github.io/JsonSchema/spec/basic_types/,\n// https://github.com/json-schema-org/json-schema-spec/blob/master/schema.json\n//\n// Example:\n//\n//\tmessage SimpleMessage {\n//\t  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n//\t    json_schema: {\n//\t      title: \"SimpleMessage\"\n//\t      description: \"A simple message.\"\n//\t      required: [\"id\"]\n//\t    }\n//\t  };\n//\n//\t  // Id represents the message identifier.\n//\t  string id = 1; [\n//\t      (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {\n//\t        description: \"The unique identifier of the simple message.\"\n//\t      }];\n//\t}\ntype JSONSchema struct {\n\tstate                         protoimpl.MessageState             `protogen:\"opaque.v1\"`\n\txxx_hidden_Ref                string                             `protobuf:\"bytes,3,opt,name=ref,proto3\" json:\"ref,omitempty\"`\n\txxx_hidden_Title              string                             `protobuf:\"bytes,5,opt,name=title,proto3\" json:\"title,omitempty\"`\n\txxx_hidden_Description        string                             `protobuf:\"bytes,6,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_Default            string                             `protobuf:\"bytes,7,opt,name=default,proto3\" json:\"default,omitempty\"`\n\txxx_hidden_ReadOnly           bool                               `protobuf:\"varint,8,opt,name=read_only,json=readOnly,proto3\" json:\"read_only,omitempty\"`\n\txxx_hidden_Example            string                             `protobuf:\"bytes,9,opt,name=example,proto3\" json:\"example,omitempty\"`\n\txxx_hidden_MultipleOf         float64                            `protobuf:\"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3\" json:\"multiple_of,omitempty\"`\n\txxx_hidden_Maximum            float64                            `protobuf:\"fixed64,11,opt,name=maximum,proto3\" json:\"maximum,omitempty\"`\n\txxx_hidden_ExclusiveMaximum   bool                               `protobuf:\"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3\" json:\"exclusive_maximum,omitempty\"`\n\txxx_hidden_Minimum            float64                            `protobuf:\"fixed64,13,opt,name=minimum,proto3\" json:\"minimum,omitempty\"`\n\txxx_hidden_ExclusiveMinimum   bool                               `protobuf:\"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3\" json:\"exclusive_minimum,omitempty\"`\n\txxx_hidden_MaxLength          uint64                             `protobuf:\"varint,15,opt,name=max_length,json=maxLength,proto3\" json:\"max_length,omitempty\"`\n\txxx_hidden_MinLength          uint64                             `protobuf:\"varint,16,opt,name=min_length,json=minLength,proto3\" json:\"min_length,omitempty\"`\n\txxx_hidden_Pattern            string                             `protobuf:\"bytes,17,opt,name=pattern,proto3\" json:\"pattern,omitempty\"`\n\txxx_hidden_MaxItems           uint64                             `protobuf:\"varint,20,opt,name=max_items,json=maxItems,proto3\" json:\"max_items,omitempty\"`\n\txxx_hidden_MinItems           uint64                             `protobuf:\"varint,21,opt,name=min_items,json=minItems,proto3\" json:\"min_items,omitempty\"`\n\txxx_hidden_UniqueItems        bool                               `protobuf:\"varint,22,opt,name=unique_items,json=uniqueItems,proto3\" json:\"unique_items,omitempty\"`\n\txxx_hidden_MaxProperties      uint64                             `protobuf:\"varint,24,opt,name=max_properties,json=maxProperties,proto3\" json:\"max_properties,omitempty\"`\n\txxx_hidden_MinProperties      uint64                             `protobuf:\"varint,25,opt,name=min_properties,json=minProperties,proto3\" json:\"min_properties,omitempty\"`\n\txxx_hidden_Required           []string                           `protobuf:\"bytes,26,rep,name=required,proto3\" json:\"required,omitempty\"`\n\txxx_hidden_Array              []string                           `protobuf:\"bytes,34,rep,name=array,proto3\" json:\"array,omitempty\"`\n\txxx_hidden_Type               []JSONSchema_JSONSchemaSimpleTypes `protobuf:\"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.JSONSchema_JSONSchemaSimpleTypes\" json:\"type,omitempty\"`\n\txxx_hidden_Format             string                             `protobuf:\"bytes,36,opt,name=format,proto3\" json:\"format,omitempty\"`\n\txxx_hidden_Enum               []string                           `protobuf:\"bytes,46,rep,name=enum,proto3\" json:\"enum,omitempty\"`\n\txxx_hidden_FieldConfiguration *JSONSchema_FieldConfiguration     `protobuf:\"bytes,1001,opt,name=field_configuration,json=fieldConfiguration,proto3\" json:\"field_configuration,omitempty\"`\n\txxx_hidden_Extensions         map[string]*structpb.Value         `protobuf:\"bytes,48,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields                 protoimpl.UnknownFields\n\tsizeCache                     protoimpl.SizeCache\n}\n\nfunc (x *JSONSchema) Reset() {\n\t*x = JSONSchema{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *JSONSchema) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*JSONSchema) ProtoMessage() {}\n\nfunc (x *JSONSchema) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *JSONSchema) GetRef() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Ref\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetTitle() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Title\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetDefault() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Default\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetReadOnly() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ReadOnly\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetExample() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Example\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetMultipleOf() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MultipleOf\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMaximum() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Maximum\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetExclusiveMaximum() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExclusiveMaximum\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetMinimum() float64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Minimum\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetExclusiveMinimum() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExclusiveMinimum\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetMaxLength() uint64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MaxLength\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMinLength() uint64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MinLength\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetPattern() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Pattern\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetMaxItems() uint64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MaxItems\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMinItems() uint64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MinItems\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetUniqueItems() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_UniqueItems\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema) GetMaxProperties() uint64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MaxProperties\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetMinProperties() uint64 {\n\tif x != nil {\n\t\treturn x.xxx_hidden_MinProperties\n\t}\n\treturn 0\n}\n\nfunc (x *JSONSchema) GetRequired() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Required\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetArray() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Array\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Type\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetFormat() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Format\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema) GetEnum() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Enum\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetFieldConfiguration() *JSONSchema_FieldConfiguration {\n\tif x != nil {\n\t\treturn x.xxx_hidden_FieldConfiguration\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *JSONSchema) SetRef(v string) {\n\tx.xxx_hidden_Ref = v\n}\n\nfunc (x *JSONSchema) SetTitle(v string) {\n\tx.xxx_hidden_Title = v\n}\n\nfunc (x *JSONSchema) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *JSONSchema) SetDefault(v string) {\n\tx.xxx_hidden_Default = v\n}\n\nfunc (x *JSONSchema) SetReadOnly(v bool) {\n\tx.xxx_hidden_ReadOnly = v\n}\n\nfunc (x *JSONSchema) SetExample(v string) {\n\tx.xxx_hidden_Example = v\n}\n\nfunc (x *JSONSchema) SetMultipleOf(v float64) {\n\tx.xxx_hidden_MultipleOf = v\n}\n\nfunc (x *JSONSchema) SetMaximum(v float64) {\n\tx.xxx_hidden_Maximum = v\n}\n\nfunc (x *JSONSchema) SetExclusiveMaximum(v bool) {\n\tx.xxx_hidden_ExclusiveMaximum = v\n}\n\nfunc (x *JSONSchema) SetMinimum(v float64) {\n\tx.xxx_hidden_Minimum = v\n}\n\nfunc (x *JSONSchema) SetExclusiveMinimum(v bool) {\n\tx.xxx_hidden_ExclusiveMinimum = v\n}\n\nfunc (x *JSONSchema) SetMaxLength(v uint64) {\n\tx.xxx_hidden_MaxLength = v\n}\n\nfunc (x *JSONSchema) SetMinLength(v uint64) {\n\tx.xxx_hidden_MinLength = v\n}\n\nfunc (x *JSONSchema) SetPattern(v string) {\n\tx.xxx_hidden_Pattern = v\n}\n\nfunc (x *JSONSchema) SetMaxItems(v uint64) {\n\tx.xxx_hidden_MaxItems = v\n}\n\nfunc (x *JSONSchema) SetMinItems(v uint64) {\n\tx.xxx_hidden_MinItems = v\n}\n\nfunc (x *JSONSchema) SetUniqueItems(v bool) {\n\tx.xxx_hidden_UniqueItems = v\n}\n\nfunc (x *JSONSchema) SetMaxProperties(v uint64) {\n\tx.xxx_hidden_MaxProperties = v\n}\n\nfunc (x *JSONSchema) SetMinProperties(v uint64) {\n\tx.xxx_hidden_MinProperties = v\n}\n\nfunc (x *JSONSchema) SetRequired(v []string) {\n\tx.xxx_hidden_Required = v\n}\n\nfunc (x *JSONSchema) SetArray(v []string) {\n\tx.xxx_hidden_Array = v\n}\n\nfunc (x *JSONSchema) SetType(v []JSONSchema_JSONSchemaSimpleTypes) {\n\tx.xxx_hidden_Type = v\n}\n\nfunc (x *JSONSchema) SetFormat(v string) {\n\tx.xxx_hidden_Format = v\n}\n\nfunc (x *JSONSchema) SetEnum(v []string) {\n\tx.xxx_hidden_Enum = v\n}\n\nfunc (x *JSONSchema) SetFieldConfiguration(v *JSONSchema_FieldConfiguration) {\n\tx.xxx_hidden_FieldConfiguration = v\n}\n\nfunc (x *JSONSchema) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *JSONSchema) HasFieldConfiguration() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_FieldConfiguration != nil\n}\n\nfunc (x *JSONSchema) ClearFieldConfiguration() {\n\tx.xxx_hidden_FieldConfiguration = nil\n}\n\ntype JSONSchema_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Ref is used to define an external reference to include in the message.\n\t// This could be a fully qualified proto message reference, and that type must\n\t// be imported into the protofile. If no message is identified, the Ref will\n\t// be used verbatim in the output.\n\t// For example:\n\t//\n\t//\t`ref: \".google.protobuf.Timestamp\"`.\n\tRef string\n\t// The title of the schema.\n\tTitle string\n\t// A short description of the schema.\n\tDescription string\n\tDefault     string\n\tReadOnly    bool\n\t// A free-form property to include a JSON example of this field. This is copied\n\t// verbatim to the output swagger.json. Quotes must be escaped.\n\t// This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject  https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject\n\tExample    string\n\tMultipleOf float64\n\t// Maximum represents an inclusive upper limit for a numeric instance. The\n\t// value of MUST be a number,\n\tMaximum          float64\n\tExclusiveMaximum bool\n\t// minimum represents an inclusive lower limit for a numeric instance. The\n\t// value of MUST be a number,\n\tMinimum          float64\n\tExclusiveMinimum bool\n\tMaxLength        uint64\n\tMinLength        uint64\n\tPattern          string\n\tMaxItems         uint64\n\tMinItems         uint64\n\tUniqueItems      bool\n\tMaxProperties    uint64\n\tMinProperties    uint64\n\tRequired         []string\n\t// Items in 'array' must be unique.\n\tArray []string\n\tType  []JSONSchema_JSONSchemaSimpleTypes\n\t// `Format`\n\tFormat string\n\t// Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1\n\tEnum []string\n\t// Additional field level properties used when generating the OpenAPI v2 file.\n\tFieldConfiguration *JSONSchema_FieldConfiguration\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 JSONSchema_builder) Build() *JSONSchema {\n\tm0 := &JSONSchema{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Ref = b.Ref\n\tx.xxx_hidden_Title = b.Title\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_Default = b.Default\n\tx.xxx_hidden_ReadOnly = b.ReadOnly\n\tx.xxx_hidden_Example = b.Example\n\tx.xxx_hidden_MultipleOf = b.MultipleOf\n\tx.xxx_hidden_Maximum = b.Maximum\n\tx.xxx_hidden_ExclusiveMaximum = b.ExclusiveMaximum\n\tx.xxx_hidden_Minimum = b.Minimum\n\tx.xxx_hidden_ExclusiveMinimum = b.ExclusiveMinimum\n\tx.xxx_hidden_MaxLength = b.MaxLength\n\tx.xxx_hidden_MinLength = b.MinLength\n\tx.xxx_hidden_Pattern = b.Pattern\n\tx.xxx_hidden_MaxItems = b.MaxItems\n\tx.xxx_hidden_MinItems = b.MinItems\n\tx.xxx_hidden_UniqueItems = b.UniqueItems\n\tx.xxx_hidden_MaxProperties = b.MaxProperties\n\tx.xxx_hidden_MinProperties = b.MinProperties\n\tx.xxx_hidden_Required = b.Required\n\tx.xxx_hidden_Array = b.Array\n\tx.xxx_hidden_Type = b.Type\n\tx.xxx_hidden_Format = b.Format\n\tx.xxx_hidden_Enum = b.Enum\n\tx.xxx_hidden_FieldConfiguration = b.FieldConfiguration\n\tx.xxx_hidden_Extensions = b.Extensions\n\treturn m0\n}\n\n// `Tag` is a representation of OpenAPI v2 specification's Tag object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject\ntype Tag struct {\n\tstate                   protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Name         string                     `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\txxx_hidden_Description  string                     `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_ExternalDocs *ExternalDocumentation     `protobuf:\"bytes,3,opt,name=external_docs,json=externalDocs,proto3\" json:\"external_docs,omitempty\"`\n\txxx_hidden_Extensions   map[string]*structpb.Value `protobuf:\"bytes,4,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields           protoimpl.UnknownFields\n\tsizeCache               protoimpl.SizeCache\n}\n\nfunc (x *Tag) Reset() {\n\t*x = Tag{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Tag) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Tag) ProtoMessage() {}\n\nfunc (x *Tag) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Tag) GetName() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *Tag) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *Tag) GetExternalDocs() *ExternalDocumentation {\n\tif x != nil {\n\t\treturn x.xxx_hidden_ExternalDocs\n\t}\n\treturn nil\n}\n\nfunc (x *Tag) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *Tag) SetName(v string) {\n\tx.xxx_hidden_Name = v\n}\n\nfunc (x *Tag) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *Tag) SetExternalDocs(v *ExternalDocumentation) {\n\tx.xxx_hidden_ExternalDocs = v\n}\n\nfunc (x *Tag) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *Tag) HasExternalDocs() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_ExternalDocs != nil\n}\n\nfunc (x *Tag) ClearExternalDocs() {\n\tx.xxx_hidden_ExternalDocs = nil\n}\n\ntype Tag_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The name of the tag. Use it to allow override of the name of a\n\t// global Tag object, then use that name to reference the tag throughout the\n\t// OpenAPI file.\n\tName string\n\t// A short description for the tag. GFM syntax can be used for rich text\n\t// representation.\n\tDescription string\n\t// Additional external documentation for this tag.\n\tExternalDocs *ExternalDocumentation\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 Tag_builder) Build() *Tag {\n\tm0 := &Tag{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Name = b.Name\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_ExternalDocs = b.ExternalDocs\n\tx.xxx_hidden_Extensions = b.Extensions\n\treturn m0\n}\n\n// `SecurityDefinitions` is a representation of OpenAPI v2 specification's\n// Security Definitions object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityDefinitionsObject\n//\n// A declaration of the security schemes available to be used in the\n// specification. This does not enforce the security schemes on the operations\n// and only serves to provide the relevant details for each scheme.\ntype SecurityDefinitions struct {\n\tstate               protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Security map[string]*SecurityScheme `protobuf:\"bytes,1,rep,name=security,proto3\" json:\"security,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields       protoimpl.UnknownFields\n\tsizeCache           protoimpl.SizeCache\n}\n\nfunc (x *SecurityDefinitions) Reset() {\n\t*x = SecurityDefinitions{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityDefinitions) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityDefinitions) ProtoMessage() {}\n\nfunc (x *SecurityDefinitions) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Security\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityDefinitions) SetSecurity(v map[string]*SecurityScheme) {\n\tx.xxx_hidden_Security = v\n}\n\ntype SecurityDefinitions_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// A single security scheme definition, mapping a \"name\" to the scheme it\n\t// defines.\n\tSecurity map[string]*SecurityScheme\n}\n\nfunc (b0 SecurityDefinitions_builder) Build() *SecurityDefinitions {\n\tm0 := &SecurityDefinitions{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Security = b.Security\n\treturn m0\n}\n\n// `SecurityScheme` is a representation of OpenAPI v2 specification's\n// Security Scheme object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securitySchemeObject\n//\n// Allows the definition of a security scheme that can be used by the\n// operations. Supported schemes are basic authentication, an API key (either as\n// a header or as a query parameter) and OAuth2's common flows (implicit,\n// password, application and access code).\ntype SecurityScheme struct {\n\tstate                       protoimpl.MessageState     `protogen:\"opaque.v1\"`\n\txxx_hidden_Type             SecurityScheme_Type        `protobuf:\"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_Type\" json:\"type,omitempty\"`\n\txxx_hidden_Description      string                     `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\txxx_hidden_Name             string                     `protobuf:\"bytes,3,opt,name=name,proto3\" json:\"name,omitempty\"`\n\txxx_hidden_In               SecurityScheme_In          `protobuf:\"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_In\" json:\"in,omitempty\"`\n\txxx_hidden_Flow             SecurityScheme_Flow        `protobuf:\"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_Flow\" json:\"flow,omitempty\"`\n\txxx_hidden_AuthorizationUrl string                     `protobuf:\"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3\" json:\"authorization_url,omitempty\"`\n\txxx_hidden_TokenUrl         string                     `protobuf:\"bytes,7,opt,name=token_url,json=tokenUrl,proto3\" json:\"token_url,omitempty\"`\n\txxx_hidden_Scopes           *Scopes                    `protobuf:\"bytes,8,opt,name=scopes,proto3\" json:\"scopes,omitempty\"`\n\txxx_hidden_Extensions       map[string]*structpb.Value `protobuf:\"bytes,9,rep,name=extensions,proto3\" json:\"extensions,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields               protoimpl.UnknownFields\n\tsizeCache                   protoimpl.SizeCache\n}\n\nfunc (x *SecurityScheme) Reset() {\n\t*x = SecurityScheme{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[15]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityScheme) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityScheme) ProtoMessage() {}\n\nfunc (x *SecurityScheme) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[15]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityScheme) GetType() SecurityScheme_Type {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Type\n\t}\n\treturn SecurityScheme_TYPE_INVALID\n}\n\nfunc (x *SecurityScheme) GetDescription() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Description\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetName() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetIn() SecurityScheme_In {\n\tif x != nil {\n\t\treturn x.xxx_hidden_In\n\t}\n\treturn SecurityScheme_IN_INVALID\n}\n\nfunc (x *SecurityScheme) GetFlow() SecurityScheme_Flow {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Flow\n\t}\n\treturn SecurityScheme_FLOW_INVALID\n}\n\nfunc (x *SecurityScheme) GetAuthorizationUrl() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_AuthorizationUrl\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetTokenUrl() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_TokenUrl\n\t}\n\treturn \"\"\n}\n\nfunc (x *SecurityScheme) GetScopes() *Scopes {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Scopes\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityScheme) GetExtensions() map[string]*structpb.Value {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Extensions\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityScheme) SetType(v SecurityScheme_Type) {\n\tx.xxx_hidden_Type = v\n}\n\nfunc (x *SecurityScheme) SetDescription(v string) {\n\tx.xxx_hidden_Description = v\n}\n\nfunc (x *SecurityScheme) SetName(v string) {\n\tx.xxx_hidden_Name = v\n}\n\nfunc (x *SecurityScheme) SetIn(v SecurityScheme_In) {\n\tx.xxx_hidden_In = v\n}\n\nfunc (x *SecurityScheme) SetFlow(v SecurityScheme_Flow) {\n\tx.xxx_hidden_Flow = v\n}\n\nfunc (x *SecurityScheme) SetAuthorizationUrl(v string) {\n\tx.xxx_hidden_AuthorizationUrl = v\n}\n\nfunc (x *SecurityScheme) SetTokenUrl(v string) {\n\tx.xxx_hidden_TokenUrl = v\n}\n\nfunc (x *SecurityScheme) SetScopes(v *Scopes) {\n\tx.xxx_hidden_Scopes = v\n}\n\nfunc (x *SecurityScheme) SetExtensions(v map[string]*structpb.Value) {\n\tx.xxx_hidden_Extensions = v\n}\n\nfunc (x *SecurityScheme) HasScopes() bool {\n\tif x == nil {\n\t\treturn false\n\t}\n\treturn x.xxx_hidden_Scopes != nil\n}\n\nfunc (x *SecurityScheme) ClearScopes() {\n\tx.xxx_hidden_Scopes = nil\n}\n\ntype SecurityScheme_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// The type of the security scheme. Valid values are \"basic\",\n\t// \"apiKey\" or \"oauth2\".\n\tType SecurityScheme_Type\n\t// A short description for security scheme.\n\tDescription string\n\t// The name of the header or query parameter to be used.\n\t// Valid for apiKey.\n\tName string\n\t// The location of the API key. Valid values are \"query\" or\n\t// \"header\".\n\t// Valid for apiKey.\n\tIn SecurityScheme_In\n\t// The flow used by the OAuth2 security scheme. Valid values are\n\t// \"implicit\", \"password\", \"application\" or \"accessCode\".\n\t// Valid for oauth2.\n\tFlow SecurityScheme_Flow\n\t// The authorization URL to be used for this flow. This SHOULD be in\n\t// the form of a URL.\n\t// Valid for oauth2/implicit and oauth2/accessCode.\n\tAuthorizationUrl string\n\t// The token URL to be used for this flow. This SHOULD be in the\n\t// form of a URL.\n\t// Valid for oauth2/password, oauth2/application and oauth2/accessCode.\n\tTokenUrl string\n\t// The available scopes for the OAuth2 security scheme.\n\t// Valid for oauth2.\n\tScopes *Scopes\n\t// Custom properties that start with \"x-\" such as \"x-foo\" used to describe\n\t// extra functionality that is not covered by the standard OpenAPI Specification.\n\t// See: https://swagger.io/docs/specification/2-0/swagger-extensions/\n\tExtensions map[string]*structpb.Value\n}\n\nfunc (b0 SecurityScheme_builder) Build() *SecurityScheme {\n\tm0 := &SecurityScheme{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Type = b.Type\n\tx.xxx_hidden_Description = b.Description\n\tx.xxx_hidden_Name = b.Name\n\tx.xxx_hidden_In = b.In\n\tx.xxx_hidden_Flow = b.Flow\n\tx.xxx_hidden_AuthorizationUrl = b.AuthorizationUrl\n\tx.xxx_hidden_TokenUrl = b.TokenUrl\n\tx.xxx_hidden_Scopes = b.Scopes\n\tx.xxx_hidden_Extensions = b.Extensions\n\treturn m0\n}\n\n// `SecurityRequirement` is a representation of OpenAPI v2 specification's\n// Security Requirement object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityRequirementObject\n//\n// Lists the required security schemes to execute this operation. The object can\n// have multiple security schemes declared in it which are all required (that\n// is, there is a logical AND between the schemes).\n//\n// The name used for each property MUST correspond to a security scheme\n// declared in the Security Definitions.\ntype SecurityRequirement struct {\n\tstate                          protoimpl.MessageState                                   `protogen:\"opaque.v1\"`\n\txxx_hidden_SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:\"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3\" json:\"security_requirement,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields                  protoimpl.UnknownFields\n\tsizeCache                      protoimpl.SizeCache\n}\n\nfunc (x *SecurityRequirement) Reset() {\n\t*x = SecurityRequirement{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[16]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityRequirement) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityRequirement) ProtoMessage() {}\n\nfunc (x *SecurityRequirement) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[16]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequirement_SecurityRequirementValue {\n\tif x != nil {\n\t\treturn x.xxx_hidden_SecurityRequirement\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityRequirement) SetSecurityRequirement(v map[string]*SecurityRequirement_SecurityRequirementValue) {\n\tx.xxx_hidden_SecurityRequirement = v\n}\n\ntype SecurityRequirement_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Each name must correspond to a security scheme which is declared in\n\t// the Security Definitions. If the security scheme is of type \"oauth2\",\n\t// then the value is a list of scope names required for the execution.\n\t// For other security scheme types, the array MUST be empty.\n\tSecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue\n}\n\nfunc (b0 SecurityRequirement_builder) Build() *SecurityRequirement {\n\tm0 := &SecurityRequirement{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_SecurityRequirement = b.SecurityRequirement\n\treturn m0\n}\n\n// `Scopes` is a representation of OpenAPI v2 specification's Scopes object.\n//\n// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#scopesObject\n//\n// Lists the available scopes for an OAuth2 security scheme.\ntype Scopes struct {\n\tstate            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Scope map[string]string      `protobuf:\"bytes,1,rep,name=scope,proto3\" json:\"scope,omitempty\" protobuf_key:\"bytes,1,opt,name=key\" protobuf_val:\"bytes,2,opt,name=value\"`\n\tunknownFields    protoimpl.UnknownFields\n\tsizeCache        protoimpl.SizeCache\n}\n\nfunc (x *Scopes) Reset() {\n\t*x = Scopes{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[17]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Scopes) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Scopes) ProtoMessage() {}\n\nfunc (x *Scopes) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[17]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *Scopes) GetScope() map[string]string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Scope\n\t}\n\treturn nil\n}\n\nfunc (x *Scopes) SetScope(v map[string]string) {\n\tx.xxx_hidden_Scope = v\n}\n\ntype Scopes_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Maps between a name of a scope to a short description of it (as the value\n\t// of the property).\n\tScope map[string]string\n}\n\nfunc (b0 Scopes_builder) Build() *Scopes {\n\tm0 := &Scopes{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Scope = b.Scope\n\treturn m0\n}\n\n// 'FieldConfiguration' provides additional field level properties used when generating the OpenAPI v2 file.\n// These properties are not defined by OpenAPIv2, but they are used to control the generation.\ntype JSONSchema_FieldConfiguration struct {\n\tstate                    protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_PathParamName string                 `protobuf:\"bytes,47,opt,name=path_param_name,json=pathParamName,proto3\" json:\"path_param_name,omitempty\"`\n\txxx_hidden_Deprecated    bool                   `protobuf:\"varint,49,opt,name=deprecated,proto3\" json:\"deprecated,omitempty\"`\n\tunknownFields            protoimpl.UnknownFields\n\tsizeCache                protoimpl.SizeCache\n}\n\nfunc (x *JSONSchema_FieldConfiguration) Reset() {\n\t*x = JSONSchema_FieldConfiguration{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *JSONSchema_FieldConfiguration) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*JSONSchema_FieldConfiguration) ProtoMessage() {}\n\nfunc (x *JSONSchema_FieldConfiguration) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *JSONSchema_FieldConfiguration) GetPathParamName() string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_PathParamName\n\t}\n\treturn \"\"\n}\n\nfunc (x *JSONSchema_FieldConfiguration) GetDeprecated() bool {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Deprecated\n\t}\n\treturn false\n}\n\nfunc (x *JSONSchema_FieldConfiguration) SetPathParamName(v string) {\n\tx.xxx_hidden_PathParamName = v\n}\n\nfunc (x *JSONSchema_FieldConfiguration) SetDeprecated(v bool) {\n\tx.xxx_hidden_Deprecated = v\n}\n\ntype JSONSchema_FieldConfiguration_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\t// Alternative parameter name when used as path parameter. If set, this will\n\t// be used as the complete parameter name when this field is used as a path\n\t// parameter. Use this to avoid having auto generated path parameter names\n\t// for overlapping paths.\n\tPathParamName string\n\t// Declares this field to be deprecated. Allows for the generated OpenAPI\n\t// parameter to be marked as deprecated without affecting the proto field.\n\tDeprecated bool\n}\n\nfunc (b0 JSONSchema_FieldConfiguration_builder) Build() *JSONSchema_FieldConfiguration {\n\tm0 := &JSONSchema_FieldConfiguration{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_PathParamName = b.PathParamName\n\tx.xxx_hidden_Deprecated = b.Deprecated\n\treturn m0\n}\n\n// If the security scheme is of type \"oauth2\", then the value is a list of\n// scope names required for the execution. For other security scheme types,\n// the array MUST be empty.\ntype SecurityRequirement_SecurityRequirementValue struct {\n\tstate            protoimpl.MessageState `protogen:\"opaque.v1\"`\n\txxx_hidden_Scope []string               `protobuf:\"bytes,1,rep,name=scope,proto3\" json:\"scope,omitempty\"`\n\tunknownFields    protoimpl.UnknownFields\n\tsizeCache        protoimpl.SizeCache\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) Reset() {\n\t*x = SecurityRequirement_SecurityRequirementValue{}\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[32]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message {\n\tmi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[32]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) GetScope() []string {\n\tif x != nil {\n\t\treturn x.xxx_hidden_Scope\n\t}\n\treturn nil\n}\n\nfunc (x *SecurityRequirement_SecurityRequirementValue) SetScope(v []string) {\n\tx.xxx_hidden_Scope = v\n}\n\ntype SecurityRequirement_SecurityRequirementValue_builder struct {\n\t_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.\n\n\tScope []string\n}\n\nfunc (b0 SecurityRequirement_SecurityRequirementValue_builder) Build() *SecurityRequirement_SecurityRequirementValue {\n\tm0 := &SecurityRequirement_SecurityRequirementValue{}\n\tb, x := &b0, m0\n\t_, _ = b, x\n\tx.xxx_hidden_Scope = b.Scope\n\treturn m0\n}\n\nvar File_protoc_gen_openapiv2_options_openapiv2_proto protoreflect.FileDescriptor\n\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{\n\t0x0a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63,\n\t0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb3, 0x08, 0x0a, 0x07, 0x53, 0x77, 0x61, 0x67,\n\t0x67, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x12, 0x43, 0x0a,\n\t0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e,\n\t0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70,\n\t0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x73, 0x65, 0x50,\n\t0x61, 0x74, 0x68, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x05,\n\t0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73,\n\t0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03,\n\t0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08,\n\t0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,\n\t0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09,\n\t0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x14, 0x73, 0x65, 0x63,\n\t0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69,\n\t0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,\n\t0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x08,\n\t0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69,\n\t0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72,\n\t0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08,\n\t0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73,\n\t0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x65, 0x0a, 0x0d,\n\t0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x0e, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44,\n\t0x6f, 0x63, 0x73, 0x12, 0x62, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,\n\t0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65,\n\t0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f,\n\t0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52,\n\t0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78,\n\t0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xd6, 0x07,\n\t0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74,\n\t0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,\n\t0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73,\n\t0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,\n\t0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65,\n\t0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45,\n\t0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f,\n\t0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,\n\t0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65,\n\t0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65,\n\t0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20,\n\t0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x61, 0x0a,\n\t0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b,\n\t0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61,\n\t0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65,\n\t0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73,\n\t0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28,\n\t0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63,\n\t0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a,\n\t0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28,\n\t0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x5a, 0x0a,\n\t0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75,\n\t0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52,\n\t0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,\n\t0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e,\n\t0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12,\n\t0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61,\n\t0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,\n\t0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,\n\t0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f,\n\t0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,\n\t0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c,\n\t0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,\n\t0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0x62, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,\n\t0x74, 0x65, 0x72, 0x73, 0x12, 0x54, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18,\n\t0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,\n\t0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0xa3, 0x02, 0x0a, 0x0f, 0x48,\n\t0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x12,\n\t0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,\n\t0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01,\n\t0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x48,\n\t0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x54,\n\t0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72,\n\t0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61,\n\t0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20,\n\t0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0x45, 0x0a,\n\t0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,\n\t0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a,\n\t0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e,\n\t0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45,\n\t0x41, 0x4e, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08,\n\t0x22, 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64,\n\t0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a,\n\t0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70,\n\t0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66,\n\t0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61,\n\t0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0d,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, 0x08,\n\t0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a,\n\t0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10,\n\t0x0b, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08,\n\t0x0e, 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a,\n\t0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, 0x08,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,\n\t0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,\n\t0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63,\n\t0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73,\n\t0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,\n\t0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64,\n\t0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,\n\t0x73, 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x12, 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05,\n\t0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,\n\t0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e,\n\t0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45,\n\t0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, 0x66,\n\t0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,\n\t0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,\n\t0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x72,\n\t0x6d, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76,\n\t0x69, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63,\n\t0x74, 0x12, 0x4c, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65,\n\t0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c,\n\t0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12,\n\t0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45,\n\t0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a,\n\t0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78,\n\t0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04,\n\t0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,\n\t0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,\n\t0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65,\n\t0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, 0x78, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x61, 0x12, 0x56, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x6a,\n\t0x73, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73,\n\t0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12,\n\t0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01,\n\t0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a, 0x0d,\n\t0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44,\n\t0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, 0x08,\n\t0x04, 0x10, 0x05, 0x22, 0xe8, 0x03, 0x0a, 0x0a, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x14,\n\t0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,\n\t0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,\n\t0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,\n\t0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20,\n\t0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a,\n\t0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x06,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,\n\t0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18,\n\t0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x10,\n\t0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66,\n\t0x12, 0x65, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09,\n\t0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,\n\t0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65,\n\t0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74,\n\t0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e,\n\t0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,\n\t0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7,\n\t0x0a, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a,\n\t0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12,\n\t0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,\n\t0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63,\n\t0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75,\n\t0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,\n\t0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08,\n\t0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18,\n\t0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74,\n\t0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d,\n\t0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78,\n\t0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69,\n\t0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65,\n\t0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,\n\t0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d,\n\t0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28,\n\t0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78,\n\t0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18,\n\t0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65,\n\t0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c,\n\t0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78,\n\t0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65,\n\t0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c,\n\t0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,\n\t0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12,\n\t0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01,\n\t0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09,\n\t0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52,\n\t0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69,\n\t0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52,\n\t0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e,\n\t0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x18,\n\t0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,\n\t0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65,\n\t0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x69, 0x6e,\n\t0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,\n\t0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65,\n\t0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18,\n\t0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x5f, 0x0a, 0x04,\n\t0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x4b, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,\n\t0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70,\n\t0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,\n\t0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66,\n\t0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x2e, 0x20,\n\t0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x7a, 0x0a, 0x13, 0x66, 0x69, 0x65,\n\t0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,\n\t0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46,\n\t0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,\n\t0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f,\n\t0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,\n\t0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5c, 0x0a, 0x12,\n\t0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d,\n\t0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x74,\n\t0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65,\n\t0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,\n\t0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78,\n\t0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53,\n\t0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,\n\t0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59,\n\t0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12,\n\t0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04,\n\t0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52,\n\t0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a,\n\t0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02,\n\t0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12,\n\t0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04,\n\t0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e,\n\t0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a,\n\t0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0xd9, 0x02, 0x0a, 0x03, 0x54, 0x61, 0x67,\n\t0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,\n\t0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,\n\t0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,\n\t0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x5e, 0x0a,\n\t0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e,\n\t0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61,\n\t0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a,\n\t0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,\n\t0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,\n\t0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x08,\n\t0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69,\n\t0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72,\n\t0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53,\n\t0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65,\n\t0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69,\n\t0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67,\n\t0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74,\n\t0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68,\n\t0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff,\n\t0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,\n\t0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70,\n\t0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75,\n\t0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52,\n\t0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,\n\t0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63,\n\t0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,\n\t0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, 0x69,\n\t0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, 0x6f,\n\t0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65,\n\t0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, 0x0a,\n\t0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75,\n\t0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,\n\t0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f,\n\t0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74,\n\t0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65,\n\t0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70,\n\t0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,\n\t0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e,\n\t0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f,\n\t0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d,\n\t0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a,\n\t0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,\n\t0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c,\n\t0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e,\n\t0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x10,\n\t0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02,\n\t0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10,\n\t0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, 0x4e,\n\t0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, 0x55,\n\t0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x44,\n\t0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x0c,\n\t0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11,\n\t0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10,\n\t0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f,\n\t0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, 0x50,\n\t0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c,\n\t0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04,\n\t0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71,\n\t0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, 0x63,\n\t0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e,\n\t0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65,\n\t0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69,\n\t0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75,\n\t0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79,\n\t0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72,\n\t0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,\n\t0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,\n\t0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75,\n\t0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45,\n\t0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f,\n\t0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,\n\t0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72,\n\t0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65,\n\t0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, 0x63,\n\t0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70,\n\t0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,\n\t0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, 0x70,\n\t0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,\n\t0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07,\n\t0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54,\n\t0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, 0x06,\n\t0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, 0x42,\n\t0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72,\n\t0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70,\n\t0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,\n\t0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x33,\n}\n\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 6)\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 35)\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []any{\n\t(Scheme)(0),                           // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme\n\t(HeaderParameter_Type)(0),             // 1: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.Type\n\t(JSONSchema_JSONSchemaSimpleTypes)(0), // 2: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes\n\t(SecurityScheme_Type)(0),              // 3: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type\n\t(SecurityScheme_In)(0),                // 4: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In\n\t(SecurityScheme_Flow)(0),              // 5: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow\n\t(*Swagger)(nil),                       // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger\n\t(*Operation)(nil),                     // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation\n\t(*Parameters)(nil),                    // 8: grpc.gateway.protoc_gen_openapiv2.options.Parameters\n\t(*HeaderParameter)(nil),               // 9: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter\n\t(*Header)(nil),                        // 10: grpc.gateway.protoc_gen_openapiv2.options.Header\n\t(*Response)(nil),                      // 11: grpc.gateway.protoc_gen_openapiv2.options.Response\n\t(*Info)(nil),                          // 12: grpc.gateway.protoc_gen_openapiv2.options.Info\n\t(*Contact)(nil),                       // 13: grpc.gateway.protoc_gen_openapiv2.options.Contact\n\t(*License)(nil),                       // 14: grpc.gateway.protoc_gen_openapiv2.options.License\n\t(*ExternalDocumentation)(nil),         // 15: grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t(*Schema)(nil),                        // 16: grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t(*EnumSchema)(nil),                    // 17: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema\n\t(*JSONSchema)(nil),                    // 18: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n\t(*Tag)(nil),                           // 19: grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t(*SecurityDefinitions)(nil),           // 20: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions\n\t(*SecurityScheme)(nil),                // 21: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme\n\t(*SecurityRequirement)(nil),           // 22: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement\n\t(*Scopes)(nil),                        // 23: grpc.gateway.protoc_gen_openapiv2.options.Scopes\n\tnil,                                   // 24: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry\n\tnil,                                   // 25: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry\n\tnil,                                   // 26: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry\n\tnil,                                   // 27: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry\n\tnil,                                   // 28: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry\n\tnil,                                   // 29: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry\n\tnil,                                   // 30: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry\n\tnil,                                   // 31: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry\n\tnil,                                   // 32: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.ExtensionsEntry\n\t(*JSONSchema_FieldConfiguration)(nil), // 33: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration\n\tnil,                                   // 34: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry\n\tnil,                                   // 35: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry\n\tnil,                                   // 36: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry\n\tnil,                                   // 37: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry\n\t(*SecurityRequirement_SecurityRequirementValue)(nil), // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue\n\tnil,                    // 39: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry\n\tnil,                    // 40: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry\n\t(*structpb.Value)(nil), // 41: google.protobuf.Value\n}\nvar file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{\n\t12, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info\n\t0,  // 1: grpc.gateway.protoc_gen_openapiv2.options.Swagger.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme\n\t24, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry\n\t20, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions\n\t22, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement\n\t19, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.tags:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag\n\t15, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t25, // 7: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry\n\t15, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t26, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry\n\t0,  // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme\n\t22, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement\n\t27, // 12: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry\n\t8,  // 13: grpc.gateway.protoc_gen_openapiv2.options.Operation.parameters:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Parameters\n\t9,  // 14: grpc.gateway.protoc_gen_openapiv2.options.Parameters.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter\n\t1,  // 15: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.Type\n\t16, // 16: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema\n\t28, // 17: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry\n\t29, // 18: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry\n\t30, // 19: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry\n\t13, // 20: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact\n\t14, // 21: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License\n\t31, // 22: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry\n\t18, // 23: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema\n\t15, // 24: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t15, // 25: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t32, // 26: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.ExtensionsEntry\n\t2,  // 27: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes\n\t33, // 28: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration\n\t34, // 29: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry\n\t15, // 30: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation\n\t35, // 31: grpc.gateway.protoc_gen_openapiv2.options.Tag.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry\n\t36, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry\n\t3,  // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type\n\t4,  // 34: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In\n\t5,  // 35: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow\n\t23, // 36: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes\n\t37, // 37: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry\n\t39, // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry\n\t40, // 39: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry\n\t11, // 40: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response\n\t41, // 41: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t11, // 42: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response\n\t41, // 43: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t10, // 44: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header\n\t41, // 45: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 46: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 47: grpc.gateway.protoc_gen_openapiv2.options.EnumSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 48: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t41, // 49: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t21, // 50: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme\n\t41, // 51: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value\n\t38, // 52: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue\n\t53, // [53:53] is the sub-list for method output_type\n\t53, // [53:53] is the sub-list for method input_type\n\t53, // [53:53] is the sub-list for extension type_name\n\t53, // [53:53] is the sub-list for extension extendee\n\t0,  // [0:53] is the sub-list for field type_name\n}\n\nfunc init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() }\nfunc file_protoc_gen_openapiv2_options_openapiv2_proto_init() {\n\tif File_protoc_gen_openapiv2_options_openapiv2_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc,\n\t\t\tNumEnums:      6,\n\t\t\tNumMessages:   35,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes,\n\t\tDependencyIndexes: file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs,\n\t\tEnumInfos:         file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes,\n\t\tMessageInfos:      file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes,\n\t}.Build()\n\tFile_protoc_gen_openapiv2_options_openapiv2_proto = out.File\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = nil\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = nil\n\tfile_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "renovate.json",
    "content": "{\n    \"extends\": [\n        \"config:base\",\n        \"helpers:pinGitHubActionDigests\"\n    ],\n    \"baseBranches\": [\n        \"main\"\n    ],\n    \"postUpdateOptions\": [\n        \"gomodTidy\"\n    ],\n    \"packageRules\": [\n        {\n            \"updateTypes\": [\n                \"minor\",\n                \"patch\",\n                \"pin\",\n                \"digest\"\n            ],\n            \"automerge\": true\n        },\n        {\n            \"baseBranchList\": [\n                \"main\"\n            ],\n            \"packageNames\": [\n                \"github.com/golang/protobuf\",\n                \"google.golang.org/protobuf\"\n            ],\n            \"groupName\": \"golang/protobuf\"\n        },\n        {\n            \"packagePatterns\": [\n                \"jekyll.*\",\n                \"github-pages\"\n            ],\n            \"enabled\": false\n        },\n        {\n            \"matchManagers\": [\n                \"github-actions\"\n            ],\n            \"matchPackageNames\": [\n                \"slsa-framework/slsa-github-generator\"\n            ],\n            \"pinDigests\": false\n        }\n    ]\n}\n"
  },
  {
    "path": "repositories.bzl",
    "content": "load(\"@bazel_gazelle//:deps.bzl\", \"go_repository\")\n\ndef go_repositories():\n    go_repository(\n        name = \"co_honnef_go_tools\",\n        importpath = \"honnef.co/go/tools\",\n        sum = \"h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs=\",\n        version = \"v0.0.0-20190523083050-ea95bdfd59fc\",\n    )\n    go_repository(\n        name = \"com_github_alecthomas_template\",\n        importpath = \"github.com/alecthomas/template\",\n        sum = \"h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=\",\n        version = \"v0.0.0-20160405071501-a0175ee3bccc\",\n    )\n    go_repository(\n        name = \"com_github_alecthomas_units\",\n        importpath = \"github.com/alecthomas/units\",\n        sum = \"h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=\",\n        version = \"v0.0.0-20151022065526-2efee857e7cf\",\n    )\n    go_repository(\n        name = \"com_github_antihax_optional\",\n        importpath = \"github.com/antihax/optional\",\n        sum = \"h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_armon_circbuf\",\n        importpath = \"github.com/armon/circbuf\",\n        sum = \"h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=\",\n        version = \"v0.0.0-20150827004946-bbbad097214e\",\n    )\n    go_repository(\n        name = \"com_github_armon_go_metrics\",\n        importpath = \"github.com/armon/go-metrics\",\n        sum = \"h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=\",\n        version = \"v0.0.0-20180917152333-f0300d1749da\",\n    )\n    go_repository(\n        name = \"com_github_armon_go_radix\",\n        importpath = \"github.com/armon/go-radix\",\n        sum = \"h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to=\",\n        version = \"v0.0.0-20180808171621-7fddfc383310\",\n    )\n    go_repository(\n        name = \"com_github_beorn7_perks\",\n        importpath = \"github.com/beorn7/perks\",\n        sum = \"h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_bgentry_go_netrc\",\n        importpath = \"github.com/bgentry/go-netrc\",\n        sum = \"h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=\",\n        version = \"v0.0.0-20140422174119-9fd32a8b3d3d\",\n    )\n    go_repository(\n        name = \"com_github_bgentry_speakeasy\",\n        importpath = \"github.com/bgentry/speakeasy\",\n        sum = \"h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=\",\n        version = \"v0.1.0\",\n    )\n    go_repository(\n        name = \"com_github_bketelsen_crypt\",\n        importpath = \"github.com/bketelsen/crypt\",\n        sum = \"h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc=\",\n        version = \"v0.0.3-0.20200106085610-5cbc8cc4026c\",\n    )\n    go_repository(\n        name = \"com_github_bufbuild_buf\",\n        importpath = \"github.com/bufbuild/buf\",\n        sum = \"h1:11zJVA0D4uJVGOC9h+oOVHrKKoBgMYIqJJ0d1Xt6oeQ=\",\n        version = \"v0.37.0\",\n    )\n\n    go_repository(\n        name = \"com_github_burntsushi_toml\",\n        importpath = \"github.com/BurntSushi/toml\",\n        sum = \"h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=\",\n        version = \"v0.3.1\",\n    )\n\n    go_repository(\n        name = \"com_github_burntsushi_xgb\",\n        importpath = \"github.com/BurntSushi/xgb\",\n        sum = \"h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc=\",\n        version = \"v0.0.0-20160522181843-27f122750802\",\n    )\n    go_repository(\n        name = \"com_github_census_instrumentation_opencensus_proto\",\n        importpath = \"github.com/census-instrumentation/opencensus-proto\",\n        sum = \"h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=\",\n        version = \"v0.4.1\",\n    )\n    go_repository(\n        name = \"com_github_cespare_xxhash\",\n        importpath = \"github.com/cespare/xxhash\",\n        sum = \"h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=\",\n        version = \"v1.1.0\",\n    )\n    go_repository(\n        name = \"com_github_cespare_xxhash_v2\",\n        importpath = \"github.com/cespare/xxhash/v2\",\n        sum = \"h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\",\n        version = \"v2.3.0\",\n    )\n\n    go_repository(\n        name = \"com_github_chzyer_logex\",\n        importpath = \"github.com/chzyer/logex\",\n        sum = \"h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=\",\n        version = \"v1.1.10\",\n    )\n    go_repository(\n        name = \"com_github_chzyer_readline\",\n        importpath = \"github.com/chzyer/readline\",\n        sum = \"h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=\",\n        version = \"v0.0.0-20180603132655-2972be24d48e\",\n    )\n    go_repository(\n        name = \"com_github_chzyer_test\",\n        importpath = \"github.com/chzyer/test\",\n        sum = \"h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=\",\n        version = \"v0.0.0-20180213035817-a1ea475d72b1\",\n    )\n    go_repository(\n        name = \"com_github_client9_misspell\",\n        importpath = \"github.com/client9/misspell\",\n        sum = \"h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=\",\n        version = \"v0.3.4\",\n    )\n    go_repository(\n        name = \"com_github_cncf_udpa_go\",\n        importpath = \"github.com/cncf/udpa/go\",\n        sum = \"h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk=\",\n        version = \"v0.0.0-20220112060539-c52dc94e7fbe\",\n    )\n    go_repository(\n        name = \"com_github_cncf_xds_go\",\n        importpath = \"github.com/cncf/xds/go\",\n        sum = \"h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w=\",\n        version = \"v0.0.0-20251210132809-ee656c7534f5\",\n    )\n\n    go_repository(\n        name = \"com_github_coreos_bbolt\",\n        importpath = \"github.com/coreos/bbolt\",\n        sum = \"h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s=\",\n        version = \"v1.3.2\",\n    )\n    go_repository(\n        name = \"com_github_coreos_etcd\",\n        importpath = \"github.com/coreos/etcd\",\n        sum = \"h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ=\",\n        version = \"v3.3.13+incompatible\",\n    )\n    go_repository(\n        name = \"com_github_coreos_go_semver\",\n        importpath = \"github.com/coreos/go-semver\",\n        sum = \"h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=\",\n        version = \"v0.3.0\",\n    )\n    go_repository(\n        name = \"com_github_coreos_go_systemd\",\n        importpath = \"github.com/coreos/go-systemd\",\n        sum = \"h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=\",\n        version = \"v0.0.0-20190321100706-95778dfbb74e\",\n    )\n    go_repository(\n        name = \"com_github_coreos_pkg\",\n        importpath = \"github.com/coreos/pkg\",\n        sum = \"h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=\",\n        version = \"v0.0.0-20180928190104-399ea9e2e55f\",\n    )\n    go_repository(\n        name = \"com_github_cpuguy83_go_md2man_v2\",\n        importpath = \"github.com/cpuguy83/go-md2man/v2\",\n        sum = \"h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=\",\n        version = \"v2.0.0\",\n    )\n    go_repository(\n        name = \"com_github_creack_pty\",\n        importpath = \"github.com/creack/pty\",\n        sum = \"h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w=\",\n        version = \"v1.1.9\",\n    )\n\n    go_repository(\n        name = \"com_github_davecgh_go_spew\",\n        importpath = \"github.com/davecgh/go-spew\",\n        sum = \"h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=\",\n        version = \"v1.1.0\",\n    )\n    go_repository(\n        name = \"com_github_dgrijalva_jwt_go\",\n        importpath = \"github.com/dgrijalva/jwt-go\",\n        sum = \"h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=\",\n        version = \"v3.2.0+incompatible\",\n    )\n    go_repository(\n        name = \"com_github_dgryski_go_sip13\",\n        importpath = \"github.com/dgryski/go-sip13\",\n        sum = \"h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4=\",\n        version = \"v0.0.0-20181026042036-e10d5fee7954\",\n    )\n    go_repository(\n        name = \"com_github_envoyproxy_go_control_plane\",\n        importpath = \"github.com/envoyproxy/go-control-plane\",\n        sum = \"h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=\",\n        version = \"v0.14.0\",\n    )\n    go_repository(\n        name = \"com_github_envoyproxy_go_control_plane_envoy\",\n        importpath = \"github.com/envoyproxy/go-control-plane/envoy\",\n        sum = \"h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g=\",\n        version = \"v1.36.0\",\n    )\n    go_repository(\n        name = \"com_github_envoyproxy_go_control_plane_ratelimit\",\n        importpath = \"github.com/envoyproxy/go-control-plane/ratelimit\",\n        sum = \"h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI=\",\n        version = \"v0.1.0\",\n    )\n    go_repository(\n        name = \"com_github_envoyproxy_protoc_gen_validate\",\n        importpath = \"github.com/envoyproxy/protoc-gen-validate\",\n        sum = \"h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4=\",\n        version = \"v1.3.0\",\n    )\n    go_repository(\n        name = \"com_github_fatih_color\",\n        importpath = \"github.com/fatih/color\",\n        sum = \"h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=\",\n        version = \"v1.7.0\",\n    )\n    go_repository(\n        name = \"com_github_fsnotify_fsnotify\",\n        importpath = \"github.com/fsnotify/fsnotify\",\n        sum = \"h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=\",\n        version = \"v1.4.7\",\n    )\n\n    go_repository(\n        name = \"com_github_ghodss_yaml\",\n        importpath = \"github.com/ghodss/yaml\",\n        sum = \"h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=\",\n        version = \"v1.0.0\",\n    )\n\n    go_repository(\n        name = \"com_github_go_gl_glfw\",\n        importpath = \"github.com/go-gl/glfw\",\n        sum = \"h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=\",\n        version = \"v0.0.0-20190409004039-e6da0acd62b1\",\n    )\n    go_repository(\n        name = \"com_github_go_gl_glfw_v3_3_glfw\",\n        importpath = \"github.com/go-gl/glfw/v3.3/glfw\",\n        sum = \"h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I=\",\n        version = \"v0.0.0-20200222043503-6f7a984d4dc4\",\n    )\n    go_repository(\n        name = \"com_github_go_jose_go_jose_v4\",\n        importpath = \"github.com/go-jose/go-jose/v4\",\n        sum = \"h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs=\",\n        version = \"v4.1.3\",\n    )\n\n    go_repository(\n        name = \"com_github_go_kit_kit\",\n        importpath = \"github.com/go-kit/kit\",\n        sum = \"h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=\",\n        version = \"v0.8.0\",\n    )\n    go_repository(\n        name = \"com_github_go_logfmt_logfmt\",\n        importpath = \"github.com/go-logfmt/logfmt\",\n        sum = \"h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=\",\n        version = \"v0.4.0\",\n    )\n    go_repository(\n        name = \"com_github_go_logr_logr\",\n        importpath = \"github.com/go-logr/logr\",\n        sum = \"h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=\",\n        version = \"v1.4.3\",\n    )\n    go_repository(\n        name = \"com_github_go_logr_stdr\",\n        importpath = \"github.com/go-logr/stdr\",\n        sum = \"h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\",\n        version = \"v1.2.2\",\n    )\n\n    go_repository(\n        name = \"com_github_go_stack_stack\",\n        importpath = \"github.com/go-stack/stack\",\n        sum = \"h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=\",\n        version = \"v1.8.0\",\n    )\n    go_repository(\n        name = \"com_github_gofrs_flock\",\n        importpath = \"github.com/gofrs/flock\",\n        sum = \"h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY=\",\n        version = \"v0.8.0\",\n    )\n    go_repository(\n        name = \"com_github_gofrs_uuid\",\n        importpath = \"github.com/gofrs/uuid\",\n        sum = \"h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=\",\n        version = \"v4.0.0+incompatible\",\n    )\n    go_repository(\n        name = \"com_github_gogo_protobuf\",\n        importpath = \"github.com/gogo/protobuf\",\n        sum = \"h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=\",\n        version = \"v1.2.1\",\n    )\n    go_repository(\n        name = \"com_github_golang_glog\",\n        importpath = \"github.com/golang/glog\",\n        sum = \"h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I=\",\n        version = \"v1.2.5\",\n    )\n\n    go_repository(\n        name = \"com_github_golang_groupcache\",\n        importpath = \"github.com/golang/groupcache\",\n        sum = \"h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=\",\n        version = \"v0.0.0-20200121045136-8c9f03a8e57e\",\n    )\n    go_repository(\n        name = \"com_github_golang_mock\",\n        importpath = \"github.com/golang/mock\",\n        sum = \"h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=\",\n        version = \"v1.1.1\",\n    )\n    go_repository(\n        name = \"com_github_golang_protobuf\",\n        importpath = \"github.com/golang/protobuf\",\n        sum = \"h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=\",\n        version = \"v1.5.4\",\n    )\n\n    go_repository(\n        name = \"com_github_google_btree\",\n        importpath = \"github.com/google/btree\",\n        sum = \"h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_google_go_cmp\",\n        importpath = \"github.com/google/go-cmp\",\n        sum = \"h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\",\n        version = \"v0.7.0\",\n    )\n\n    go_repository(\n        name = \"com_github_google_martian\",\n        importpath = \"github.com/google/martian\",\n        sum = \"h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=\",\n        version = \"v2.1.0+incompatible\",\n    )\n    go_repository(\n        name = \"com_github_google_martian_v3\",\n        importpath = \"github.com/google/martian/v3\",\n        sum = \"h1:pMen7vLs8nvgEYhywH3KDWJIJTeEr2ULsVWHWYHQyBs=\",\n        version = \"v3.0.0\",\n    )\n    go_repository(\n        name = \"com_github_google_pprof\",\n        importpath = \"github.com/google/pprof\",\n        sum = \"h1:Ak8CrdlwwXwAZxzS66vgPt4U8yUZX7JwLvVR58FN5jM=\",\n        version = \"v0.0.0-20200708004538-1a94d8640e99\",\n    )\n    go_repository(\n        name = \"com_github_google_renameio\",\n        importpath = \"github.com/google/renameio\",\n        sum = \"h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=\",\n        version = \"v0.1.0\",\n    )\n    go_repository(\n        name = \"com_github_google_uuid\",\n        importpath = \"github.com/google/uuid\",\n        sum = \"h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\",\n        version = \"v1.6.0\",\n    )\n\n    go_repository(\n        name = \"com_github_googleapis_gax_go_v2\",\n        importpath = \"github.com/googleapis/gax-go/v2\",\n        sum = \"h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=\",\n        version = \"v2.0.5\",\n    )\n    go_repository(\n        name = \"com_github_googlecloudplatform_opentelemetry_operations_go_detectors_gcp\",\n        importpath = \"github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp\",\n        sum = \"h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c=\",\n        version = \"v1.30.0\",\n    )\n\n    go_repository(\n        name = \"com_github_gopherjs_gopherjs\",\n        importpath = \"github.com/gopherjs/gopherjs\",\n        sum = \"h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=\",\n        version = \"v0.0.0-20181017120253-0766667cb4d1\",\n    )\n    go_repository(\n        name = \"com_github_gordonklaus_ineffassign\",\n        importpath = \"github.com/gordonklaus/ineffassign\",\n        sum = \"h1:vc7Dmrk4JwS0ZPS6WZvWlwDflgDTA26jItmbSj83nug=\",\n        version = \"v0.0.0-20200309095847-7953dde2c7bf\",\n    )\n    go_repository(\n        name = \"com_github_gorilla_websocket\",\n        importpath = \"github.com/gorilla/websocket\",\n        sum = \"h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=\",\n        version = \"v1.4.2\",\n    )\n    go_repository(\n        name = \"com_github_grpc_ecosystem_go_grpc_middleware\",\n        importpath = \"github.com/grpc-ecosystem/go-grpc-middleware\",\n        sum = \"h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_grpc_ecosystem_go_grpc_prometheus\",\n        importpath = \"github.com/grpc-ecosystem/go-grpc-prometheus\",\n        sum = \"h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=\",\n        version = \"v1.2.0\",\n    )\n    go_repository(\n        name = \"com_github_grpc_ecosystem_grpc_gateway\",\n        importpath = \"github.com/grpc-ecosystem/grpc-gateway\",\n        sum = \"h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=\",\n        version = \"v1.16.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_consul_api\",\n        importpath = \"github.com/hashicorp/consul/api\",\n        sum = \"h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA=\",\n        version = \"v1.1.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_consul_sdk\",\n        importpath = \"github.com/hashicorp/consul/sdk\",\n        sum = \"h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY=\",\n        version = \"v0.1.1\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_errwrap\",\n        importpath = \"github.com/hashicorp/errwrap\",\n        sum = \"h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_cleanhttp\",\n        importpath = \"github.com/hashicorp/go-cleanhttp\",\n        sum = \"h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=\",\n        version = \"v0.5.1\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_immutable_radix\",\n        importpath = \"github.com/hashicorp/go-immutable-radix\",\n        sum = \"h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_msgpack\",\n        importpath = \"github.com/hashicorp/go-msgpack\",\n        sum = \"h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=\",\n        version = \"v0.5.3\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_multierror\",\n        importpath = \"github.com/hashicorp/go-multierror\",\n        sum = \"h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_net\",\n        importpath = \"github.com/hashicorp/go.net\",\n        sum = \"h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw=\",\n        version = \"v0.0.1\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_rootcerts\",\n        importpath = \"github.com/hashicorp/go-rootcerts\",\n        sum = \"h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_sockaddr\",\n        importpath = \"github.com/hashicorp/go-sockaddr\",\n        sum = \"h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_syslog\",\n        importpath = \"github.com/hashicorp/go-syslog\",\n        sum = \"h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_go_uuid\",\n        importpath = \"github.com/hashicorp/go-uuid\",\n        sum = \"h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=\",\n        version = \"v1.0.1\",\n    )\n\n    go_repository(\n        name = \"com_github_hashicorp_golang_lru\",\n        importpath = \"github.com/hashicorp/golang-lru\",\n        sum = \"h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=\",\n        version = \"v0.5.1\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_hcl\",\n        importpath = \"github.com/hashicorp/hcl\",\n        sum = \"h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_logutils\",\n        importpath = \"github.com/hashicorp/logutils\",\n        sum = \"h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_mdns\",\n        importpath = \"github.com/hashicorp/mdns\",\n        sum = \"h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_memberlist\",\n        importpath = \"github.com/hashicorp/memberlist\",\n        sum = \"h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M=\",\n        version = \"v0.1.3\",\n    )\n    go_repository(\n        name = \"com_github_hashicorp_serf\",\n        importpath = \"github.com/hashicorp/serf\",\n        sum = \"h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0=\",\n        version = \"v0.8.2\",\n    )\n\n    go_repository(\n        name = \"com_github_ianlancetaylor_demangle\",\n        importpath = \"github.com/ianlancetaylor/demangle\",\n        sum = \"h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c=\",\n        version = \"v0.0.0-20181102032728-5e5cf60278f6\",\n    )\n    go_repository(\n        name = \"com_github_inconshreveable_mousetrap\",\n        importpath = \"github.com/inconshreveable/mousetrap\",\n        sum = \"h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_jhump_protoreflect\",\n        importpath = \"github.com/jhump/protoreflect\",\n        sum = \"h1:z7Ciiz3Bz37zSd485fbiTW8ABafIasyOWZI0N9EUUdo=\",\n        version = \"v1.8.1\",\n    )\n    go_repository(\n        name = \"com_github_jonboulle_clockwork\",\n        importpath = \"github.com/jonboulle/clockwork\",\n        sum = \"h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=\",\n        version = \"v0.1.0\",\n    )\n    go_repository(\n        name = \"com_github_json_iterator_go\",\n        importpath = \"github.com/json-iterator/go\",\n        sum = \"h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=\",\n        version = \"v1.1.6\",\n    )\n\n    go_repository(\n        name = \"com_github_jstemmer_go_junit_report\",\n        importpath = \"github.com/jstemmer/go-junit-report\",\n        sum = \"h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=\",\n        version = \"v0.9.1\",\n    )\n    go_repository(\n        name = \"com_github_jtolds_gls\",\n        importpath = \"github.com/jtolds/gls\",\n        sum = \"h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=\",\n        version = \"v4.20.0+incompatible\",\n    )\n    go_repository(\n        name = \"com_github_julienschmidt_httprouter\",\n        importpath = \"github.com/julienschmidt/httprouter\",\n        sum = \"h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g=\",\n        version = \"v1.2.0\",\n    )\n    go_repository(\n        name = \"com_github_kisielk_errcheck\",\n        importpath = \"github.com/kisielk/errcheck\",\n        sum = \"h1:ZqfnKyx9KGpRcW04j5nnPDgRgoXUeLh2YFBeFzphcA0=\",\n        version = \"v1.1.0\",\n    )\n\n    go_repository(\n        name = \"com_github_kisielk_gotool\",\n        importpath = \"github.com/kisielk/gotool\",\n        sum = \"h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_klauspost_compress\",\n        importpath = \"github.com/klauspost/compress\",\n        sum = \"h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg=\",\n        version = \"v1.11.7\",\n    )\n    go_repository(\n        name = \"com_github_klauspost_pgzip\",\n        importpath = \"github.com/klauspost/pgzip\",\n        sum = \"h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=\",\n        version = \"v1.2.5\",\n    )\n    go_repository(\n        name = \"com_github_konsorten_go_windows_terminal_sequences\",\n        importpath = \"github.com/konsorten/go-windows-terminal-sequences\",\n        sum = \"h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=\",\n        version = \"v1.0.1\",\n    )\n    go_repository(\n        name = \"com_github_kr_logfmt\",\n        importpath = \"github.com/kr/logfmt\",\n        sum = \"h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=\",\n        version = \"v0.0.0-20140226030751-b84e30acd515\",\n    )\n    go_repository(\n        name = \"com_github_kr_pretty\",\n        importpath = \"github.com/kr/pretty\",\n        sum = \"h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\",\n        version = \"v0.3.1\",\n    )\n    go_repository(\n        name = \"com_github_kr_pty\",\n        importpath = \"github.com/kr/pty\",\n        sum = \"h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=\",\n        version = \"v1.1.1\",\n    )\n    go_repository(\n        name = \"com_github_kr_text\",\n        importpath = \"github.com/kr/text\",\n        sum = \"h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\",\n        version = \"v0.2.0\",\n    )\n    go_repository(\n        name = \"com_github_magiconair_properties\",\n        importpath = \"github.com/magiconair/properties\",\n        sum = \"h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=\",\n        version = \"v1.8.1\",\n    )\n    go_repository(\n        name = \"com_github_mattn_go_colorable\",\n        importpath = \"github.com/mattn/go-colorable\",\n        sum = \"h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=\",\n        version = \"v0.0.9\",\n    )\n    go_repository(\n        name = \"com_github_mattn_go_isatty\",\n        importpath = \"github.com/mattn/go-isatty\",\n        sum = \"h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=\",\n        version = \"v0.0.3\",\n    )\n    go_repository(\n        name = \"com_github_matttproud_golang_protobuf_extensions\",\n        importpath = \"github.com/matttproud/golang_protobuf_extensions\",\n        sum = \"h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=\",\n        version = \"v1.0.1\",\n    )\n    go_repository(\n        name = \"com_github_miekg_dns\",\n        importpath = \"github.com/miekg/dns\",\n        sum = \"h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=\",\n        version = \"v1.0.14\",\n    )\n    go_repository(\n        name = \"com_github_mitchellh_cli\",\n        importpath = \"github.com/mitchellh/cli\",\n        sum = \"h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_mitchellh_go_homedir\",\n        importpath = \"github.com/mitchellh/go-homedir\",\n        sum = \"h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=\",\n        version = \"v1.1.0\",\n    )\n    go_repository(\n        name = \"com_github_mitchellh_go_testing_interface\",\n        importpath = \"github.com/mitchellh/go-testing-interface\",\n        sum = \"h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_mitchellh_gox\",\n        importpath = \"github.com/mitchellh/gox\",\n        sum = \"h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc=\",\n        version = \"v0.4.0\",\n    )\n    go_repository(\n        name = \"com_github_mitchellh_iochan\",\n        importpath = \"github.com/mitchellh/iochan\",\n        sum = \"h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_mitchellh_mapstructure\",\n        importpath = \"github.com/mitchellh/mapstructure\",\n        sum = \"h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=\",\n        version = \"v1.1.2\",\n    )\n    go_repository(\n        name = \"com_github_modern_go_concurrent\",\n        importpath = \"github.com/modern-go/concurrent\",\n        sum = \"h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\",\n        version = \"v0.0.0-20180306012644-bacd9c7ef1dd\",\n    )\n    go_repository(\n        name = \"com_github_modern_go_reflect2\",\n        importpath = \"github.com/modern-go/reflect2\",\n        sum = \"h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=\",\n        version = \"v1.0.1\",\n    )\n    go_repository(\n        name = \"com_github_mwitkow_go_conntrack\",\n        importpath = \"github.com/mwitkow/go-conntrack\",\n        sum = \"h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc=\",\n        version = \"v0.0.0-20161129095857-cc309e4a2223\",\n    )\n    go_repository(\n        name = \"com_github_nishanths_predeclared\",\n        importpath = \"github.com/nishanths/predeclared\",\n        sum = \"h1:3f0nxAmdj/VoCGN/ijdMy7bj6SBagaqYg1B0hu8clMA=\",\n        version = \"v0.0.0-20200524104333-86fad755b4d3\",\n    )\n    go_repository(\n        name = \"com_github_oklog_ulid\",\n        importpath = \"github.com/oklog/ulid\",\n        sum = \"h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=\",\n        version = \"v1.3.1\",\n    )\n    go_repository(\n        name = \"com_github_oneofone_xxhash\",\n        importpath = \"github.com/OneOfOne/xxhash\",\n        sum = \"h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=\",\n        version = \"v1.2.2\",\n    )\n    go_repository(\n        name = \"com_github_pascaldekloe_goe\",\n        importpath = \"github.com/pascaldekloe/goe\",\n        sum = \"h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=\",\n        version = \"v0.0.0-20180627143212-57f6aae5913c\",\n    )\n    go_repository(\n        name = \"com_github_pelletier_go_toml\",\n        importpath = \"github.com/pelletier/go-toml\",\n        sum = \"h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=\",\n        version = \"v1.2.0\",\n    )\n    go_repository(\n        name = \"com_github_pkg_diff\",\n        importpath = \"github.com/pkg/diff\",\n        sum = \"h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=\",\n        version = \"v0.0.0-20210226163009-20ebb0f2a09e\",\n    )\n\n    go_repository(\n        name = \"com_github_pkg_errors\",\n        importpath = \"github.com/pkg/errors\",\n        sum = \"h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\",\n        version = \"v0.9.1\",\n    )\n    go_repository(\n        name = \"com_github_pkg_profile\",\n        importpath = \"github.com/pkg/profile\",\n        sum = \"h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug=\",\n        version = \"v1.5.0\",\n    )\n    go_repository(\n        name = \"com_github_planetscale_vtprotobuf\",\n        importpath = \"github.com/planetscale/vtprotobuf\",\n        sum = \"h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=\",\n        version = \"v0.6.1-0.20240319094008-0393e58bdf10\",\n    )\n\n    go_repository(\n        name = \"com_github_pmezard_go_difflib\",\n        importpath = \"github.com/pmezard/go-difflib\",\n        sum = \"h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_posener_complete\",\n        importpath = \"github.com/posener/complete\",\n        sum = \"h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w=\",\n        version = \"v1.1.1\",\n    )\n    go_repository(\n        name = \"com_github_prometheus_client_golang\",\n        importpath = \"github.com/prometheus/client_golang\",\n        sum = \"h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8=\",\n        version = \"v0.9.3\",\n    )\n\n    go_repository(\n        name = \"com_github_prometheus_client_model\",\n        importpath = \"github.com/prometheus/client_model\",\n        sum = \"h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=\",\n        version = \"v0.0.0-20190812154241-14fe0d1b01d4\",\n    )\n    go_repository(\n        name = \"com_github_prometheus_common\",\n        importpath = \"github.com/prometheus/common\",\n        sum = \"h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM=\",\n        version = \"v0.4.0\",\n    )\n    go_repository(\n        name = \"com_github_prometheus_procfs\",\n        importpath = \"github.com/prometheus/procfs\",\n        sum = \"h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY=\",\n        version = \"v0.0.0-20190507164030-5867b95ac084\",\n    )\n    go_repository(\n        name = \"com_github_prometheus_tsdb\",\n        importpath = \"github.com/prometheus/tsdb\",\n        sum = \"h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=\",\n        version = \"v0.7.1\",\n    )\n    go_repository(\n        name = \"com_github_rogpeppe_fastuuid\",\n        importpath = \"github.com/rogpeppe/fastuuid\",\n        sum = \"h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=\",\n        version = \"v1.2.0\",\n    )\n    go_repository(\n        name = \"com_github_rogpeppe_go_internal\",\n        importpath = \"github.com/rogpeppe/go-internal\",\n        sum = \"h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=\",\n        version = \"v1.9.0\",\n    )\n    go_repository(\n        name = \"com_github_russross_blackfriday_v2\",\n        importpath = \"github.com/russross/blackfriday/v2\",\n        sum = \"h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=\",\n        version = \"v2.0.1\",\n    )\n    go_repository(\n        name = \"com_github_ryanuber_columnize\",\n        importpath = \"github.com/ryanuber/columnize\",\n        sum = \"h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M=\",\n        version = \"v0.0.0-20160712163229-9b3edd62028f\",\n    )\n    go_repository(\n        name = \"com_github_sean_seed\",\n        importpath = \"github.com/sean-/seed\",\n        sum = \"h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=\",\n        version = \"v0.0.0-20170313163322-e2103e2c3529\",\n    )\n    go_repository(\n        name = \"com_github_shurcool_sanitized_anchor_name\",\n        importpath = \"github.com/shurcooL/sanitized_anchor_name\",\n        sum = \"h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_sirupsen_logrus\",\n        importpath = \"github.com/sirupsen/logrus\",\n        sum = \"h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=\",\n        version = \"v1.2.0\",\n    )\n    go_repository(\n        name = \"com_github_smartystreets_assertions\",\n        importpath = \"github.com/smartystreets/assertions\",\n        sum = \"h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=\",\n        version = \"v0.0.0-20180927180507-b2de0cb4f26d\",\n    )\n    go_repository(\n        name = \"com_github_smartystreets_goconvey\",\n        importpath = \"github.com/smartystreets/goconvey\",\n        sum = \"h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=\",\n        version = \"v1.6.4\",\n    )\n    go_repository(\n        name = \"com_github_soheilhy_cmux\",\n        importpath = \"github.com/soheilhy/cmux\",\n        sum = \"h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=\",\n        version = \"v0.1.4\",\n    )\n    go_repository(\n        name = \"com_github_spaolacci_murmur3\",\n        importpath = \"github.com/spaolacci/murmur3\",\n        sum = \"h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=\",\n        version = \"v0.0.0-20180118202830-f09979ecbc72\",\n    )\n    go_repository(\n        name = \"com_github_spf13_afero\",\n        importpath = \"github.com/spf13/afero\",\n        sum = \"h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=\",\n        version = \"v1.1.2\",\n    )\n    go_repository(\n        name = \"com_github_spf13_cast\",\n        importpath = \"github.com/spf13/cast\",\n        sum = \"h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=\",\n        version = \"v1.3.0\",\n    )\n    go_repository(\n        name = \"com_github_spf13_cobra\",\n        importpath = \"github.com/spf13/cobra\",\n        sum = \"h1:O63eWlXlvyw4YdsuatjRIU6emvJ2fqz+PTdMEoxIT2s=\",\n        version = \"v1.0.1-0.20201006035406-b97b5ead31f7\",\n    )\n    go_repository(\n        name = \"com_github_spf13_jwalterweatherman\",\n        importpath = \"github.com/spf13/jwalterweatherman\",\n        sum = \"h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"com_github_spf13_pflag\",\n        importpath = \"github.com/spf13/pflag\",\n        sum = \"h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=\",\n        version = \"v1.0.5\",\n    )\n    go_repository(\n        name = \"com_github_spf13_viper\",\n        importpath = \"github.com/spf13/viper\",\n        sum = \"h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=\",\n        version = \"v1.7.0\",\n    )\n    go_repository(\n        name = \"com_github_spiffe_go_spiffe_v2\",\n        importpath = \"github.com/spiffe/go-spiffe/v2\",\n        sum = \"h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo=\",\n        version = \"v2.6.0\",\n    )\n\n    go_repository(\n        name = \"com_github_stretchr_objx\",\n        importpath = \"github.com/stretchr/objx\",\n        sum = \"h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=\",\n        version = \"v0.1.0\",\n    )\n    go_repository(\n        name = \"com_github_stretchr_testify\",\n        importpath = \"github.com/stretchr/testify\",\n        sum = \"h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=\",\n        version = \"v1.7.0\",\n    )\n    go_repository(\n        name = \"com_github_subosito_gotenv\",\n        importpath = \"github.com/subosito/gotenv\",\n        sum = \"h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=\",\n        version = \"v1.2.0\",\n    )\n    go_repository(\n        name = \"com_github_tmc_grpc_websocket_proxy\",\n        importpath = \"github.com/tmc/grpc-websocket-proxy\",\n        sum = \"h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=\",\n        version = \"v0.0.0-20190109142713-0ad062ec5ee5\",\n    )\n    go_repository(\n        name = \"com_github_twitchtv_twirp\",\n        importpath = \"github.com/twitchtv/twirp\",\n        sum = \"h1:3fNSDoSPyq+fTrifIvGue9XM/tptzuhiGY83rxPVNUg=\",\n        version = \"v7.1.0+incompatible\",\n    )\n    go_repository(\n        name = \"com_github_xiang90_probing\",\n        importpath = \"github.com/xiang90/probing\",\n        sum = \"h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=\",\n        version = \"v0.0.0-20190116061207-43a291ad63a2\",\n    )\n    go_repository(\n        name = \"com_github_yuin_goldmark\",\n        importpath = \"github.com/yuin/goldmark\",\n        sum = \"h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=\",\n        version = \"v1.4.13\",\n    )\n    go_repository(\n        name = \"com_github_zeebo_errs\",\n        importpath = \"github.com/zeebo/errs\",\n        sum = \"h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM=\",\n        version = \"v1.4.0\",\n    )\n\n    go_repository(\n        name = \"com_google_cloud_go\",\n        importpath = \"cloud.google.com/go\",\n        sum = \"h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=\",\n        version = \"v0.112.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_accessapproval\",\n        importpath = \"cloud.google.com/go/accessapproval\",\n        sum = \"h1:uzmAMSgYcnlHa9X9YSQZ4Q1wlfl4NNkZyQgho1Z6p04=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_accesscontextmanager\",\n        importpath = \"cloud.google.com/go/accesscontextmanager\",\n        sum = \"h1:2GLNaNu9KRJhJBFTIVRoPwk6xE5mUDgD47abBq4Zp/I=\",\n        version = \"v1.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_aiplatform\",\n        importpath = \"cloud.google.com/go/aiplatform\",\n        sum = \"h1:0cSrii1ZeLr16MbBoocyy5KVnrSdiQ3KN/vtrTe7RqE=\",\n        version = \"v1.60.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_analytics\",\n        importpath = \"cloud.google.com/go/analytics\",\n        sum = \"h1:Q+y94XH84jM8SK8O7qiY/PJRexb6n7dRbQ6PiUa4YGM=\",\n        version = \"v0.23.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_apigateway\",\n        importpath = \"cloud.google.com/go/apigateway\",\n        sum = \"h1:sPXnpk+6TneKIrjCjcpX5YGsAKy3PTdpIchoj8/74OE=\",\n        version = \"v1.6.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_apigeeconnect\",\n        importpath = \"cloud.google.com/go/apigeeconnect\",\n        sum = \"h1:CrfIKv9Go3fh/QfQgisU3MeP90Ww7l/sVGmr3TpECo8=\",\n        version = \"v1.6.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_apigeeregistry\",\n        importpath = \"cloud.google.com/go/apigeeregistry\",\n        sum = \"h1:C+QU2K+DzDjk4g074ouwHQGkoff1h5OMQp6sblCVreQ=\",\n        version = \"v0.8.3\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_apikeys\",\n        importpath = \"cloud.google.com/go/apikeys\",\n        sum = \"h1:B9CdHFZTFjVti89tmyXXrO+7vSNo2jvZuHG8zD5trdQ=\",\n        version = \"v0.6.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_appengine\",\n        importpath = \"cloud.google.com/go/appengine\",\n        sum = \"h1:l2SviT44zWQiOv8bPoMBzW0vOcMO22iO0s+nVtVhdts=\",\n        version = \"v1.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_area120\",\n        importpath = \"cloud.google.com/go/area120\",\n        sum = \"h1:vTs08KPLN/iMzTbxpu5ciL06KcsrVPMjz4IwcQyZ4uY=\",\n        version = \"v0.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_artifactregistry\",\n        importpath = \"cloud.google.com/go/artifactregistry\",\n        sum = \"h1:W9sVlyb1VRcUf83w7aM3yMsnp4HS4PoyGqYQNG0O5lI=\",\n        version = \"v1.14.7\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_asset\",\n        importpath = \"cloud.google.com/go/asset\",\n        sum = \"h1:xgFnBP3luSbUcC9RWJvb3Zkt+y/wW6PKwPHr3ssnIP8=\",\n        version = \"v1.17.2\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_assuredworkloads\",\n        importpath = \"cloud.google.com/go/assuredworkloads\",\n        sum = \"h1:gCrN3IyvqY3cP0wh2h43d99CgH3G+WYs9CeuFVKChR8=\",\n        version = \"v1.11.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_automl\",\n        importpath = \"cloud.google.com/go/automl\",\n        sum = \"h1:ijiJy9sYWh75WrqImXsfWc1e3HR3iO+ef9fvW03Ig/4=\",\n        version = \"v1.13.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_baremetalsolution\",\n        importpath = \"cloud.google.com/go/baremetalsolution\",\n        sum = \"h1:LFydisRmS7hQk9P/YhekwuZGqb45TW4QavcrMToWo5A=\",\n        version = \"v1.2.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_batch\",\n        importpath = \"cloud.google.com/go/batch\",\n        sum = \"h1:2HK4JerwVaIcCh/lJiHwh6+uswPthiMMWhiSWLELayk=\",\n        version = \"v1.8.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_beyondcorp\",\n        importpath = \"cloud.google.com/go/beyondcorp\",\n        sum = \"h1:qs0J0O9Ol2h1yA0AU+r7l3hOCPzs2MjE1d6d/kaHIKo=\",\n        version = \"v1.0.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_bigquery\",\n        importpath = \"cloud.google.com/go/bigquery\",\n        sum = \"h1:CpT+/njKuKT3CEmswm6IbhNu9u35zt5dO4yPDLW+nG4=\",\n        version = \"v1.59.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_billing\",\n        importpath = \"cloud.google.com/go/billing\",\n        sum = \"h1:oWUEQvuC4JvtnqLZ35zgzdbuHt4Itbftvzbe6aEyFdE=\",\n        version = \"v1.18.2\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_binaryauthorization\",\n        importpath = \"cloud.google.com/go/binaryauthorization\",\n        sum = \"h1:1jcyh2uIUwSZkJ/JmL8kd5SUkL/Krbv8zmYLEbAz6kY=\",\n        version = \"v1.8.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_certificatemanager\",\n        importpath = \"cloud.google.com/go/certificatemanager\",\n        sum = \"h1:UMBr/twXvH3jcT5J5/YjRxf2tvwTYIfrpemTebe0txc=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_channel\",\n        importpath = \"cloud.google.com/go/channel\",\n        sum = \"h1:/omiBnyFjm4S1ETHoOmJbL7LH7Ljcei4rYG6Sj3hc80=\",\n        version = \"v1.17.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_cloudbuild\",\n        importpath = \"cloud.google.com/go/cloudbuild\",\n        sum = \"h1:ZB6oOmJo+MTov9n629fiCrO9YZPOg25FZvQ7gIHu5ng=\",\n        version = \"v1.15.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_clouddms\",\n        importpath = \"cloud.google.com/go/clouddms\",\n        sum = \"h1:Sr0Zo5EAcPQiCBgHWICg3VGkcdS/LLP1d9SR7qQBM/s=\",\n        version = \"v1.7.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_cloudtasks\",\n        importpath = \"cloud.google.com/go/cloudtasks\",\n        sum = \"h1:EUt1hIZ9bLv8Iz9yWaCrqgMnIU+Tdh0yXM1MMVGhjfE=\",\n        version = \"v1.12.6\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_compute\",\n        importpath = \"cloud.google.com/go/compute\",\n        sum = \"h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU=\",\n        version = \"v1.25.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_compute_metadata\",\n        importpath = \"cloud.google.com/go/compute/metadata\",\n        sum = \"h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=\",\n        version = \"v0.9.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_contactcenterinsights\",\n        importpath = \"cloud.google.com/go/contactcenterinsights\",\n        sum = \"h1:6Vs/YnDG5STGjlWMEjN/xtmft7MrOTOnOZYUZtGTx0w=\",\n        version = \"v1.13.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_container\",\n        importpath = \"cloud.google.com/go/container\",\n        sum = \"h1:MAaNH7VRNPWEhvqOypq2j+7ONJKrKzon4v9nS3nLZe0=\",\n        version = \"v1.31.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_containeranalysis\",\n        importpath = \"cloud.google.com/go/containeranalysis\",\n        sum = \"h1:doJ0M1ljS4hS0D2UbHywlHGwB7sQLNrt9vFk9Zyi7vY=\",\n        version = \"v0.11.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_datacatalog\",\n        importpath = \"cloud.google.com/go/datacatalog\",\n        sum = \"h1:A0vKYCQdxQuV4Pi0LL9p39Vwvg4jH5yYveMv50gU5Tw=\",\n        version = \"v1.19.3\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dataflow\",\n        importpath = \"cloud.google.com/go/dataflow\",\n        sum = \"h1:RYHtcPhmE664+F0Je46p+NvFbG8z//KCXp+uEqB4jZU=\",\n        version = \"v0.9.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dataform\",\n        importpath = \"cloud.google.com/go/dataform\",\n        sum = \"h1:5e4eqGrd0iDTCg4Q+VlAao5j2naKAA7xRurNtwmUknU=\",\n        version = \"v0.9.2\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_datafusion\",\n        importpath = \"cloud.google.com/go/datafusion\",\n        sum = \"h1:HQ/BUOP8OIGJxuztpYvNvlb+/U+/Bfs9SO8tQbh61fk=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_datalabeling\",\n        importpath = \"cloud.google.com/go/datalabeling\",\n        sum = \"h1:GpIFRdm0qIZNsxqURFJwHt0ZBJZ0nF/mUVEigR7PH/8=\",\n        version = \"v0.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dataplex\",\n        importpath = \"cloud.google.com/go/dataplex\",\n        sum = \"h1:fxIfdU8fxzR3clhOoNI7XFppvAmndxDu1AMH+qX9WKQ=\",\n        version = \"v1.14.2\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dataproc\",\n        importpath = \"cloud.google.com/go/dataproc\",\n        sum = \"h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU=\",\n        version = \"v1.12.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dataproc_v2\",\n        importpath = \"cloud.google.com/go/dataproc/v2\",\n        sum = \"h1:/u81Fd+BvCLp+xjctI1DiWVJn6cn9/s3Akc8xPH02yk=\",\n        version = \"v2.4.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dataqna\",\n        importpath = \"cloud.google.com/go/dataqna\",\n        sum = \"h1:9ybXs3nr9BzxSGC04SsvtuXaHY0qmJSLIpIAbZo9GqQ=\",\n        version = \"v0.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_datastore\",\n        importpath = \"cloud.google.com/go/datastore\",\n        sum = \"h1:0P9WcsQeTWjuD1H14JIY7XQscIPQ4Laje8ti96IC5vg=\",\n        version = \"v1.15.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_datastream\",\n        importpath = \"cloud.google.com/go/datastream\",\n        sum = \"h1:o1QDKMo/hk0FN7vhoUQURREuA0rgKmnYapB+1M+7Qz4=\",\n        version = \"v1.10.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_deploy\",\n        importpath = \"cloud.google.com/go/deploy\",\n        sum = \"h1:m27Ojwj03gvpJqCbodLYiVmE9x4/LrHGGMjzc0LBfM4=\",\n        version = \"v1.17.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dialogflow\",\n        importpath = \"cloud.google.com/go/dialogflow\",\n        sum = \"h1:KqG0oxGE71qo0lRVyAoeBozefCvsMfcDzDjoLYSY0F4=\",\n        version = \"v1.49.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_dlp\",\n        importpath = \"cloud.google.com/go/dlp\",\n        sum = \"h1:lTipOuJaSjlYnnotPMbEhKURLC6GzCMDDzVbJAEbmYM=\",\n        version = \"v1.11.2\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_documentai\",\n        importpath = \"cloud.google.com/go/documentai\",\n        sum = \"h1:lI62GMEEPO6vXJI9hj+G9WjOvnR0hEjvjokrnex4cxA=\",\n        version = \"v1.25.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_domains\",\n        importpath = \"cloud.google.com/go/domains\",\n        sum = \"h1:Mml/R6s3vQQvFPpi/9oX3O5dRirgjyJ8cksK8N19Y7g=\",\n        version = \"v0.9.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_edgecontainer\",\n        importpath = \"cloud.google.com/go/edgecontainer\",\n        sum = \"h1:tBY32km78ScpK2aOP84JoW/+wtpx5WluyPUSEE3270U=\",\n        version = \"v1.1.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_errorreporting\",\n        importpath = \"cloud.google.com/go/errorreporting\",\n        sum = \"h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0=\",\n        version = \"v0.3.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_essentialcontacts\",\n        importpath = \"cloud.google.com/go/essentialcontacts\",\n        sum = \"h1:13eHn5qBnsawxI7mIrv4jRIEmQ1xg0Ztqw5ZGqtUNfA=\",\n        version = \"v1.6.6\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_eventarc\",\n        importpath = \"cloud.google.com/go/eventarc\",\n        sum = \"h1:ORkd6/UV5FIdA8KZQDLNZYKS7BBOrj0p01DXPmT4tE4=\",\n        version = \"v1.13.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_filestore\",\n        importpath = \"cloud.google.com/go/filestore\",\n        sum = \"h1:X5G4y/vrUo1B8Nsz93qSWTMAcM8LXbGUldq33OdcdCw=\",\n        version = \"v1.8.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_firestore\",\n        importpath = \"cloud.google.com/go/firestore\",\n        sum = \"h1:8aLcKnMPoldYU3YHgu4t2exrKhLQkqaXAGqT0ljrFVw=\",\n        version = \"v1.14.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_functions\",\n        importpath = \"cloud.google.com/go/functions\",\n        sum = \"h1:IWVylmK5F6hJ3R5zaRW7jI5PrWhCvtBVU4axQLmXSo4=\",\n        version = \"v1.16.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_gaming\",\n        importpath = \"cloud.google.com/go/gaming\",\n        sum = \"h1:5qZmZEWzMf8GEFgm9NeC3bjFRpt7x4S6U7oLbxaf7N8=\",\n        version = \"v1.10.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_gkebackup\",\n        importpath = \"cloud.google.com/go/gkebackup\",\n        sum = \"h1:iuE8KNtTsPOc79qeWoNS8zOWoXPD9SAdOmwgxtlCmh8=\",\n        version = \"v1.3.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_gkeconnect\",\n        importpath = \"cloud.google.com/go/gkeconnect\",\n        sum = \"h1:17d+ZSSXKqG/RwZCq3oFMIWLPI8Zw3b8+a9/BEVlwH0=\",\n        version = \"v0.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_gkehub\",\n        importpath = \"cloud.google.com/go/gkehub\",\n        sum = \"h1:RboLNFzf9wEMSo7DrKVBlf+YhK/A/jrLN454L5Tz99Q=\",\n        version = \"v0.14.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_gkemulticloud\",\n        importpath = \"cloud.google.com/go/gkemulticloud\",\n        sum = \"h1:rsSZAGLhyjyE/bE2ToT5fqo1qSW7S+Ubsc9jFOcbhSI=\",\n        version = \"v1.1.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_gsuiteaddons\",\n        importpath = \"cloud.google.com/go/gsuiteaddons\",\n        sum = \"h1:CZEbaBwmbYdhFw21Fwbo+C35HMe36fTE0FBSR4KSfWg=\",\n        version = \"v1.6.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_iam\",\n        importpath = \"cloud.google.com/go/iam\",\n        sum = \"h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=\",\n        version = \"v1.1.6\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_iap\",\n        importpath = \"cloud.google.com/go/iap\",\n        sum = \"h1:94zirc2r4t6KzhAMW0R6Dme005eTP6yf7g6vN4IhRrA=\",\n        version = \"v1.9.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_ids\",\n        importpath = \"cloud.google.com/go/ids\",\n        sum = \"h1:xd4U7pgl3GHV+MABnv1BF4/Vy/zBF7CYC8XngkOLzag=\",\n        version = \"v1.4.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_iot\",\n        importpath = \"cloud.google.com/go/iot\",\n        sum = \"h1:munTeBlbqI33iuTYgXy7S8lW2TCgi5l1hA4roSIY+EE=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_kms\",\n        importpath = \"cloud.google.com/go/kms\",\n        sum = \"h1:7caV9K3yIxvlQPAcaFffhlT7d1qpxjB1wHBtjWa13SM=\",\n        version = \"v1.15.7\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_language\",\n        importpath = \"cloud.google.com/go/language\",\n        sum = \"h1:iaJZg6K4j/2PvZZVcjeO/btcWWIllVRBhuTFjGO4LXs=\",\n        version = \"v1.12.3\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_lifesciences\",\n        importpath = \"cloud.google.com/go/lifesciences\",\n        sum = \"h1:gXvN70m2p+4zgJFzaz6gMKaxTuF9WJ0USYoMLWAOm8g=\",\n        version = \"v0.9.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_logging\",\n        importpath = \"cloud.google.com/go/logging\",\n        sum = \"h1:iEIOXFO9EmSiTjDmfpbRjOxECO7R8C7b8IXUGOj7xZw=\",\n        version = \"v1.9.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_longrunning\",\n        importpath = \"cloud.google.com/go/longrunning\",\n        sum = \"h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg=\",\n        version = \"v0.5.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_managedidentities\",\n        importpath = \"cloud.google.com/go/managedidentities\",\n        sum = \"h1:+bpih1piZVLxla/XBqeSUzJBp8gv9plGHIMAI7DLpDM=\",\n        version = \"v1.6.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_maps\",\n        importpath = \"cloud.google.com/go/maps\",\n        sum = \"h1:EVCZAiDvog9So46460BGbCasPhi613exoaQbpilMVlk=\",\n        version = \"v1.6.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_mediatranslation\",\n        importpath = \"cloud.google.com/go/mediatranslation\",\n        sum = \"h1:c76KdIXljQHSCb/Cy47S8H4s05A4zbK3pAFGzwcczZo=\",\n        version = \"v0.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_memcache\",\n        importpath = \"cloud.google.com/go/memcache\",\n        sum = \"h1:yeDv5qxRedFosvpMSEswrqUsJM5OdWvssPHFliNFTc4=\",\n        version = \"v1.10.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_metastore\",\n        importpath = \"cloud.google.com/go/metastore\",\n        sum = \"h1:dR7vqWXlK6IYR8Wbu9mdFfwlVjodIBhd1JRrpZftTEg=\",\n        version = \"v1.13.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_monitoring\",\n        importpath = \"cloud.google.com/go/monitoring\",\n        sum = \"h1:NfkDLQDG2UR3WYZVQE8kwSbUIEyIqJUPl+aOQdFH1T4=\",\n        version = \"v1.18.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_networkconnectivity\",\n        importpath = \"cloud.google.com/go/networkconnectivity\",\n        sum = \"h1:GBfXFhLyPspnaBE3nI/BRjdhW8vcbpT9QjE/4kDCDdc=\",\n        version = \"v1.14.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_networkmanagement\",\n        importpath = \"cloud.google.com/go/networkmanagement\",\n        sum = \"h1:aLV5GcosBNmd6M8+a0ekB0XlLRexv4fvnJJrYnqeBcg=\",\n        version = \"v1.9.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_networksecurity\",\n        importpath = \"cloud.google.com/go/networksecurity\",\n        sum = \"h1:+caSxBTj0E8OYVh/5wElFdjEMO1S/rZtE1152Cepchc=\",\n        version = \"v0.9.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_notebooks\",\n        importpath = \"cloud.google.com/go/notebooks\",\n        sum = \"h1:FH48boYmrWVQ6k0Mx/WrnNafXncT5iSYxA8CNyWTgy0=\",\n        version = \"v1.11.3\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_optimization\",\n        importpath = \"cloud.google.com/go/optimization\",\n        sum = \"h1:63NZaWyN+5rZEKHPX4ACpw3BjgyeuY8+rCehiCMaGPY=\",\n        version = \"v1.6.3\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_orchestration\",\n        importpath = \"cloud.google.com/go/orchestration\",\n        sum = \"h1:YHgWMlrPttIVGItgGfuvO2KM7x+y9ivN/Yk92pMm1a4=\",\n        version = \"v1.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_orgpolicy\",\n        importpath = \"cloud.google.com/go/orgpolicy\",\n        sum = \"h1:2JbXigqBJVp8Dx5dONUttFqewu4fP0p3pgOdIZAhpYU=\",\n        version = \"v1.12.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_osconfig\",\n        importpath = \"cloud.google.com/go/osconfig\",\n        sum = \"h1:Mo5jGAxOMKH/PmDY7fgY19yFcVbvwREb5D5zMPQjFfo=\",\n        version = \"v1.12.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_oslogin\",\n        importpath = \"cloud.google.com/go/oslogin\",\n        sum = \"h1:1K4nOT5VEZNt7XkhaTXupBYos5HjzvJMfhvyD2wWdFs=\",\n        version = \"v1.13.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_phishingprotection\",\n        importpath = \"cloud.google.com/go/phishingprotection\",\n        sum = \"h1:DH3WFLzEoJdW/6xgsmoDqOwT1xddFi7gKu0QGZQhpGU=\",\n        version = \"v0.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_policytroubleshooter\",\n        importpath = \"cloud.google.com/go/policytroubleshooter\",\n        sum = \"h1:c0WOzC6hz964QWNBkyKfna8A2jOIx1zzZa43Gx/P09o=\",\n        version = \"v1.10.3\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_privatecatalog\",\n        importpath = \"cloud.google.com/go/privatecatalog\",\n        sum = \"h1:UZ0assTnATXSggoxUIh61RjTQ4P9zCMk/kEMbn0nMYA=\",\n        version = \"v0.9.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_pubsub\",\n        importpath = \"cloud.google.com/go/pubsub\",\n        sum = \"h1:dfEPuGCHGbWUhaMCTHUFjfroILEkx55iUmKBZTP5f+Y=\",\n        version = \"v1.36.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_pubsublite\",\n        importpath = \"cloud.google.com/go/pubsublite\",\n        sum = \"h1:pX+idpWMIH30/K7c0epN6V703xpIcMXWRjKJsz0tYGY=\",\n        version = \"v1.8.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_recaptchaenterprise_v2\",\n        importpath = \"cloud.google.com/go/recaptchaenterprise/v2\",\n        sum = \"h1:U3Wfq12X9cVMuTpsWDSURnXF0Z9hSPTHj+xsnXDRLsw=\",\n        version = \"v2.9.2\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_recommendationengine\",\n        importpath = \"cloud.google.com/go/recommendationengine\",\n        sum = \"h1:ineqLswaCSBY0csYv5/wuXJMBlxATK6Xc5jJkpiTEdM=\",\n        version = \"v0.8.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_recommender\",\n        importpath = \"cloud.google.com/go/recommender\",\n        sum = \"h1:LVLYS3r3u0MSCxQSDUtLSkporEGi9OAE6hGvayrZNPs=\",\n        version = \"v1.12.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_redis\",\n        importpath = \"cloud.google.com/go/redis\",\n        sum = \"h1:QF0maEdVv0Fj/2roU8sX3NpiDBzP9ICYTO+5F32gQNo=\",\n        version = \"v1.14.2\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_resourcemanager\",\n        importpath = \"cloud.google.com/go/resourcemanager\",\n        sum = \"h1:AZWr1vWVDKGwfLsVhcN+vcwOz3xqqYxtmMa0aABCMms=\",\n        version = \"v1.9.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_resourcesettings\",\n        importpath = \"cloud.google.com/go/resourcesettings\",\n        sum = \"h1:BTr5MVykJwClASci/7Og4Qfx70aQ4n3epsNLj94ZYgw=\",\n        version = \"v1.6.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_retail\",\n        importpath = \"cloud.google.com/go/retail\",\n        sum = \"h1:Fn1GuAua1c6crCGqfJ1qMxG1Xh10Tg/x5EUODEHMqkw=\",\n        version = \"v1.16.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_run\",\n        importpath = \"cloud.google.com/go/run\",\n        sum = \"h1:m9WDA7DzTpczhZggwYlZcBWgCRb+kgSIisWn1sbw2rQ=\",\n        version = \"v1.3.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_scheduler\",\n        importpath = \"cloud.google.com/go/scheduler\",\n        sum = \"h1:5U8iXLoQ03qOB+ZXlAecU7fiE33+u3QiM9nh4cd0eTE=\",\n        version = \"v1.10.6\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_secretmanager\",\n        importpath = \"cloud.google.com/go/secretmanager\",\n        sum = \"h1:82fpF5vBBvu9XW4qj0FU2C6qVMtj1RM/XHwKXUEAfYY=\",\n        version = \"v1.11.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_security\",\n        importpath = \"cloud.google.com/go/security\",\n        sum = \"h1:wTKJQ10j8EYgvE8Y+KhovxDRVDk2iv/OsxZ6GrLP3kE=\",\n        version = \"v1.15.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_securitycenter\",\n        importpath = \"cloud.google.com/go/securitycenter\",\n        sum = \"h1:/5jjkZ+uGe8hZ7pvd7pO30VW/a+pT2MrrdgOqjyucKQ=\",\n        version = \"v1.24.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_servicecontrol\",\n        importpath = \"cloud.google.com/go/servicecontrol\",\n        sum = \"h1:d0uV7Qegtfaa7Z2ClDzr9HJmnbJW7jn0WhZ7wOX6hLE=\",\n        version = \"v1.11.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_servicedirectory\",\n        importpath = \"cloud.google.com/go/servicedirectory\",\n        sum = \"h1:da7HFI1229kyzIyuVEzHXip0cw0d+E0s8mjQby0WN+k=\",\n        version = \"v1.11.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_servicemanagement\",\n        importpath = \"cloud.google.com/go/servicemanagement\",\n        sum = \"h1:fopAQI/IAzlxnVeiKn/8WiV6zKndjFkvi+gzu+NjywY=\",\n        version = \"v1.8.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_serviceusage\",\n        importpath = \"cloud.google.com/go/serviceusage\",\n        sum = \"h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4=\",\n        version = \"v1.6.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_shell\",\n        importpath = \"cloud.google.com/go/shell\",\n        sum = \"h1:3Fq2hzO0ZSyaqBboJrFkwwf/qMufDtqwwA6ep8EZxEI=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_spanner\",\n        importpath = \"cloud.google.com/go/spanner\",\n        sum = \"h1:o/Cv7/zZ1WgRXVCd5g3Nc23ZI39p/1pWFqFwvg6Wcu8=\",\n        version = \"v1.56.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_speech\",\n        importpath = \"cloud.google.com/go/speech\",\n        sum = \"h1:nuFc+Kj5B8de75nN4FdPyUbI2SiBoHZG6BLurXL56Q0=\",\n        version = \"v1.21.1\",\n    )\n\n    go_repository(\n        name = \"com_google_cloud_go_storage\",\n        importpath = \"cloud.google.com/go/storage\",\n        sum = \"h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA=\",\n        version = \"v1.10.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_storagetransfer\",\n        importpath = \"cloud.google.com/go/storagetransfer\",\n        sum = \"h1:dy4fL3wO0VABvzM05ycMUPFHxTPbJz9Em8ikAJVqSbI=\",\n        version = \"v1.10.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_talent\",\n        importpath = \"cloud.google.com/go/talent\",\n        sum = \"h1:JssV0CE3FNujuSWn7SkosOzg7qrMxVnt6txOfGcMSa4=\",\n        version = \"v1.6.6\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_texttospeech\",\n        importpath = \"cloud.google.com/go/texttospeech\",\n        sum = \"h1:dxY2Q5mHCbrGa3oPR2O3PCicdnvKa1JmwGQK36EFLOw=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_tpu\",\n        importpath = \"cloud.google.com/go/tpu\",\n        sum = \"h1:C8YyYda8WtNdBoCgFwwBzZd+S6+EScHOxM/z1h0NNp8=\",\n        version = \"v1.6.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_trace\",\n        importpath = \"cloud.google.com/go/trace\",\n        sum = \"h1:0pr4lIKJ5XZFYD9GtxXEWr0KkVeigc3wlGpZco0X1oA=\",\n        version = \"v1.10.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_translate\",\n        importpath = \"cloud.google.com/go/translate\",\n        sum = \"h1:upovZ0wRMdzZvXnu+RPam41B0mRJ+coRXFP2cYFJ7ew=\",\n        version = \"v1.10.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_video\",\n        importpath = \"cloud.google.com/go/video\",\n        sum = \"h1:TXwotxkShP1OqgKsbd+b8N5hrIHavSyLGvYnLGCZ7xc=\",\n        version = \"v1.20.4\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_videointelligence\",\n        importpath = \"cloud.google.com/go/videointelligence\",\n        sum = \"h1:mYaWH8uhUCXLJCN3gdXswKzRa2+lK0zN6/KsIubm6pE=\",\n        version = \"v1.11.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_vision_v2\",\n        importpath = \"cloud.google.com/go/vision/v2\",\n        sum = \"h1:W52z1b6LdGI66MVhE70g/NFty9zCYYcjdKuycqmlhtg=\",\n        version = \"v2.8.0\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_vmmigration\",\n        importpath = \"cloud.google.com/go/vmmigration\",\n        sum = \"h1:5v9RT2vWyuw3pK2ox0HQpkoftO7Q7/8591dTxxQc79g=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_vmwareengine\",\n        importpath = \"cloud.google.com/go/vmwareengine\",\n        sum = \"h1:EGdDi9QbqThfZq3ILcDK5g+m9jTevc34AY5tACx5v7k=\",\n        version = \"v1.1.1\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_vpcaccess\",\n        importpath = \"cloud.google.com/go/vpcaccess\",\n        sum = \"h1:XyL6hTLtEM/eE4F1GEge8xUN9ZCkiVWn44K/YA7z1rQ=\",\n        version = \"v1.7.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_webrisk\",\n        importpath = \"cloud.google.com/go/webrisk\",\n        sum = \"h1:251MvGuC8wisNN7+jqu9DDDZAi38KiMXxOpA/EWy4dE=\",\n        version = \"v1.9.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_websecurityscanner\",\n        importpath = \"cloud.google.com/go/websecurityscanner\",\n        sum = \"h1:YqWZrZYabG88TZt7364XWRJGhxmxhony2ZUyZEYMF2k=\",\n        version = \"v1.6.5\",\n    )\n    go_repository(\n        name = \"com_google_cloud_go_workflows\",\n        importpath = \"cloud.google.com/go/workflows\",\n        sum = \"h1:uHNmUiatTbPQ4H1pabwfzpfEYD4BBnqDHqMm2IesOh4=\",\n        version = \"v1.12.4\",\n    )\n\n    go_repository(\n        name = \"com_shuralyov_dmitri_gpu_mtl\",\n        importpath = \"dmitri.shuralyov.com/gpu/mtl\",\n        sum = \"h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=\",\n        version = \"v0.0.0-20190408044501-666a987793e9\",\n    )\n    go_repository(\n        name = \"dev_cel_expr\",\n        importpath = \"cel.dev/expr\",\n        sum = \"h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=\",\n        version = \"v0.25.1\",\n    )\n\n    go_repository(\n        name = \"in_gopkg_alecthomas_kingpin_v2\",\n        importpath = \"gopkg.in/alecthomas/kingpin.v2\",\n        sum = \"h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=\",\n        version = \"v2.2.6\",\n    )\n    go_repository(\n        name = \"in_gopkg_check_v1\",\n        importpath = \"gopkg.in/check.v1\",\n        sum = \"h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\",\n        version = \"v1.0.0-20201130134442-10cb98267c6c\",\n    )\n\n    go_repository(\n        name = \"in_gopkg_errgo_v2\",\n        importpath = \"gopkg.in/errgo.v2\",\n        sum = \"h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=\",\n        version = \"v2.1.0\",\n    )\n    go_repository(\n        name = \"in_gopkg_ini_v1\",\n        importpath = \"gopkg.in/ini.v1\",\n        sum = \"h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=\",\n        version = \"v1.51.0\",\n    )\n    go_repository(\n        name = \"in_gopkg_resty_v1\",\n        importpath = \"gopkg.in/resty.v1\",\n        sum = \"h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=\",\n        version = \"v1.12.0\",\n    )\n\n    go_repository(\n        name = \"in_gopkg_yaml_v2\",\n        importpath = \"gopkg.in/yaml.v2\",\n        sum = \"h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=\",\n        version = \"v2.2.3\",\n    )\n    go_repository(\n        name = \"in_gopkg_yaml_v3\",\n        importpath = \"gopkg.in/yaml.v3\",\n        sum = \"h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\",\n        version = \"v3.0.1\",\n    )\n    go_repository(\n        name = \"in_yaml_go_yaml_v3\",\n        importpath = \"go.yaml.in/yaml/v3\",\n        sum = \"h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=\",\n        version = \"v3.0.4\",\n    )\n\n    go_repository(\n        name = \"io_etcd_go_bbolt\",\n        importpath = \"go.etcd.io/bbolt\",\n        sum = \"h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=\",\n        version = \"v1.3.2\",\n    )\n\n    go_repository(\n        name = \"io_opencensus_go\",\n        importpath = \"go.opencensus.io\",\n        sum = \"h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=\",\n        version = \"v0.22.4\",\n    )\n    go_repository(\n        name = \"io_opentelemetry_go_auto_sdk\",\n        importpath = \"go.opentelemetry.io/auto/sdk\",\n        sum = \"h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=\",\n        version = \"v1.2.1\",\n    )\n    go_repository(\n        name = \"io_opentelemetry_go_contrib_detectors_gcp\",\n        importpath = \"go.opentelemetry.io/contrib/detectors/gcp\",\n        sum = \"h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE=\",\n        version = \"v1.39.0\",\n    )\n    go_repository(\n        name = \"io_opentelemetry_go_otel\",\n        importpath = \"go.opentelemetry.io/otel\",\n        sum = \"h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=\",\n        version = \"v1.39.0\",\n    )\n    go_repository(\n        name = \"io_opentelemetry_go_otel_metric\",\n        importpath = \"go.opentelemetry.io/otel/metric\",\n        sum = \"h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=\",\n        version = \"v1.39.0\",\n    )\n    go_repository(\n        name = \"io_opentelemetry_go_otel_sdk\",\n        importpath = \"go.opentelemetry.io/otel/sdk\",\n        sum = \"h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=\",\n        version = \"v1.39.0\",\n    )\n    go_repository(\n        name = \"io_opentelemetry_go_otel_sdk_metric\",\n        importpath = \"go.opentelemetry.io/otel/sdk/metric\",\n        sum = \"h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=\",\n        version = \"v1.39.0\",\n    )\n    go_repository(\n        name = \"io_opentelemetry_go_otel_trace\",\n        importpath = \"go.opentelemetry.io/otel/trace\",\n        sum = \"h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=\",\n        version = \"v1.39.0\",\n    )\n\n    go_repository(\n        name = \"io_opentelemetry_go_proto_otlp\",\n        importpath = \"go.opentelemetry.io/proto/otlp\",\n        sum = \"h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8=\",\n        version = \"v0.7.0\",\n    )\n\n    go_repository(\n        name = \"io_rsc_binaryregexp\",\n        importpath = \"rsc.io/binaryregexp\",\n        sum = \"h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE=\",\n        version = \"v0.2.0\",\n    )\n    go_repository(\n        name = \"io_rsc_quote_v3\",\n        importpath = \"rsc.io/quote/v3\",\n        sum = \"h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY=\",\n        version = \"v3.1.0\",\n    )\n    go_repository(\n        name = \"io_rsc_sampler\",\n        importpath = \"rsc.io/sampler\",\n        sum = \"h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=\",\n        version = \"v1.3.0\",\n    )\n    go_repository(\n        name = \"org_golang_google_api\",\n        importpath = \"google.golang.org/api\",\n        sum = \"h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w=\",\n        version = \"v0.30.0\",\n    )\n    go_repository(\n        name = \"org_golang_google_appengine\",\n        importpath = \"google.golang.org/appengine\",\n        sum = \"h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=\",\n        version = \"v1.6.8\",\n    )\n    go_repository(\n        name = \"org_golang_google_genproto\",\n        importpath = \"google.golang.org/genproto\",\n        sum = \"h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=\",\n        version = \"v0.0.0-20240227224415-6ceb2ff114de\",\n    )\n    go_repository(\n        name = \"org_golang_google_genproto_googleapis_api\",\n        importpath = \"google.golang.org/genproto/googleapis/api\",\n        sum = \"h1:41r6JMbpzBMen0R/4TZeeAmGXSJC7DftGINUodzTkPI=\",\n        version = \"v0.0.0-20260319201613-d00831a3d3e7\",\n    )\n    go_repository(\n        name = \"org_golang_google_genproto_googleapis_rpc\",\n        importpath = \"google.golang.org/genproto/googleapis/rpc\",\n        sum = \"h1:ndE4FoJqsIceKP2oYSnUZqhTdYufCYYkqwtFzfrhI7w=\",\n        version = \"v0.0.0-20260319201613-d00831a3d3e7\",\n    )\n    go_repository(\n        name = \"org_golang_google_grpc\",\n        importpath = \"google.golang.org/grpc\",\n        sum = \"h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=\",\n        version = \"v1.79.3\",\n    )\n\n    go_repository(\n        name = \"org_golang_google_grpc_cmd_protoc_gen_go_grpc\",\n        importpath = \"google.golang.org/grpc/cmd/protoc-gen-go-grpc\",\n        sum = \"h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4=\",\n        version = \"v1.0.0\",\n    )\n    go_repository(\n        name = \"org_golang_google_protobuf\",\n        importpath = \"google.golang.org/protobuf\",\n        sum = \"h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=\",\n        version = \"v1.36.11\",\n    )\n    go_repository(\n        name = \"org_golang_x_crypto\",\n        importpath = \"golang.org/x/crypto\",\n        sum = \"h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=\",\n        version = \"v0.46.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_exp\",\n        importpath = \"golang.org/x/exp\",\n        sum = \"h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=\",\n        version = \"v0.0.0-20190121172915-509febef88a4\",\n    )\n\n    go_repository(\n        name = \"org_golang_x_image\",\n        importpath = \"golang.org/x/image\",\n        sum = \"h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=\",\n        version = \"v0.0.0-20190802002840-cff245a6509b\",\n    )\n    go_repository(\n        name = \"org_golang_x_lint\",\n        importpath = \"golang.org/x/lint\",\n        sum = \"h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=\",\n        version = \"v0.0.0-20190313153728-d0100b6bd8b3\",\n    )\n\n    go_repository(\n        name = \"org_golang_x_mobile\",\n        importpath = \"golang.org/x/mobile\",\n        sum = \"h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs=\",\n        version = \"v0.0.0-20190719004257-d2bd2a29d028\",\n    )\n    go_repository(\n        name = \"org_golang_x_mod\",\n        importpath = \"golang.org/x/mod\",\n        sum = \"h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8=\",\n        version = \"v0.33.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_net\",\n        importpath = \"golang.org/x/net\",\n        sum = \"h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=\",\n        version = \"v0.48.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_oauth2\",\n        importpath = \"golang.org/x/oauth2\",\n        sum = \"h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=\",\n        version = \"v0.36.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_sync\",\n        importpath = \"golang.org/x/sync\",\n        sum = \"h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=\",\n        version = \"v0.20.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_sys\",\n        importpath = \"golang.org/x/sys\",\n        sum = \"h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=\",\n        version = \"v0.39.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_term\",\n        importpath = \"golang.org/x/term\",\n        sum = \"h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=\",\n        version = \"v0.38.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_text\",\n        importpath = \"golang.org/x/text\",\n        sum = \"h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=\",\n        version = \"v0.35.0\",\n    )\n\n    go_repository(\n        name = \"org_golang_x_time\",\n        importpath = \"golang.org/x/time\",\n        sum = \"h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=\",\n        version = \"v0.0.0-20191024005414-555d28b269f0\",\n    )\n    go_repository(\n        name = \"org_golang_x_tools\",\n        importpath = \"golang.org/x/tools\",\n        sum = \"h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k=\",\n        version = \"v0.42.0\",\n    )\n    go_repository(\n        name = \"org_golang_x_xerrors\",\n        importpath = \"golang.org/x/xerrors\",\n        sum = \"h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=\",\n        version = \"v0.0.0-20191204190536-9bdfabe68543\",\n    )\n    go_repository(\n        name = \"org_gonum_v1_gonum\",\n        importpath = \"gonum.org/v1/gonum\",\n        sum = \"h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=\",\n        version = \"v0.16.0\",\n    )\n\n    go_repository(\n        name = \"org_uber_go_atomic\",\n        importpath = \"go.uber.org/atomic\",\n        sum = \"h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=\",\n        version = \"v1.7.0\",\n    )\n    go_repository(\n        name = \"org_uber_go_multierr\",\n        importpath = \"go.uber.org/multierr\",\n        sum = \"h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=\",\n        version = \"v1.6.0\",\n    )\n    go_repository(\n        name = \"org_uber_go_tools\",\n        importpath = \"go.uber.org/tools\",\n        sum = \"h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=\",\n        version = \"v0.0.0-20190618225709-2cfd321de3ee\",\n    )\n    go_repository(\n        name = \"org_uber_go_zap\",\n        importpath = \"go.uber.org/zap\",\n        sum = \"h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=\",\n        version = \"v1.16.0\",\n    )\n"
  },
  {
    "path": "runtime/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"runtime\",\n    srcs = [\n        \"context.go\",\n        \"convert.go\",\n        \"doc.go\",\n        \"errors.go\",\n        \"fieldmask.go\",\n        \"handler.go\",\n        \"marshal_httpbodyproto.go\",\n        \"marshal_json.go\",\n        \"marshal_jsonpb.go\",\n        \"marshal_proto.go\",\n        \"marshaler.go\",\n        \"marshaler_registry.go\",\n        \"mux.go\",\n        \"pattern.go\",\n        \"proto2_convert.go\",\n        \"query.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\",\n    deps = [\n        \"//internal/httprule\",\n        \"//utilities\",\n        \"@org_golang_google_genproto_googleapis_api//httpbody\",\n        \"@org_golang_google_grpc//:grpc\",\n        \"@org_golang_google_grpc//codes\",\n        \"@org_golang_google_grpc//grpclog\",\n        \"@org_golang_google_grpc//health/grpc_health_v1\",\n        \"@org_golang_google_grpc//metadata\",\n        \"@org_golang_google_grpc//status\",\n        \"@org_golang_google_protobuf//encoding/protojson\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//reflect/protoreflect\",\n        \"@org_golang_google_protobuf//reflect/protoregistry\",\n        \"@org_golang_google_protobuf//types/known/durationpb\",\n        \"@org_golang_google_protobuf//types/known/fieldmaskpb\",\n        \"@org_golang_google_protobuf//types/known/structpb\",\n        \"@org_golang_google_protobuf//types/known/timestamppb\",\n        \"@org_golang_google_protobuf//types/known/wrapperspb\",\n    ],\n)\n\ngo_test(\n    name = \"runtime_test\",\n    size = \"small\",\n    srcs = [\n        \"context_test.go\",\n        \"convert_test.go\",\n        \"errors_test.go\",\n        \"fieldmask_test.go\",\n        \"handler_test.go\",\n        \"marshal_httpbodyproto_test.go\",\n        \"marshal_json_test.go\",\n        \"marshal_jsonpb_test.go\",\n        \"marshal_proto_test.go\",\n        \"marshaler_registry_test.go\",\n        \"mux_internal_test.go\",\n        \"mux_test.go\",\n        \"pattern_test.go\",\n        \"query_fuzz_test.go\",\n        \"query_test.go\",\n    ],\n    embed = [\":runtime\"],\n    deps = [\n        \"//runtime/internal/examplepb\",\n        \"//utilities\",\n        \"@com_github_google_go_cmp//cmp\",\n        \"@com_github_google_go_cmp//cmp/cmpopts\",\n        \"@org_golang_google_genproto_googleapis_api//httpbody\",\n        \"@org_golang_google_genproto_googleapis_rpc//errdetails\",\n        \"@org_golang_google_genproto_googleapis_rpc//status\",\n        \"@org_golang_google_grpc//:grpc\",\n        \"@org_golang_google_grpc//codes\",\n        \"@org_golang_google_grpc//health/grpc_health_v1\",\n        \"@org_golang_google_grpc//metadata\",\n        \"@org_golang_google_grpc//status\",\n        \"@org_golang_google_protobuf//encoding/protojson\",\n        \"@org_golang_google_protobuf//proto\",\n        \"@org_golang_google_protobuf//testing/protocmp\",\n        \"@org_golang_google_protobuf//types/known/durationpb\",\n        \"@org_golang_google_protobuf//types/known/emptypb\",\n        \"@org_golang_google_protobuf//types/known/fieldmaskpb\",\n        \"@org_golang_google_protobuf//types/known/structpb\",\n        \"@org_golang_google_protobuf//types/known/timestamppb\",\n        \"@org_golang_google_protobuf//types/known/wrapperspb\",\n    ],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":runtime\",\n    visibility = [\"//visibility:public\"],\n)\n"
  },
  {
    "path": "runtime/context.go",
    "content": "package runtime\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// MetadataHeaderPrefix is the http prefix that represents custom metadata\n// parameters to or from a gRPC call.\nconst MetadataHeaderPrefix = \"Grpc-Metadata-\"\n\n// MetadataPrefix is prepended to permanent HTTP header keys (as specified\n// by the IANA) when added to the gRPC context.\nconst MetadataPrefix = \"grpcgateway-\"\n\n// MetadataTrailerPrefix is prepended to gRPC metadata as it is converted to\n// HTTP headers in a response handled by grpc-gateway\nconst MetadataTrailerPrefix = \"Grpc-Trailer-\"\n\nconst metadataGrpcTimeout = \"Grpc-Timeout\"\nconst metadataHeaderBinarySuffix = \"-Bin\"\n\nconst xForwardedFor = \"X-Forwarded-For\"\nconst xForwardedHost = \"X-Forwarded-Host\"\n\n// DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound\n// header isn't present. If the value is 0 the sent `context` will not have a timeout.\nvar DefaultContextTimeout = 0 * time.Second\n\n// malformedHTTPHeaders lists the headers that the gRPC server may reject outright as malformed.\n// See https://github.com/grpc/grpc-go/pull/4803#issuecomment-986093310 for more context.\nvar malformedHTTPHeaders = map[string]struct{}{\n\t\"connection\": {},\n}\n\ntype (\n\trpcMethodKey       struct{}\n\thttpPathPatternKey struct{}\n\thttpPatternKey     struct{}\n\n\tAnnotateContextOption func(ctx context.Context) context.Context\n)\n\nfunc WithHTTPPathPattern(pattern string) AnnotateContextOption {\n\treturn func(ctx context.Context) context.Context {\n\t\treturn withHTTPPathPattern(ctx, pattern)\n\t}\n}\n\nfunc decodeBinHeader(v string) ([]byte, error) {\n\tif len(v)%4 == 0 {\n\t\t// Input was padded, or padding was not necessary.\n\t\treturn base64.StdEncoding.DecodeString(v)\n\t}\n\treturn base64.RawStdEncoding.DecodeString(v)\n}\n\n/*\nAnnotateContext adds context information such as metadata from the request.\n\nAt a minimum, the RemoteAddr is included in the fashion of \"X-Forwarded-For\",\nexcept that the forwarded destination is not another HTTP service but rather\na gRPC service.\n*/\nfunc AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, error) {\n\tctx, md, err := annotateContext(ctx, mux, req, rpcMethodName, options...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif md == nil {\n\t\treturn ctx, nil\n\t}\n\n\treturn metadata.NewOutgoingContext(ctx, md), nil\n}\n\n// AnnotateIncomingContext adds context information such as metadata from the request.\n// Attach metadata as incoming context.\nfunc AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, error) {\n\tctx, md, err := annotateContext(ctx, mux, req, rpcMethodName, options...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif md == nil {\n\t\treturn ctx, nil\n\t}\n\n\treturn metadata.NewIncomingContext(ctx, md), nil\n}\n\nfunc isValidGRPCMetadataKey(key string) bool {\n\t// Must be a valid gRPC \"Header-Name\" as defined here:\n\t//   https://github.com/grpc/grpc/blob/4b05dc88b724214d0c725c8e7442cbc7a61b1374/doc/PROTOCOL-HTTP2.md\n\t// This means 0-9 a-z _ - .\n\t// Only lowercase letters are valid in the wire protocol, but the client library will normalize\n\t// uppercase ASCII to lowercase, so uppercase ASCII is also acceptable.\n\tbytes := []byte(key) // gRPC validates strings on the byte level, not Unicode.\n\tfor _, ch := range bytes {\n\t\tvalidLowercaseLetter := ch >= 'a' && ch <= 'z'\n\t\tvalidUppercaseLetter := ch >= 'A' && ch <= 'Z'\n\t\tvalidDigit := ch >= '0' && ch <= '9'\n\t\tvalidOther := ch == '.' || ch == '-' || ch == '_'\n\t\tif !validLowercaseLetter && !validUppercaseLetter && !validDigit && !validOther {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc isValidGRPCMetadataTextValue(textValue string) bool {\n\t// Must be a valid gRPC \"ASCII-Value\" as defined here:\n\t//   https://github.com/grpc/grpc/blob/4b05dc88b724214d0c725c8e7442cbc7a61b1374/doc/PROTOCOL-HTTP2.md\n\t// This means printable ASCII (including/plus spaces); 0x20 to 0x7E inclusive.\n\tbytes := []byte(textValue) // gRPC validates strings on the byte level, not Unicode.\n\tfor _, ch := range bytes {\n\t\tif ch < 0x20 || ch > 0x7E {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, metadata.MD, error) {\n\tctx = withRPCMethod(ctx, rpcMethodName)\n\tfor _, o := range options {\n\t\tctx = o(ctx)\n\t}\n\ttimeout := DefaultContextTimeout\n\tif tm := req.Header.Get(metadataGrpcTimeout); tm != \"\" {\n\t\tvar err error\n\t\ttimeout, err = timeoutDecode(tm)\n\t\tif err != nil {\n\t\t\treturn nil, nil, status.Errorf(codes.InvalidArgument, \"invalid grpc-timeout: %s\", tm)\n\t\t}\n\t}\n\tvar pairs []string\n\tfor key, vals := range req.Header {\n\t\tkey = textproto.CanonicalMIMEHeaderKey(key)\n\t\tswitch key {\n\t\tcase xForwardedFor, xForwardedHost:\n\t\t\t// Handled separately below\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, val := range vals {\n\t\t\t// For backwards-compatibility, pass through 'authorization' header with no prefix.\n\t\t\tif key == \"Authorization\" {\n\t\t\t\tpairs = append(pairs, \"authorization\", val)\n\t\t\t}\n\t\t\tif h, ok := mux.incomingHeaderMatcher(key); ok {\n\t\t\t\tif !isValidGRPCMetadataKey(h) {\n\t\t\t\t\tgrpclog.Errorf(\"HTTP header name %q is not valid as gRPC metadata key; skipping\", h)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// Handles \"-bin\" metadata in grpc, since grpc will do another base64\n\t\t\t\t// encode before sending to server, we need to decode it first.\n\t\t\t\tif strings.HasSuffix(key, metadataHeaderBinarySuffix) {\n\t\t\t\t\tb, err := decodeBinHeader(val)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, nil, status.Errorf(codes.InvalidArgument, \"invalid binary header %s: %s\", key, err)\n\t\t\t\t\t}\n\n\t\t\t\t\tval = string(b)\n\t\t\t\t} else if !isValidGRPCMetadataTextValue(val) {\n\t\t\t\t\tgrpclog.Errorf(\"Value of HTTP header %q contains non-ASCII value (not valid as gRPC metadata): skipping\", h)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tpairs = append(pairs, h, val)\n\t\t\t}\n\t\t}\n\t}\n\tif host := req.Header.Get(xForwardedHost); host != \"\" {\n\t\tpairs = append(pairs, strings.ToLower(xForwardedHost), host)\n\t} else if req.Host != \"\" {\n\t\tpairs = append(pairs, strings.ToLower(xForwardedHost), req.Host)\n\t}\n\n\txff := req.Header.Values(xForwardedFor)\n\tif addr := req.RemoteAddr; addr != \"\" {\n\t\tif remoteIP, _, err := net.SplitHostPort(addr); err == nil {\n\t\t\txff = append(xff, remoteIP)\n\t\t}\n\t}\n\tif len(xff) > 0 {\n\t\tpairs = append(pairs, strings.ToLower(xForwardedFor), strings.Join(xff, \", \"))\n\t}\n\n\tif timeout != 0 {\n\t\tctx, _ = context.WithTimeout(ctx, timeout)\n\t}\n\tmd := metadata.Pairs(pairs...)\n\tfor _, mda := range mux.metadataAnnotators {\n\t\tmd = metadata.Join(md, mda(ctx, req))\n\t}\n\tif len(md) == 0 {\n\t\treturn ctx, nil, nil\n\t}\n\treturn ctx, md, nil\n}\n\n// ServerMetadata consists of metadata sent from gRPC server.\ntype ServerMetadata struct {\n\tHeaderMD  metadata.MD\n\tTrailerMD metadata.MD\n}\n\ntype serverMetadataKey struct{}\n\n// NewServerMetadataContext creates a new context with ServerMetadata\nfunc NewServerMetadataContext(ctx context.Context, md ServerMetadata) context.Context {\n\tif ctx == nil {\n\t\tctx = context.Background()\n\t}\n\treturn context.WithValue(ctx, serverMetadataKey{}, md)\n}\n\n// ServerMetadataFromContext returns the ServerMetadata in ctx\nfunc ServerMetadataFromContext(ctx context.Context) (md ServerMetadata, ok bool) {\n\tif ctx == nil {\n\t\treturn md, false\n\t}\n\tmd, ok = ctx.Value(serverMetadataKey{}).(ServerMetadata)\n\treturn\n}\n\n// ServerTransportStream implements grpc.ServerTransportStream.\n// It should only be used by the generated files to support grpc.SendHeader\n// outside of gRPC server use.\ntype ServerTransportStream struct {\n\tmu      sync.Mutex\n\theader  metadata.MD\n\ttrailer metadata.MD\n}\n\n// Method returns the method for the stream.\nfunc (s *ServerTransportStream) Method() string {\n\treturn \"\"\n}\n\n// Header returns the header metadata of the stream.\nfunc (s *ServerTransportStream) Header() metadata.MD {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\treturn s.header.Copy()\n}\n\n// SetHeader sets the header metadata.\nfunc (s *ServerTransportStream) SetHeader(md metadata.MD) error {\n\tif md.Len() == 0 {\n\t\treturn nil\n\t}\n\n\ts.mu.Lock()\n\ts.header = metadata.Join(s.header, md)\n\ts.mu.Unlock()\n\treturn nil\n}\n\n// SendHeader sets the header metadata.\nfunc (s *ServerTransportStream) SendHeader(md metadata.MD) error {\n\treturn s.SetHeader(md)\n}\n\n// Trailer returns the cached trailer metadata.\nfunc (s *ServerTransportStream) Trailer() metadata.MD {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\treturn s.trailer.Copy()\n}\n\n// SetTrailer sets the trailer metadata.\nfunc (s *ServerTransportStream) SetTrailer(md metadata.MD) error {\n\tif md.Len() == 0 {\n\t\treturn nil\n\t}\n\n\ts.mu.Lock()\n\ts.trailer = metadata.Join(s.trailer, md)\n\ts.mu.Unlock()\n\treturn nil\n}\n\nfunc timeoutDecode(s string) (time.Duration, error) {\n\tsize := len(s)\n\tif size < 2 {\n\t\treturn 0, fmt.Errorf(\"timeout string is too short: %q\", s)\n\t}\n\td, ok := timeoutUnitToDuration(s[size-1])\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"timeout unit is not recognized: %q\", s)\n\t}\n\tt, err := strconv.ParseInt(s[:size-1], 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d * time.Duration(t), nil\n}\n\nfunc timeoutUnitToDuration(u uint8) (d time.Duration, ok bool) {\n\tswitch u {\n\tcase 'H':\n\t\treturn time.Hour, true\n\tcase 'M':\n\t\treturn time.Minute, true\n\tcase 'S':\n\t\treturn time.Second, true\n\tcase 'm':\n\t\treturn time.Millisecond, true\n\tcase 'u':\n\t\treturn time.Microsecond, true\n\tcase 'n':\n\t\treturn time.Nanosecond, true\n\tdefault:\n\t\treturn\n\t}\n}\n\n// isPermanentHTTPHeader checks whether hdr belongs to the list of\n// permanent request headers maintained by IANA.\n// http://www.iana.org/assignments/message-headers/message-headers.xml\nfunc isPermanentHTTPHeader(hdr string) bool {\n\tswitch hdr {\n\tcase\n\t\t\"Accept\",\n\t\t\"Accept-Charset\",\n\t\t\"Accept-Language\",\n\t\t\"Accept-Ranges\",\n\t\t\"Authorization\",\n\t\t\"Cache-Control\",\n\t\t\"Content-Type\",\n\t\t\"Cookie\",\n\t\t\"Date\",\n\t\t\"Expect\",\n\t\t\"From\",\n\t\t\"Host\",\n\t\t\"If-Match\",\n\t\t\"If-Modified-Since\",\n\t\t\"If-None-Match\",\n\t\t\"If-Schedule-Tag-Match\",\n\t\t\"If-Unmodified-Since\",\n\t\t\"Max-Forwards\",\n\t\t\"Origin\",\n\t\t\"Pragma\",\n\t\t\"Referer\",\n\t\t\"User-Agent\",\n\t\t\"Via\",\n\t\t\"Warning\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// isMalformedHTTPHeader checks whether header belongs to the list of\n// \"malformed headers\" and would be rejected by the gRPC server.\nfunc isMalformedHTTPHeader(header string) bool {\n\t_, isMalformed := malformedHTTPHeaders[strings.ToLower(header)]\n\treturn isMalformed\n}\n\n// RPCMethod returns the method string for the server context. The returned\n// string is in the format of \"/package.service/method\".\nfunc RPCMethod(ctx context.Context) (string, bool) {\n\tm := ctx.Value(rpcMethodKey{})\n\tif m == nil {\n\t\treturn \"\", false\n\t}\n\tms, ok := m.(string)\n\tif !ok {\n\t\treturn \"\", false\n\t}\n\treturn ms, true\n}\n\nfunc withRPCMethod(ctx context.Context, rpcMethodName string) context.Context {\n\treturn context.WithValue(ctx, rpcMethodKey{}, rpcMethodName)\n}\n\n// HTTPPathPattern returns the HTTP path pattern string relating to the HTTP handler, if one exists.\n// The format of the returned string is defined by the google.api.http path template type.\nfunc HTTPPathPattern(ctx context.Context) (string, bool) {\n\tm := ctx.Value(httpPathPatternKey{})\n\tif m == nil {\n\t\treturn \"\", false\n\t}\n\tms, ok := m.(string)\n\tif !ok {\n\t\treturn \"\", false\n\t}\n\treturn ms, true\n}\n\nfunc withHTTPPathPattern(ctx context.Context, httpPathPattern string) context.Context {\n\treturn context.WithValue(ctx, httpPathPatternKey{}, httpPathPattern)\n}\n\n// HTTPPattern returns the HTTP path pattern struct relating to the HTTP handler, if one exists.\nfunc HTTPPattern(ctx context.Context) (Pattern, bool) {\n\tv, ok := ctx.Value(httpPatternKey{}).(Pattern)\n\treturn v, ok\n}\n\nfunc withHTTPPattern(ctx context.Context, httpPattern Pattern) context.Context {\n\treturn context.WithValue(ctx, httpPatternKey{}, httpPattern)\n}\n"
  },
  {
    "path": "runtime/context_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"net/http\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/grpc/metadata\"\n)\n\nconst (\n\temptyForwardMetaCount = 1\n)\n\nfunc TestAnnotateContext_WorksWithEmpty(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\texpectedHTTPPathPattern := \"/v1\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://www.example.com/v1\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://www.example.com\", err)\n\t}\n\trequest.Header.Add(\"Some-Irrelevant-Header\", \"some value\")\n\tannotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern))\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromOutgoingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount, md)\n\t}\n}\n\nfunc TestAnnotateContext_WorksWithNoIncomingHeaders(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\texpectedHTTPPathPattern := \"/v1\"\n\tmd1 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{\"foo\": \"bar\"}) }\n\texpected := metadata.New(map[string]string{\"foo\": \"bar\"})\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"/v1\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"/v1\", err)\n\t}\n\tserveMux := runtime.NewServeMux(runtime.WithMetadata(md1))\n\tannotated, err := runtime.AnnotateContext(ctx, serveMux, request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern))\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tactual, _ := metadata.FromOutgoingContext(annotated)\n\tfor key, e := range expected {\n\t\tif a, ok := actual[key]; !ok || !reflect.DeepEqual(e, a) {\n\t\t\tt.Errorf(\"metadata.MD[%s] = %v; want %v\", key, a, e)\n\t\t}\n\t}\n}\n\nfunc TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\texpectedHTTPPathPattern := \"/v1\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://www.example.com/v1\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://www.example.com\", err)\n\t}\n\trequest.Header.Add(\"Some-Irrelevant-Header\", \"some value\")\n\trequest.Header.Add(\"Grpc-Metadata-FooBar\", \"Value1\")\n\trequest.Header.Add(\"Grpc-Metadata-Foo-BAZ\", \"Value2\")\n\trequest.Header.Add(\"Grpc-Metadata-foo-bAz\", \"Value3\")\n\trequest.Header.Add(\"Authorization\", \"Token 1234567890\")\n\tannotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern))\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromOutgoingContext(annotated)\n\tif got, want := len(md), emptyForwardMetaCount+4; !ok || got != want {\n\t\tt.Errorf(\"metadata items in context = %d want %d: %v\", got, want, md)\n\t}\n\tif got, want := md[\"foobar\"], []string{\"Value1\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"grpcgateway-foobar\"] = %q; want %q`, got, want)\n\t}\n\tif got, want := md[\"foo-baz\"], []string{\"Value2\", \"Value3\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"grpcgateway-foo-baz\"] = %q want %q`, got, want)\n\t}\n\tif got, want := md[\"grpcgateway-authorization\"], []string{\"Token 1234567890\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"grpcgateway-authorization\"] = %q want %q`, got, want)\n\t}\n\tif got, want := md[\"authorization\"], []string{\"Token 1234567890\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"authorization\"] = %q want %q`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n\n\tif m, ok := runtime.HTTPPathPattern(annotated); !ok {\n\t\tt.Errorf(\"runtime.HTTPPathPattern(annotated) failed with no value; want %s\", expectedHTTPPathPattern)\n\t} else if m != expectedHTTPPathPattern {\n\t\tt.Errorf(\"runtime.HTTPPathPattern(annotated) failed with %s; want %s\", m, expectedHTTPPathPattern)\n\t}\n}\n\nfunc TestAnnotateContext_ForwardGrpcBinaryMetadata(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://www.example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://www.example.com\", err)\n\t}\n\n\tbinData := []byte(\"\\x00test-binary-data\")\n\trequest.Header.Add(\"Grpc-Metadata-Test-Bin\", base64.StdEncoding.EncodeToString(binData))\n\n\tannotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromOutgoingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount+1 {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount+1, md)\n\t}\n\tif got, want := md[\"test-bin\"], []string{string(binData)}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"test-bin\"] = %q want %q`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateContext_AddsXForwardedHeaders(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://bar.foo.example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://bar.foo.example.com\", err)\n\t}\n\trequest.RemoteAddr = \"192.0.2.100:12345\" // client\n\n\tserveMux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(func(key string) (string, bool) {\n\t\treturn key, true\n\t}))\n\n\tannotated, err := runtime.AnnotateContext(ctx, serveMux, request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromOutgoingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount+1 {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount+1, md)\n\t}\n\tif got, want := md[\"x-forwarded-host\"], []string{\"bar.foo.example.com\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"host\"] = %v; want %v`, got, want)\n\t}\n\tif got, want := md[\"x-forwarded-for\"], []string{\"192.0.2.100\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"x-forwarded-for\"] = %v want %v`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateContext_AppendsToExistingXForwardedHeaders(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://bar.foo.example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://bar.foo.example.com\", err)\n\t}\n\trequest.Header.Add(\"X-Forwarded-Host\", \"qux.example.com\")\n\trequest.Header.Add(\"X-Forwarded-For\", \"192.0.2.100\")              // client\n\trequest.Header.Add(\"X-Forwarded-For\", \"192.0.2.101, 192.0.2.102\") // intermediate proxies\n\trequest.RemoteAddr = \"192.0.2.200:12345\"                          // final proxy\n\n\tserveMux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(func(key string) (string, bool) {\n\t\treturn key, true\n\t}))\n\n\tannotated, err := runtime.AnnotateContext(ctx, serveMux, request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromOutgoingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount+1 {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount+1, md)\n\t}\n\tif got, want := md[\"x-forwarded-host\"], []string{\"qux.example.com\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"host\"] = %v; want %v`, got, want)\n\t}\n\t// Note: it must be in order client, proxy1, proxy2\n\tif got, want := md[\"x-forwarded-for\"], []string{\"192.0.2.100, 192.0.2.101, 192.0.2.102, 192.0.2.200\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"x-forwarded-for\"] = %v want %v`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateContext_SupportsTimeouts(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(`http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil) failed with %v; want success`, err)\n\t}\n\tannotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tif _, ok := annotated.Deadline(); ok {\n\t\t// no deadline by default\n\t\tt.Errorf(\"annotated.Deadline() = _, true; want _, false\")\n\t}\n\n\tconst acceptableError = 50 * time.Millisecond\n\truntime.DefaultContextTimeout = 10 * time.Second\n\tannotated, err = runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tdeadline, ok := annotated.Deadline()\n\tif !ok {\n\t\tt.Errorf(\"annotated.Deadline() = _, false; want _, true\")\n\t}\n\tif got, want := time.Until(deadline), runtime.DefaultContextTimeout; got-want > acceptableError || got-want < -acceptableError {\n\t\tt.Errorf(\"time.Until(deadline) = %v; want %v; with error %v\", got, want, acceptableError)\n\t}\n\n\tfor _, spec := range []struct {\n\t\ttimeout string\n\t\twant    time.Duration\n\t}{\n\t\t{\n\t\t\ttimeout: \"17H\",\n\t\t\twant:    17 * time.Hour,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"19M\",\n\t\t\twant:    19 * time.Minute,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"23S\",\n\t\t\twant:    23 * time.Second,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"1009m\",\n\t\t\twant:    1009 * time.Millisecond,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"1000003u\",\n\t\t\twant:    1000003 * time.Microsecond,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"100000007n\",\n\t\t\twant:    100000007 * time.Nanosecond,\n\t\t},\n\t} {\n\t\trequest.Header.Set(\"Grpc-Timeout\", spec.timeout)\n\t\tannotated, err = runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\t\treturn\n\t\t}\n\t\tdeadline, ok := annotated.Deadline()\n\t\tif !ok {\n\t\t\tt.Errorf(\"annotated.Deadline() = _, false; want _, true; timeout = %q\", spec.timeout)\n\t\t}\n\t\tif got, want := time.Until(deadline), spec.want; got-want > acceptableError || got-want < -acceptableError {\n\t\t\tt.Errorf(\"time.Until(deadline) = %v; want %v; with error %v; timeout= %q\", got, want, acceptableError, spec.timeout)\n\t\t}\n\t\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t\t} else if m != expectedRPCName {\n\t\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t\t}\n\t}\n}\nfunc TestAnnotateContext_SupportsCustomAnnotators(t *testing.T) {\n\tctx := context.Background()\n\tmd1 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{\"foo\": \"bar\"}) }\n\tmd2 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{\"baz\": \"qux\"}) }\n\texpected := metadata.New(map[string]string{\"foo\": \"bar\", \"baz\": \"qux\"})\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(`http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil) failed with %v; want success`, err)\n\t}\n\tannotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(runtime.WithMetadata(md1), runtime.WithMetadata(md2)), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tactual, _ := metadata.FromOutgoingContext(annotated)\n\tfor key, e := range expected {\n\t\tif a, ok := actual[key]; !ok || !reflect.DeepEqual(e, a) {\n\t\t\tt.Errorf(\"metadata.MD[%s] = %v; want %v\", key, a, e)\n\t\t}\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateIncomingContext_WorksWithEmpty(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\texpectedHTTPPathPattern := \"/v1\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://www.example.com/v1\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://www.example.com\", err)\n\t}\n\trequest.Header.Add(\"Some-Irrelevant-Header\", \"some value\")\n\tannotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern))\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromIncomingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount, md)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\texpectedHTTPPathPattern := \"/v1\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://www.example.com/v1\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://www.example.com\", err)\n\t}\n\trequest.Header.Add(\"Some-Irrelevant-Header\", \"some value\")\n\trequest.Header.Add(\"Grpc-Metadata-FooBar\", \"Value1\")\n\trequest.Header.Add(\"Grpc-Metadata-Foo-BAZ\", \"Value2\")\n\trequest.Header.Add(\"Grpc-Metadata-foo-bAz\", \"Value3\")\n\trequest.Header.Add(\"Authorization\", \"Token 1234567890\")\n\tannotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern))\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromIncomingContext(annotated)\n\tif got, want := len(md), emptyForwardMetaCount+4; !ok || got != want {\n\t\tt.Errorf(\"metadata items in context = %d want %d: %v\", got, want, md)\n\t}\n\tif got, want := md[\"foobar\"], []string{\"Value1\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"grpcgateway-foobar\"] = %q; want %q`, got, want)\n\t}\n\tif got, want := md[\"foo-baz\"], []string{\"Value2\", \"Value3\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"grpcgateway-foo-baz\"] = %q want %q`, got, want)\n\t}\n\tif got, want := md[\"grpcgateway-authorization\"], []string{\"Token 1234567890\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"grpcgateway-authorization\"] = %q want %q`, got, want)\n\t}\n\tif got, want := md[\"authorization\"], []string{\"Token 1234567890\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"authorization\"] = %q want %q`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n\tif m, ok := runtime.HTTPPathPattern(annotated); !ok {\n\t\tt.Errorf(\"runtime.HTTPPathPattern(annotated) failed with no value; want %s\", expectedHTTPPathPattern)\n\t} else if m != expectedHTTPPathPattern {\n\t\tt.Errorf(\"runtime.HTTPPathPattern(annotated) failed with %s; want %s\", m, expectedHTTPPathPattern)\n\t}\n}\n\nfunc TestAnnotateIncomingContext_ForwardGrpcBinaryMetadata(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://www.example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://www.example.com\", err)\n\t}\n\n\tbinData := []byte(\"\\x00test-binary-data\")\n\trequest.Header.Add(\"Grpc-Metadata-Test-Bin\", base64.StdEncoding.EncodeToString(binData))\n\n\tannotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromIncomingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount+1 {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount+1, md)\n\t}\n\tif got, want := md[\"test-bin\"], []string{string(binData)}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"test-bin\"] = %q want %q`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateIncomingContext_AddsXForwardedHeaders(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://bar.foo.example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://bar.foo.example.com\", err)\n\t}\n\trequest.RemoteAddr = \"192.0.2.100:12345\" // client\n\n\tserveMux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(func(key string) (string, bool) {\n\t\treturn key, true\n\t}))\n\n\tannotated, err := runtime.AnnotateIncomingContext(ctx, serveMux, request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromIncomingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount+1 {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount+1, md)\n\t}\n\tif got, want := md[\"x-forwarded-host\"], []string{\"bar.foo.example.com\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"host\"] = %v; want %v`, got, want)\n\t}\n\tif got, want := md[\"x-forwarded-for\"], []string{\"192.0.2.100\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"x-forwarded-for\"] = %v want %v`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateIncomingContext_AppendsToExistingXForwardedHeaders(t *testing.T) {\n\tctx := context.Background()\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://bar.foo.example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(\"http.NewRequestWithContext(ctx, %q, %q, nil) failed with %v; want success\", \"GET\", \"http://bar.foo.example.com\", err)\n\t}\n\trequest.Header.Add(\"X-Forwarded-Host\", \"qux.example.com\")\n\trequest.Header.Add(\"X-Forwarded-For\", \"192.0.2.100\")              // client\n\trequest.Header.Add(\"X-Forwarded-For\", \"192.0.2.101, 192.0.2.102\") // intermediate proxies\n\trequest.RemoteAddr = \"192.0.2.200:12345\"                          // final proxy\n\n\tserveMux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(func(key string) (string, bool) {\n\t\treturn key, true\n\t}))\n\n\tannotated, err := runtime.AnnotateIncomingContext(ctx, serveMux, request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tmd, ok := metadata.FromIncomingContext(annotated)\n\tif !ok || len(md) != emptyForwardMetaCount+1 {\n\t\tt.Errorf(\"Expected %d metadata items in context; got %v\", emptyForwardMetaCount+1, md)\n\t}\n\tif got, want := md[\"x-forwarded-host\"], []string{\"qux.example.com\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"host\"] = %v; want %v`, got, want)\n\t}\n\t// Note: it must be in order client, proxy1, proxy2\n\tif got, want := md[\"x-forwarded-for\"], []string{\"192.0.2.100, 192.0.2.101, 192.0.2.102, 192.0.2.200\"}; !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(`md[\"x-forwarded-for\"] = %v want %v`, got, want)\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n\nfunc TestAnnotateIncomingContext_SupportsTimeouts(t *testing.T) {\n\t// While run all test, TestAnnotateContext_SupportsTimeouts() will change the DefaultContextTimeout, so reset it to zero.\n\truntime.DefaultContextTimeout = 0 * time.Second\n\texpectedRPCName := \"/example.Example/Example\"\n\tctx := context.Background()\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(`http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil) failed with %v; want success`, err)\n\t}\n\tannotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tif _, ok := annotated.Deadline(); ok {\n\t\t// no deadline by default\n\t\tt.Errorf(\"annotated.Deadline() = _, true; want _, false\")\n\t}\n\n\tconst acceptableError = 50 * time.Millisecond\n\truntime.DefaultContextTimeout = 10 * time.Second\n\tannotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tdeadline, ok := annotated.Deadline()\n\tif !ok {\n\t\tt.Errorf(\"annotated.Deadline() = _, false; want _, true\")\n\t}\n\tif got, want := time.Until(deadline), runtime.DefaultContextTimeout; got-want > acceptableError || got-want < -acceptableError {\n\t\tt.Errorf(\"time.Until(deadline) = %v; want %v; with error %v\", got, want, acceptableError)\n\t}\n\n\tfor _, spec := range []struct {\n\t\ttimeout string\n\t\twant    time.Duration\n\t}{\n\t\t{\n\t\t\ttimeout: \"17H\",\n\t\t\twant:    17 * time.Hour,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"19M\",\n\t\t\twant:    19 * time.Minute,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"23S\",\n\t\t\twant:    23 * time.Second,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"1009m\",\n\t\t\twant:    1009 * time.Millisecond,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"1000003u\",\n\t\t\twant:    1000003 * time.Microsecond,\n\t\t},\n\t\t{\n\t\t\ttimeout: \"100000007n\",\n\t\t\twant:    100000007 * time.Nanosecond,\n\t\t},\n\t} {\n\t\trequest.Header.Set(\"Grpc-Timeout\", spec.timeout)\n\t\tannotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\t\treturn\n\t\t}\n\t\tdeadline, ok := annotated.Deadline()\n\t\tif !ok {\n\t\t\tt.Errorf(\"annotated.Deadline() = _, false; want _, true; timeout = %q\", spec.timeout)\n\t\t}\n\t\tif got, want := time.Until(deadline), spec.want; got-want > acceptableError || got-want < -acceptableError {\n\t\t\tt.Errorf(\"time.Until(deadline) = %v; want %v; with error %v; timeout= %q\", got, want, acceptableError, spec.timeout)\n\t\t}\n\t\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t\t} else if m != expectedRPCName {\n\t\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t\t}\n\t}\n}\nfunc TestAnnotateIncomingContext_SupportsCustomAnnotators(t *testing.T) {\n\tctx := context.Background()\n\tmd1 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{\"foo\": \"bar\"}) }\n\tmd2 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{\"baz\": \"qux\"}) }\n\texpected := metadata.New(map[string]string{\"foo\": \"bar\", \"baz\": \"qux\"})\n\texpectedRPCName := \"/example.Example/Example\"\n\trequest, err := http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(`http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil) failed with %v; want success`, err)\n\t}\n\tannotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(runtime.WithMetadata(md1), runtime.WithMetadata(md2)), request, expectedRPCName)\n\tif err != nil {\n\t\tt.Errorf(\"runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success\", request, err)\n\t\treturn\n\t}\n\tactual, _ := metadata.FromIncomingContext(annotated)\n\tfor key, e := range expected {\n\t\tif a, ok := actual[key]; !ok || !reflect.DeepEqual(e, a) {\n\t\t\tt.Errorf(\"metadata.MD[%s] = %v; want %v\", key, a, e)\n\t\t}\n\t}\n\tif m, ok := runtime.RPCMethod(annotated); !ok {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with no value; want %s\", expectedRPCName)\n\t} else if m != expectedRPCName {\n\t\tt.Errorf(\"runtime.RPCMethod(annotated) failed with %s; want %s\", m, expectedRPCName)\n\t}\n}\n"
  },
  {
    "path": "runtime/convert.go",
    "content": "package runtime\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\n// String just returns the given string.\n// It is just for compatibility to other types.\nfunc String(val string) (string, error) {\n\treturn val, nil\n}\n\n// StringSlice converts 'val' where individual strings are separated by\n// 'sep' into a string slice.\nfunc StringSlice(val, sep string) ([]string, error) {\n\treturn strings.Split(val, sep), nil\n}\n\n// Bool converts the given string representation of a boolean value into bool.\nfunc Bool(val string) (bool, error) {\n\treturn strconv.ParseBool(val)\n}\n\n// BoolSlice converts 'val' where individual booleans are separated by\n// 'sep' into a bool slice.\nfunc BoolSlice(val, sep string) ([]bool, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]bool, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Bool(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Float64 converts the given string representation into representation of a floating point number into float64.\nfunc Float64(val string) (float64, error) {\n\treturn strconv.ParseFloat(val, 64)\n}\n\n// Float64Slice converts 'val' where individual floating point numbers are separated by\n// 'sep' into a float64 slice.\nfunc Float64Slice(val, sep string) ([]float64, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]float64, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Float64(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Float32 converts the given string representation of a floating point number into float32.\nfunc Float32(val string) (float32, error) {\n\tf, err := strconv.ParseFloat(val, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn float32(f), nil\n}\n\n// Float32Slice converts 'val' where individual floating point numbers are separated by\n// 'sep' into a float32 slice.\nfunc Float32Slice(val, sep string) ([]float32, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]float32, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Float32(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Int64 converts the given string representation of an integer into int64.\nfunc Int64(val string) (int64, error) {\n\treturn strconv.ParseInt(val, 0, 64)\n}\n\n// Int64Slice converts 'val' where individual integers are separated by\n// 'sep' into an int64 slice.\nfunc Int64Slice(val, sep string) ([]int64, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]int64, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Int64(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Int32 converts the given string representation of an integer into int32.\nfunc Int32(val string) (int32, error) {\n\ti, err := strconv.ParseInt(val, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(i), nil\n}\n\n// Int32Slice converts 'val' where individual integers are separated by\n// 'sep' into an int32 slice.\nfunc Int32Slice(val, sep string) ([]int32, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]int32, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Int32(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Uint64 converts the given string representation of an integer into uint64.\nfunc Uint64(val string) (uint64, error) {\n\treturn strconv.ParseUint(val, 0, 64)\n}\n\n// Uint64Slice converts 'val' where individual integers are separated by\n// 'sep' into a uint64 slice.\nfunc Uint64Slice(val, sep string) ([]uint64, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]uint64, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Uint64(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Uint32 converts the given string representation of an integer into uint32.\nfunc Uint32(val string) (uint32, error) {\n\ti, err := strconv.ParseUint(val, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint32(i), nil\n}\n\n// Uint32Slice converts 'val' where individual integers are separated by\n// 'sep' into a uint32 slice.\nfunc Uint32Slice(val, sep string) ([]uint32, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]uint32, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Uint32(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Bytes converts the given string representation of a byte sequence into a slice of bytes\n// A bytes sequence is encoded in URL-safe base64 without padding\nfunc Bytes(val string) ([]byte, error) {\n\tb, err := base64.StdEncoding.DecodeString(val)\n\tif err != nil {\n\t\tb, err = base64.URLEncoding.DecodeString(val)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn b, nil\n}\n\n// BytesSlice converts 'val' where individual bytes sequences, encoded in URL-safe\n// base64 without padding, are separated by 'sep' into a slice of byte slices.\nfunc BytesSlice(val, sep string) ([][]byte, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([][]byte, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Bytes(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Timestamp converts the given RFC3339 formatted string into a timestamp.Timestamp.\nfunc Timestamp(val string) (*timestamppb.Timestamp, error) {\n\tvar r timestamppb.Timestamp\n\tval = strconv.Quote(strings.Trim(val, `\"`))\n\tunmarshaler := &protojson.UnmarshalOptions{}\n\tif err := unmarshaler.Unmarshal([]byte(val), &r); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &r, nil\n}\n\n// Duration converts the given string into a timestamp.Duration.\nfunc Duration(val string) (*durationpb.Duration, error) {\n\tvar r durationpb.Duration\n\tval = strconv.Quote(strings.Trim(val, `\"`))\n\tunmarshaler := &protojson.UnmarshalOptions{}\n\tif err := unmarshaler.Unmarshal([]byte(val), &r); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &r, nil\n}\n\n// Enum converts the given string into an int32 that should be type casted into the\n// correct enum proto type.\nfunc Enum(val string, enumValMap map[string]int32) (int32, error) {\n\te, ok := enumValMap[val]\n\tif ok {\n\t\treturn e, nil\n\t}\n\n\ti, err := Int32(val)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"%s is not valid\", val)\n\t}\n\tfor _, v := range enumValMap {\n\t\tif v == i {\n\t\t\treturn i, nil\n\t\t}\n\t}\n\treturn 0, fmt.Errorf(\"%s is not valid\", val)\n}\n\n// EnumSlice converts 'val' where individual enums are separated by 'sep'\n// into a int32 slice. Each individual int32 should be type casted into the\n// correct enum proto type.\nfunc EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) {\n\ts := strings.Split(val, sep)\n\tvalues := make([]int32, len(s))\n\tfor i, v := range s {\n\t\tvalue, err := Enum(v, enumValMap)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvalues[i] = value\n\t}\n\treturn values, nil\n}\n\n// Support for google.protobuf.wrappers on top of primitive types\n\n// StringValue well-known type support as wrapper around string type\nfunc StringValue(val string) (*wrapperspb.StringValue, error) {\n\treturn wrapperspb.String(val), nil\n}\n\n// FloatValue well-known type support as wrapper around float32 type\nfunc FloatValue(val string) (*wrapperspb.FloatValue, error) {\n\tparsedVal, err := Float32(val)\n\treturn wrapperspb.Float(parsedVal), err\n}\n\n// DoubleValue well-known type support as wrapper around float64 type\nfunc DoubleValue(val string) (*wrapperspb.DoubleValue, error) {\n\tparsedVal, err := Float64(val)\n\treturn wrapperspb.Double(parsedVal), err\n}\n\n// BoolValue well-known type support as wrapper around bool type\nfunc BoolValue(val string) (*wrapperspb.BoolValue, error) {\n\tparsedVal, err := Bool(val)\n\treturn wrapperspb.Bool(parsedVal), err\n}\n\n// Int32Value well-known type support as wrapper around int32 type\nfunc Int32Value(val string) (*wrapperspb.Int32Value, error) {\n\tparsedVal, err := Int32(val)\n\treturn wrapperspb.Int32(parsedVal), err\n}\n\n// UInt32Value well-known type support as wrapper around uint32 type\nfunc UInt32Value(val string) (*wrapperspb.UInt32Value, error) {\n\tparsedVal, err := Uint32(val)\n\treturn wrapperspb.UInt32(parsedVal), err\n}\n\n// Int64Value well-known type support as wrapper around int64 type\nfunc Int64Value(val string) (*wrapperspb.Int64Value, error) {\n\tparsedVal, err := Int64(val)\n\treturn wrapperspb.Int64(parsedVal), err\n}\n\n// UInt64Value well-known type support as wrapper around uint64 type\nfunc UInt64Value(val string) (*wrapperspb.UInt64Value, error) {\n\tparsedVal, err := Uint64(val)\n\treturn wrapperspb.UInt64(parsedVal), err\n}\n\n// BytesValue well-known type support as wrapper around bytes[] type\nfunc BytesValue(val string) (*wrapperspb.BytesValue, error) {\n\tparsedVal, err := Bytes(val)\n\treturn wrapperspb.Bytes(parsedVal), err\n}\n"
  },
  {
    "path": "runtime/convert_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n)\n\nfunc TestConvertTimestamp(t *testing.T) {\n\tspecs := []struct {\n\t\tname    string\n\t\tinput   string\n\t\toutput  *timestamppb.Timestamp\n\t\twanterr bool\n\t}{\n\t\t{\n\t\t\tname:  \"a valid RFC3339 timestamp\",\n\t\t\tinput: `\"2016-05-10T10:19:13.123Z\"`,\n\t\t\toutput: &timestamppb.Timestamp{\n\t\t\t\tSeconds: 1462875553,\n\t\t\t\tNanos:   123000000,\n\t\t\t},\n\t\t\twanterr: false,\n\t\t},\n\t\t{\n\t\t\tname:  \"a valid RFC3339 timestamp without double quotation\",\n\t\t\tinput: \"2016-05-10T10:19:13.123Z\",\n\t\t\toutput: &timestamppb.Timestamp{\n\t\t\t\tSeconds: 1462875553,\n\t\t\t\tNanos:   123000000,\n\t\t\t},\n\t\t\twanterr: false,\n\t\t},\n\t\t{\n\t\t\tname:    \"invalid timestamp\",\n\t\t\tinput:   `\"05-10-2016T10:19:13.123Z\"`,\n\t\t\toutput:  nil,\n\t\t\twanterr: true,\n\t\t},\n\t\t{\n\t\t\tname:    \"JSON number\",\n\t\t\tinput:   \"123\",\n\t\t\toutput:  nil,\n\t\t\twanterr: true,\n\t\t},\n\t\t{\n\t\t\tname:    \"JSON bool\",\n\t\t\tinput:   \"true\",\n\t\t\toutput:  nil,\n\t\t\twanterr: true,\n\t\t},\n\t}\n\n\tfor _, spec := range specs {\n\t\tt.Run(spec.name, func(t *testing.T) {\n\t\t\tts, err := runtime.Timestamp(spec.input)\n\t\t\tswitch {\n\t\t\tcase err != nil && !spec.wanterr:\n\t\t\t\tt.Errorf(\"got unexpected error\\n%#v\", err)\n\t\t\tcase err == nil && spec.wanterr:\n\t\t\t\tt.Errorf(\"did not error when expected\")\n\t\t\tcase !proto.Equal(ts, spec.output):\n\t\t\t\tt.Errorf(\n\t\t\t\t\t\"when testing %s; got\\n%#v\\nexpected\\n%#v\",\n\t\t\t\t\tspec.name,\n\t\t\t\t\tts,\n\t\t\t\t\tspec.output,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestConvertDuration(t *testing.T) {\n\tspecs := []struct {\n\t\tname    string\n\t\tinput   string\n\t\toutput  *durationpb.Duration\n\t\twanterr bool\n\t}{\n\t\t{\n\t\t\tname:  \"a valid duration\",\n\t\t\tinput: `\"123.456s\"`,\n\t\t\toutput: &durationpb.Duration{\n\t\t\t\tSeconds: 123,\n\t\t\t\tNanos:   456000000,\n\t\t\t},\n\t\t\twanterr: false,\n\t\t},\n\t\t{\n\t\t\tname:  \"a valid duration without double quotation\",\n\t\t\tinput: \"123.456s\",\n\t\t\toutput: &durationpb.Duration{\n\t\t\t\tSeconds: 123,\n\t\t\t\tNanos:   456000000,\n\t\t\t},\n\t\t\twanterr: false,\n\t\t},\n\t\t{\n\t\t\tname:    \"invalid duration\",\n\t\t\tinput:   `\"123years\"`,\n\t\t\toutput:  nil,\n\t\t\twanterr: true,\n\t\t},\n\t\t{\n\t\t\tname:    \"JSON number\",\n\t\t\tinput:   \"123\",\n\t\t\toutput:  nil,\n\t\t\twanterr: true,\n\t\t},\n\t\t{\n\t\t\tname:    \"JSON bool\",\n\t\t\tinput:   \"true\",\n\t\t\toutput:  nil,\n\t\t\twanterr: true,\n\t\t},\n\t}\n\n\tfor _, spec := range specs {\n\t\tt.Run(spec.name, func(t *testing.T) {\n\t\t\tts, err := runtime.Duration(spec.input)\n\t\t\tswitch {\n\t\t\tcase err != nil && !spec.wanterr:\n\t\t\t\tt.Errorf(\"got unexpected error\\n%#v\", err)\n\t\t\tcase err == nil && spec.wanterr:\n\t\t\t\tt.Errorf(\"did not error when expected\")\n\t\t\tcase !proto.Equal(ts, spec.output):\n\t\t\t\tt.Errorf(\n\t\t\t\t\t\"when testing %s; got\\n%#v\\nexpected\\n%#v\",\n\t\t\t\t\tspec.name,\n\t\t\t\t\tts,\n\t\t\t\t\tspec.output,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "runtime/doc.go",
    "content": "/*\nPackage runtime contains runtime helper functions used by\nservers which protoc-gen-grpc-gateway generates.\n*/\npackage runtime\n"
  },
  {
    "path": "runtime/errors.go",
    "content": "package runtime\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// ErrorHandlerFunc is the signature used to configure error handling.\ntype ErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, error)\n\n// StreamErrorHandlerFunc is the signature used to configure stream error handling.\ntype StreamErrorHandlerFunc func(context.Context, error) *status.Status\n\n// RoutingErrorHandlerFunc is the signature used to configure error handling for routing errors.\ntype RoutingErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, int)\n\n// HTTPStatusError is the error to use when needing to provide a different HTTP status code for an error\n// passed to the DefaultRoutingErrorHandler.\ntype HTTPStatusError struct {\n\tHTTPStatus int\n\tErr        error\n}\n\nfunc (e *HTTPStatusError) Error() string {\n\treturn e.Err.Error()\n}\n\n// HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status.\n// See: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto\nfunc HTTPStatusFromCode(code codes.Code) int {\n\tswitch code {\n\tcase codes.OK:\n\t\treturn http.StatusOK\n\tcase codes.Canceled:\n\t\treturn 499\n\tcase codes.Unknown:\n\t\treturn http.StatusInternalServerError\n\tcase codes.InvalidArgument:\n\t\treturn http.StatusBadRequest\n\tcase codes.DeadlineExceeded:\n\t\treturn http.StatusGatewayTimeout\n\tcase codes.NotFound:\n\t\treturn http.StatusNotFound\n\tcase codes.AlreadyExists:\n\t\treturn http.StatusConflict\n\tcase codes.PermissionDenied:\n\t\treturn http.StatusForbidden\n\tcase codes.Unauthenticated:\n\t\treturn http.StatusUnauthorized\n\tcase codes.ResourceExhausted:\n\t\treturn http.StatusTooManyRequests\n\tcase codes.FailedPrecondition:\n\t\t// Note, this deliberately doesn't translate to the similarly named '412 Precondition Failed' HTTP response status.\n\t\treturn http.StatusBadRequest\n\tcase codes.Aborted:\n\t\treturn http.StatusConflict\n\tcase codes.OutOfRange:\n\t\treturn http.StatusBadRequest\n\tcase codes.Unimplemented:\n\t\treturn http.StatusNotImplemented\n\tcase codes.Internal:\n\t\treturn http.StatusInternalServerError\n\tcase codes.Unavailable:\n\t\treturn http.StatusServiceUnavailable\n\tcase codes.DataLoss:\n\t\treturn http.StatusInternalServerError\n\tdefault:\n\t\tgrpclog.Warningf(\"Unknown gRPC error code: %v\", code)\n\t\treturn http.StatusInternalServerError\n\t}\n}\n\n// HTTPError uses the mux-configured error handler.\nfunc HTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) {\n\tmux.errorHandler(ctx, mux, marshaler, w, r, err)\n}\n\n// HTTPStreamError uses the mux-configured stream error handler to notify error to the client without closing the connection.\nfunc HTTPStreamError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) {\n\tst := mux.streamErrorHandler(ctx, err)\n\tmsg := errorChunk(st)\n\tbuf, err := marshaler.Marshal(msg)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to marshal an error: %v\", err)\n\t\treturn\n\t}\n\tif _, err := w.Write(buf); err != nil {\n\t\tgrpclog.Errorf(\"Failed to notify error to client: %v\", err)\n\t\treturn\n\t}\n}\n\n// DefaultHTTPErrorHandler is the default error handler.\n// If \"err\" is a gRPC Status, the function replies with the status code mapped by HTTPStatusFromCode.\n// If \"err\" is a HTTPStatusError, the function replies with the status code provide by that struct. This is\n// intended to allow passing through of specific statuses via the function set via WithRoutingErrorHandler\n// for the ServeMux constructor to handle edge cases which the standard mappings in HTTPStatusFromCode\n// are insufficient for.\n// If otherwise, it replies with http.StatusInternalServerError.\n//\n// The response body written by this function is a Status message marshaled by the Marshaler.\nfunc DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) {\n\t// return Internal when Marshal failed\n\tconst fallback = `{\"code\": 13, \"message\": \"failed to marshal error message\"}`\n\tconst fallbackRewriter = `{\"code\": 13, \"message\": \"failed to rewrite error message\"}`\n\n\tvar customStatus *HTTPStatusError\n\tif errors.As(err, &customStatus) {\n\t\terr = customStatus.Err\n\t}\n\n\ts := status.Convert(err)\n\n\tw.Header().Del(\"Trailer\")\n\tw.Header().Del(\"Transfer-Encoding\")\n\n\trespRw, err := mux.forwardResponseRewriter(ctx, s.Proto())\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to rewrite error message %q: %v\", s, err)\n\t\tw.WriteHeader(http.StatusInternalServerError)\n\t\tif _, err := io.WriteString(w, fallbackRewriter); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to write response: %v\", err)\n\t\t}\n\t\treturn\n\t}\n\n\tcontentType := marshaler.ContentType(respRw)\n\tw.Header().Set(\"Content-Type\", contentType)\n\n\tif s.Code() == codes.Unauthenticated {\n\t\tw.Header().Set(\"WWW-Authenticate\", s.Message())\n\t}\n\n\tbuf, merr := marshaler.Marshal(respRw)\n\tif merr != nil {\n\t\tgrpclog.Errorf(\"Failed to marshal error message %q: %v\", s, merr)\n\t\tw.WriteHeader(http.StatusInternalServerError)\n\t\tif _, err := io.WriteString(w, fallback); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to write response: %v\", err)\n\t\t}\n\t\treturn\n\t}\n\n\tmd, ok := ServerMetadataFromContext(ctx)\n\tif ok {\n\t\thandleForwardResponseServerMetadata(w, mux, md)\n\n\t\t// RFC 7230 https://tools.ietf.org/html/rfc7230#section-4.1.2\n\t\t// Unless the request includes a TE header field indicating \"trailers\"\n\t\t// is acceptable, as described in Section 4.3, a server SHOULD NOT\n\t\t// generate trailer fields that it believes are necessary for the user\n\t\t// agent to receive.\n\t\tdoForwardTrailers := requestAcceptsTrailers(r)\n\n\t\tif doForwardTrailers {\n\t\t\thandleForwardResponseTrailerHeader(w, mux, md)\n\t\t\tw.Header().Set(\"Transfer-Encoding\", \"chunked\")\n\t\t}\n\t}\n\n\tst := HTTPStatusFromCode(s.Code())\n\tif customStatus != nil {\n\t\tst = customStatus.HTTPStatus\n\t}\n\n\tw.WriteHeader(st)\n\tif _, err := w.Write(buf); err != nil {\n\t\tgrpclog.Errorf(\"Failed to write response: %v\", err)\n\t}\n\n\tif ok && requestAcceptsTrailers(r) {\n\t\thandleForwardResponseTrailer(w, mux, md)\n\t}\n}\n\nfunc DefaultStreamErrorHandler(_ context.Context, err error) *status.Status {\n\treturn status.Convert(err)\n}\n\n// DefaultRoutingErrorHandler is our default handler for routing errors.\n// By default http error codes mapped on the following error codes:\n//\n//\tNotFound -> grpc.NotFound\n//\tStatusBadRequest -> grpc.InvalidArgument\n//\tMethodNotAllowed -> grpc.Unimplemented\n//\tOther -> grpc.Internal, method is not expecting to be called for anything else\nfunc DefaultRoutingErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, httpStatus int) {\n\tsterr := status.Error(codes.Internal, \"Unexpected routing error\")\n\tswitch httpStatus {\n\tcase http.StatusBadRequest:\n\t\tsterr = status.Error(codes.InvalidArgument, http.StatusText(httpStatus))\n\tcase http.StatusMethodNotAllowed:\n\t\tsterr = status.Error(codes.Unimplemented, http.StatusText(httpStatus))\n\tcase http.StatusNotFound:\n\t\tsterr = status.Error(codes.NotFound, http.StatusText(httpStatus))\n\t}\n\tmux.errorHandler(ctx, mux, marshaler, w, r, sterr)\n}\n"
  },
  {
    "path": "runtime/errors_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/genproto/googleapis/rpc/errdetails\"\n\tstatuspb \"google.golang.org/genproto/googleapis/rpc/status\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\nfunc TestDefaultHTTPError(t *testing.T) {\n\tctx := context.Background()\n\n\tstatusWithDetails, _ := status.New(codes.FailedPrecondition, \"failed precondition\").WithDetails(\n\t\t&errdetails.PreconditionFailure{},\n\t)\n\n\tfor i, spec := range []struct {\n\t\terr                  error\n\t\tstatus               int\n\t\tmsg                  string\n\t\tmarshaler            runtime.Marshaler\n\t\tcontentType          string\n\t\tdetails              string\n\t\tfordwardRespRewriter runtime.ForwardResponseRewriter\n\t\textractMessage       func(*testing.T)\n\t}{\n\t\t{\n\t\t\terr:         errors.New(\"example error\"),\n\t\t\tstatus:      http.StatusInternalServerError,\n\t\t\tmarshaler:   &runtime.JSONPb{},\n\t\t\tcontentType: \"application/json\",\n\t\t\tmsg:         \"example error\",\n\t\t},\n\t\t{\n\t\t\terr:         status.Error(codes.NotFound, \"no such resource\"),\n\t\t\tstatus:      http.StatusNotFound,\n\t\t\tmarshaler:   &runtime.JSONPb{},\n\t\t\tcontentType: \"application/json\",\n\t\t\tmsg:         \"no such resource\",\n\t\t},\n\t\t{\n\t\t\terr:         statusWithDetails.Err(),\n\t\t\tstatus:      http.StatusBadRequest,\n\t\t\tmarshaler:   &runtime.JSONPb{},\n\t\t\tcontentType: \"application/json\",\n\t\t\tmsg:         \"failed precondition\",\n\t\t\tdetails:     \"type.googleapis.com/google.rpc.PreconditionFailure\",\n\t\t},\n\t\t{\n\t\t\terr:         errors.New(\"example error\"),\n\t\t\tstatus:      http.StatusInternalServerError,\n\t\t\tmarshaler:   &CustomMarshaler{&runtime.JSONPb{}},\n\t\t\tcontentType: \"Custom-Content-Type\",\n\t\t\tmsg:         \"example error\",\n\t\t},\n\t\t{\n\t\t\terr: &runtime.HTTPStatusError{\n\t\t\t\tHTTPStatus: http.StatusMethodNotAllowed,\n\t\t\t\tErr:        status.Error(codes.Unimplemented, http.StatusText(http.StatusMethodNotAllowed)),\n\t\t\t},\n\t\t\tstatus:      http.StatusMethodNotAllowed,\n\t\t\tmarshaler:   &runtime.JSONPb{},\n\t\t\tcontentType: \"application/json\",\n\t\t\tmsg:         \"Method Not Allowed\",\n\t\t},\n\t\t{\n\t\t\terr:         status.Error(codes.InvalidArgument, \"example error\"),\n\t\t\tstatus:      http.StatusBadRequest,\n\t\t\tmarshaler:   &runtime.JSONPb{},\n\t\t\tcontentType: \"application/json\",\n\t\t\tmsg:         \"bad request: example error\",\n\t\t\tfordwardRespRewriter: func(ctx context.Context, response proto.Message) (any, error) {\n\t\t\t\tif s, ok := response.(*statuspb.Status); ok && strings.HasPrefix(s.Message, \"example\") {\n\t\t\t\t\treturn &statuspb.Status{\n\t\t\t\t\t\tCode:    s.Code,\n\t\t\t\t\t\tMessage: \"bad request: \" + s.Message,\n\t\t\t\t\t\tDetails: s.Details,\n\t\t\t\t\t}, nil\n\t\t\t\t}\n\t\t\t\treturn response, nil\n\t\t\t},\n\t\t},\n\t} {\n\t\tt.Run(strconv.Itoa(i), func(t *testing.T) {\n\t\t\tw := httptest.NewRecorder()\n\t\t\treq, _ := http.NewRequestWithContext(ctx, \"\", \"\", nil) // Pass in an empty request to match the signature\n\n\t\t\topts := []runtime.ServeMuxOption{}\n\t\t\tif spec.fordwardRespRewriter != nil {\n\t\t\t\topts = append(opts, runtime.WithForwardResponseRewriter(spec.fordwardRespRewriter))\n\t\t\t}\n\t\t\tmux := runtime.NewServeMux(opts...)\n\n\t\t\truntime.HTTPError(ctx, mux, spec.marshaler, w, req, spec.err)\n\n\t\t\tif got, want := w.Header().Get(\"Content-Type\"), spec.contentType; got != want {\n\t\t\t\tt.Errorf(`w.Header().Get(\"Content-Type\") = %q; want %q; on spec.err=%v`, got, want, spec.err)\n\t\t\t}\n\t\t\tif got, want := w.Code, spec.status; got != want {\n\t\t\t\tt.Errorf(\"w.Code = %d; want %d\", got, want)\n\t\t\t}\n\n\t\t\tvar st statuspb.Status\n\t\t\tif err := spec.marshaler.Unmarshal(w.Body.Bytes(), &st); err != nil {\n\t\t\t\tt.Errorf(\"marshaler.Unmarshal(%q, &body) failed with %v; want success\", w.Body.Bytes(), err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif got, want := st.Message, spec.msg; !strings.Contains(got, want) {\n\t\t\t\tt.Errorf(`st.Message = %q; want %q; on spec.err=%v`, got, want, spec.err)\n\t\t\t}\n\n\t\t\tif spec.details != \"\" {\n\t\t\t\tif len(st.Details) != 1 {\n\t\t\t\t\tt.Errorf(`len(st.Details) = %v; want 1`, len(st.Details))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif st.Details[0].TypeUrl != spec.details {\n\t\t\t\t\tt.Errorf(`details.type_url = %s; want %s`, st.Details[0].TypeUrl, spec.details)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestHTTPStreamError(t *testing.T) {\n\tctx := context.Background()\n\n\tfor _, tc := range []struct {\n\t\tname             string\n\t\terr              error\n\t\texpectedStatus   *status.Status\n\t\texpectedResponse []byte\n\t}{\n\t\t{\n\t\t\tname:             \"Simple error\",\n\t\t\terr:              errors.New(\"simple error\"),\n\t\t\texpectedStatus:   status.New(codes.Unknown, \"simple error\"),\n\t\t\texpectedResponse: []byte(`{\"error\":{\"code\":2,\"message\":\"simple error\"}}`),\n\t\t},\n\t\t{\n\t\t\tname:             \"Invalid request error\",\n\t\t\terr:              status.Error(codes.InvalidArgument, \"invalid request\"),\n\t\t\texpectedStatus:   status.New(codes.InvalidArgument, \"invalid request\"),\n\t\t\texpectedResponse: []byte(`{\"error\":{\"code\":3,\"message\":\"invalid request\"}}`),\n\t\t},\n\t} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tw := httptest.NewRecorder()\n\t\t\tr := httptest.NewRequest(\"GET\", \"/\", nil)\n\n\t\t\tmux := runtime.NewServeMux(runtime.WithStreamErrorHandler(\n\t\t\t\truntime.DefaultStreamErrorHandler,\n\t\t\t))\n\n\t\t\tmarshaler := &runtime.JSONPb{}\n\n\t\t\truntime.HTTPStreamError(ctx, mux, marshaler, w, r, tc.err)\n\n\t\t\tif w.Code != http.StatusOK {\n\t\t\t\tt.Errorf(\"Expected status code %d, got %d\", http.StatusOK, w.Code)\n\t\t\t}\n\n\t\t\tif !proto.Equal(status.Convert(tc.err).Proto(), tc.expectedStatus.Proto()) {\n\t\t\t\tt.Errorf(\"Expected status %v, got %v\", tc.expectedStatus, status.Convert(tc.err))\n\t\t\t}\n\n\t\t\tif !bytes.Equal(w.Body.Bytes(), tc.expectedResponse) {\n\t\t\t\tt.Errorf(\"Expected response %s, got %s\", tc.expectedResponse, w.Body.Bytes())\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "runtime/fieldmask.go",
    "content": "package runtime\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\tfield_mask \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n)\n\nfunc getFieldByName(fields protoreflect.FieldDescriptors, name string) protoreflect.FieldDescriptor {\n\tfd := fields.ByName(protoreflect.Name(name))\n\tif fd != nil {\n\t\treturn fd\n\t}\n\n\treturn fields.ByJSONName(name)\n}\n\n// FieldMaskFromRequestBody creates a FieldMask printing all complete paths from the JSON body.\nfunc FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.FieldMask, error) {\n\tfm := &field_mask.FieldMask{}\n\tvar root interface{}\n\n\tif err := json.NewDecoder(r).Decode(&root); err != nil {\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn fm, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tqueue := []fieldMaskPathItem{{node: root, msg: msg.ProtoReflect()}}\n\tfor len(queue) > 0 {\n\t\t// dequeue an item\n\t\titem := queue[0]\n\t\tqueue = queue[1:]\n\n\t\tm, ok := item.node.(map[string]interface{})\n\t\tswitch {\n\t\tcase ok && len(m) > 0:\n\t\t\t// if the item is an object, then enqueue all of its children\n\t\t\tfor k, v := range m {\n\t\t\t\tif item.msg == nil {\n\t\t\t\t\treturn nil, errors.New(\"JSON structure did not match request type\")\n\t\t\t\t}\n\n\t\t\t\tfd := getFieldByName(item.msg.Descriptor().Fields(), k)\n\t\t\t\tif fd == nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"could not find field %q in %q\", k, item.msg.Descriptor().FullName())\n\t\t\t\t}\n\n\t\t\t\tif isDynamicProtoMessage(fd.Message()) {\n\t\t\t\t\tfor _, p := range buildPathsBlindly(string(fd.FullName().Name()), v) {\n\t\t\t\t\t\tnewPath := p\n\t\t\t\t\t\tif item.path != \"\" {\n\t\t\t\t\t\t\tnewPath = item.path + \".\" + newPath\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqueue = append(queue, fieldMaskPathItem{path: newPath})\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif isProtobufAnyMessage(fd.Message()) && !fd.IsList() {\n\t\t\t\t\t_, hasTypeField := v.(map[string]interface{})[\"@type\"]\n\t\t\t\t\tif hasTypeField {\n\t\t\t\t\t\tqueue = append(queue, fieldMaskPathItem{path: k})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"could not find field @type in %q in message %q\", k, item.msg.Descriptor().FullName())\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tchild := fieldMaskPathItem{\n\t\t\t\t\tnode: v,\n\t\t\t\t}\n\t\t\t\tif item.path == \"\" {\n\t\t\t\t\tchild.path = string(fd.FullName().Name())\n\t\t\t\t} else {\n\t\t\t\t\tchild.path = item.path + \".\" + string(fd.FullName().Name())\n\t\t\t\t}\n\n\t\t\t\tswitch {\n\t\t\t\tcase fd.IsList(), fd.IsMap():\n\t\t\t\t\t// As per: https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_mask.proto#L85-L86\n\t\t\t\t\t// Do not recurse into repeated fields. The repeated field goes on the end of the path and we stop.\n\t\t\t\t\tfm.Paths = append(fm.Paths, child.path)\n\t\t\t\tcase fd.Message() != nil:\n\t\t\t\t\tchild.msg = item.msg.Get(fd).Message()\n\t\t\t\t\tfallthrough\n\t\t\t\tdefault:\n\t\t\t\t\tqueue = append(queue, child)\n\t\t\t\t}\n\t\t\t}\n\t\tcase ok && len(m) == 0:\n\t\t\tfallthrough\n\t\tcase len(item.path) > 0:\n\t\t\t// otherwise, it's a leaf node so print its path\n\t\t\tfm.Paths = append(fm.Paths, item.path)\n\t\t}\n\t}\n\n\t// Sort for deterministic output in the presence\n\t// of repeated fields.\n\tsort.Strings(fm.Paths)\n\n\treturn fm, nil\n}\n\nfunc isProtobufAnyMessage(md protoreflect.MessageDescriptor) bool {\n\treturn md != nil && (md.FullName() == \"google.protobuf.Any\")\n}\n\nfunc isDynamicProtoMessage(md protoreflect.MessageDescriptor) bool {\n\treturn md != nil && (md.FullName() == \"google.protobuf.Struct\" || md.FullName() == \"google.protobuf.Value\")\n}\n\n// buildPathsBlindly does not attempt to match proto field names to the\n// json value keys.  Instead it relies completely on the structure of\n// the unmarshalled json contained within in.\n// Returns a slice containing all subpaths with the root at the\n// passed in name and json value.\nfunc buildPathsBlindly(name string, in interface{}) []string {\n\tm, ok := in.(map[string]interface{})\n\tif !ok {\n\t\treturn []string{name}\n\t}\n\n\tvar paths []string\n\tqueue := []fieldMaskPathItem{{path: name, node: m}}\n\tfor len(queue) > 0 {\n\t\tcur := queue[0]\n\t\tqueue = queue[1:]\n\n\t\tm, ok := cur.node.(map[string]interface{})\n\t\tif !ok {\n\t\t\t// This should never happen since we should always check that we only add\n\t\t\t// nodes of type map[string]interface{} to the queue.\n\t\t\tcontinue\n\t\t}\n\t\tfor k, v := range m {\n\t\t\tif mi, ok := v.(map[string]interface{}); ok {\n\t\t\t\tqueue = append(queue, fieldMaskPathItem{path: cur.path + \".\" + k, node: mi})\n\t\t\t} else {\n\t\t\t\t// This is not a struct, so there are no more levels to descend.\n\t\t\t\tcurPath := cur.path + \".\" + k\n\t\t\t\tpaths = append(paths, curPath)\n\t\t\t}\n\t\t}\n\t}\n\treturn paths\n}\n\n// fieldMaskPathItem stores an in-progress deconstruction of a path for a fieldmask\ntype fieldMaskPathItem struct {\n\t// the list of prior fields leading up to node connected by dots\n\tpath string\n\n\t// a generic decoded json object the current item to inspect for further path extraction\n\tnode interface{}\n\n\t// parent message\n\tmsg protoreflect.Message\n}\n"
  },
  {
    "path": "runtime/fieldmask_test.go",
    "content": "package runtime\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"testing\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/google/go-cmp/cmp/cmpopts\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/testing/protocmp\"\n\tfield_mask \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n)\n\nfunc newFieldMask(paths ...string) *field_mask.FieldMask {\n\treturn &field_mask.FieldMask{Paths: paths}\n}\n\nfunc TestFieldMaskFromRequestBody(t *testing.T) {\n\tfor _, tc := range []struct {\n\t\tname     string\n\t\tinput    string\n\t\tmsg      proto.Message\n\t\texpected *field_mask.FieldMask\n\t}{\n\t\t{\n\t\t\tname:     \"empty\",\n\t\t\texpected: newFieldMask(),\n\t\t},\n\t\t{\n\t\t\tname:     \"EmptyMessage\",\n\t\t\tmsg:      &examplepb.ABitOfEverything{},\n\t\t\tinput:    `{\"oneof_empty\": {}}`,\n\t\t\texpected: newFieldMask(\"oneof_empty\"),\n\t\t},\n\t\t{\n\t\t\tname:     \"simple\",\n\t\t\tmsg:      &examplepb.ABitOfEverything{},\n\t\t\tinput:    `{\"uuid\":\"1234\", \"floatValue\":3.14}`,\n\t\t\texpected: newFieldMask(\"uuid\", \"float_value\"),\n\t\t},\n\t\t{\n\t\t\tname:     \"NonStandardMessage\",\n\t\t\tmsg:      &examplepb.NonStandardMessage{},\n\t\t\tinput:    `{\"id\":\"foo\", \"thing\":{\"subThing\":{\"sub_value\":\"bar\"}}}`,\n\t\t\texpected: newFieldMask(\"id\", \"thing.subThing.sub_value\"),\n\t\t},\n\t\t{\n\t\t\tname:     \"NonStandardMessageWithJSONNames\",\n\t\t\tmsg:      &examplepb.NonStandardMessageWithJSONNames{},\n\t\t\tinput:    `{\"ID\":\"foo\", \"Thingy\":{\"SubThing\":{\"sub_Value\":\"bar\"}}}`,\n\t\t\texpected: newFieldMask(\"id\", \"thing.subThing.sub_value\"),\n\t\t},\n\t\t{\n\t\t\tname: \"nested\",\n\n\t\t\tmsg:      &examplepb.ABitOfEverything{},\n\t\t\tinput:    `{\"single_nested\": {\"name\":\"bob\", \"amount\": 2}, \"uuid\":\"1234\"}`,\n\t\t\texpected: newFieldMask(\"single_nested.name\", \"single_nested.amount\", \"uuid\"),\n\t\t},\n\t\t{\n\t\t\tname:     \"struct\",\n\t\t\tmsg:      &examplepb.NonStandardMessage{},\n\t\t\tinput:    `{\"struct_field\": {\"name\":{\"first\": \"bob\"}, \"amount\": 2}}`,\n\t\t\texpected: newFieldMask(\"struct_field.name.first\", \"struct_field.amount\"),\n\t\t},\n\t\t{\n\t\t\tname:     \"NonStandardMessageWithJSONNamesForStruct\",\n\t\t\tmsg:      &examplepb.NonStandardMessage{},\n\t\t\tinput:    `{\"lineNum\": 123, \"structField\": {\"name\":\"bob\"}}`,\n\t\t\texpected: newFieldMask(\"line_num\", \"struct_field.name\"),\n\t\t},\n\t\t{\n\t\t\tname:     \"value\",\n\t\t\tmsg:      &examplepb.NonStandardMessage{},\n\t\t\tinput:    `{\"value_field\": {\"name\":{\"first\": \"bob\"}, \"amount\": 2}}`,\n\t\t\texpected: newFieldMask(\"value_field.name.first\", \"value_field.amount\"),\n\t\t},\n\t\t{\n\t\t\tname: \"map\",\n\n\t\t\tmsg:      &examplepb.ABitOfEverything{},\n\t\t\tinput:    `{\"mapped_string_value\": {\"a\": \"x\"}}`,\n\t\t\texpected: newFieldMask(\"mapped_string_value\"),\n\t\t},\n\t\t{\n\t\t\tname:     \"deeply-nested\",\n\t\t\tmsg:      &examplepb.NestedOuter{},\n\t\t\tinput:    `{\"one\":{\"two\":{\"three\":{\"a\":true, \"b\":false}}}}`,\n\t\t\texpected: newFieldMask(\"one.two.three.a\", \"one.two.three.b\"),\n\t\t},\n\t\t{\n\t\t\tname: \"complex\",\n\t\t\tinput: `\n\t\t\t{\n\t\t\t\t\"single_nested\": {\n\t\t\t\t\t\"name\": \"bar\",\n\t\t\t\t\t\"amount\": 10,\n\t\t\t\t\t\"ok\": \"TRUE\"\n\t\t\t\t},\n\t\t\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\t\t\"nested\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"bar\",\n\t\t\t\t\t\t\"amount\": 10\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"baz\",\n\t\t\t\t\t\t\"amount\": 20\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"float_value\": 1.5,\n\t\t\t\t\"double_value\": 2.5,\n\t\t\t\t\"int64_value\": 4294967296,\n\t\t\t\t\"int64_override_type\": 12345,\n\t\t\t\t\"int32_value\": -2147483648,\n\t\t\t\t\"uint64_value\": 9223372036854775807,\n\t\t\t\t\"uint32_value\": 4294967295,\n\t\t\t\t\"fixed64_value\": 9223372036854775807,\n\t\t\t\t\"fixed32_value\": 4294967295,\n\t\t\t\t\"sfixed64_value\": -4611686018427387904,\n\t\t\t\t\"sfixed32_value\": 2147483647,\n\t\t\t\t\"sint64_value\": 4611686018427387903,\n\t\t\t\t\"sint32_value\": 2147483647,\n\t\t\t\t\"bool_value\": true,\n\t\t\t\t\"string_value\": \"strprefix/foo\",\n\t\t\t\t\"bytes_value\": \"132456\",\n\t\t\t\t\"enum_value\": \"ONE\",\n\t\t\t\t\"oneof_string\": \"x\",\n\t\t\t\t\"nonConventionalNameValue\": \"camelCase\",\n\t\t\t\t\"timestamp_value\": \"2016-05-10T10:19:13.123Z\",\n\t\t\t\t\"enum_value_annotation\": \"ONE\",\n\t\t\t\t\"nested_annotation\": {\n\t\t\t\t\t\"name\": \"hoge\",\n\t\t\t\t\t\"amount\": 10\n\t\t\t\t}\n\t\t\t}\n`,\n\t\t\tmsg: &examplepb.ABitOfEverything{},\n\n\t\t\texpected: newFieldMask(\n\t\t\t\t\"single_nested.name\",\n\t\t\t\t\"single_nested.amount\",\n\t\t\t\t\"single_nested.ok\",\n\t\t\t\t\"uuid\",\n\t\t\t\t\"float_value\",\n\t\t\t\t\"double_value\",\n\t\t\t\t\"int64_value\",\n\t\t\t\t\"int64_override_type\",\n\t\t\t\t\"int32_value\",\n\t\t\t\t\"uint64_value\",\n\t\t\t\t\"uint32_value\",\n\t\t\t\t\"fixed64_value\",\n\t\t\t\t\"fixed32_value\",\n\t\t\t\t\"sfixed64_value\",\n\t\t\t\t\"sfixed32_value\",\n\t\t\t\t\"sint64_value\",\n\t\t\t\t\"sint32_value\",\n\t\t\t\t\"bool_value\",\n\t\t\t\t\"string_value\",\n\t\t\t\t\"bytes_value\",\n\t\t\t\t\"enum_value\",\n\t\t\t\t\"oneof_string\",\n\t\t\t\t\"nonConventionalNameValue\",\n\t\t\t\t\"timestamp_value\",\n\t\t\t\t\"enum_value_annotation\",\n\t\t\t\t\"nested_annotation.name\",\n\t\t\t\t\"nested_annotation.amount\",\n\t\t\t\t\"nested\",\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tname:     \"protobuf-any\",\n\t\t\tmsg:      &examplepb.ABitOfEverything{},\n\t\t\tinput:    `{\"anytype\":{\"@type\": \"xx.xx/examplepb.NestedOuter\", \"one\":{\"two\":{\"three\":{\"a\":true, \"b\":false}}}}}`,\n\t\t\texpected: newFieldMask(\"anytype\"), //going deeper makes no sense\n\t\t},\n\t\t{\n\t\t\tname:     \"repeated-protobuf-any\",\n\t\t\tmsg:      &examplepb.ABitOfEverything{},\n\t\t\tinput:    `{\"repeated_anytype\":[{\"@type\": \"xx.xx/examplepb.NestedOuter\", \"one\":{\"two\":{\"three\":{\"a\":true, \"b\":false}}}}]}`,\n\t\t\texpected: newFieldMask(\"repeated_anytype\"), //going deeper makes no sense\n\t\t},\n\t} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tactual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), tc.msg)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expected, actual, protocmp.Transform(), cmpopts.SortSlices(func(x, y string) bool {\n\t\t\t\treturn x < y\n\t\t\t})); diff != \"\" {\n\t\t\t\tt.Errorf(\"field masks differed:\\n%s\", diff)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestFieldMaskRepeatedFieldsLast(t *testing.T) {\n\tfor _, tc := range []struct {\n\t\tname     string\n\t\tinput    string\n\t\texpected *field_mask.FieldMask\n\t}{\n\t\t{\n\t\t\tname:  \"map\",\n\t\t\tinput: `{\"mapped_string_value\": {\"a\": \"x\"}, \"repeated_string_value\": {\"b\": \"y\"}, \"uuid\":\"1234\"}`,\n\t\t\texpected: &field_mask.FieldMask{\n\t\t\t\tPaths: []string{\n\t\t\t\t\t\"mapped_string_value\",\n\t\t\t\t\t\"repeated_string_value\",\n\t\t\t\t\t\"uuid\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"slice\",\n\t\t\tinput: `\n\t\t\t{\n\t\t\t\t\"nested\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"bar\",\n\t\t\t\t\t\t\"amount\": 10\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"baz\",\n\t\t\t\t\t\t\"amount\": 20\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"nested_annotation\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"amount\": 100\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"widget\",\n\t\t\t\t\t\t\"amount\": 200\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"uuid\":\"1234\"\n\t\t\t}`,\n\t\t\texpected: &field_mask.FieldMask{\n\t\t\t\tPaths: []string{\n\t\t\t\t\t\"nested\",\n\t\t\t\t\t\"nested_annotation\",\n\t\t\t\t\t\"uuid\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tactual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), &examplepb.ABitOfEverything{})\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expected, actual, protocmp.Transform()); diff != \"\" {\n\t\t\t\tt.Errorf(\"field masks differed:\\n%s\", diff)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestFieldMaskErrors(t *testing.T) {\n\tfor _, tc := range []struct {\n\t\tname        string\n\t\tinput       string\n\t\texpectedErr error\n\t}{\n\t\t{\n\t\t\tname:        \"object under scalar\",\n\t\t\tinput:       `{\"uuid\": {\"a\": \"x\"}}`,\n\t\t\texpectedErr: errors.New(\"JSON structure did not match request type\"),\n\t\t},\n\t} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\t_, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), &examplepb.ABitOfEverything{})\n\t\t\tif err.Error() != tc.expectedErr.Error() {\n\t\t\t\tt.Fatalf(\"errors did not match: got %q, wanted %q\", err, tc.expectedErr)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// avoid compiler optimising benchmark away\nvar result *field_mask.FieldMask\n\nfunc BenchmarkABEFieldMaskFromRequestBody(b *testing.B) {\n\tinput := `{` +\n\t\t`\"single_nested\":\t\t\t\t{\"name\": \"bar\",` +\n\t\t`                           \t \"amount\": 10,` +\n\t\t`                           \t \"ok\": \"TRUE\"},` +\n\t\t`\"uuid\":\t\t\t\t\t\t\"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",` +\n\t\t`\"nested\": \t\t\t\t\t\t[{\"name\": \"bar\",` +\n\t\t`\t\t\t\t\t\t\t\t  \"amount\": 10},` +\n\t\t`\t\t\t\t\t\t\t\t {\"name\": \"baz\",` +\n\t\t`\t\t\t\t\t\t\t\t  \"amount\": 20}],` +\n\t\t`\"float_value\":             \t1.5,` +\n\t\t`\"double_value\":            \t2.5,` +\n\t\t`\"int64_value\":             \t4294967296,` +\n\t\t`\"uint64_value\":            \t9223372036854775807,` +\n\t\t`\"int32_value\":             \t-2147483648,` +\n\t\t`\"fixed64_value\":           \t9223372036854775807,` +\n\t\t`\"fixed32_value\":           \t4294967295,` +\n\t\t`\"bool_value\":              \ttrue,` +\n\t\t`\"string_value\":            \t\"strprefix/foo\",` +\n\t\t`\"bytes_value\":\t\t\t\t\t\"132456\",` +\n\t\t`\"uint32_value\":            \t4294967295,` +\n\t\t`\"enum_value\":     \t\t        \"ONE\",` +\n\t\t`\"path_enum_value\":\t    \t    \"DEF\",` +\n\t\t`\"nested_path_enum_value\":  \t\"JKL\",` +\n\t\t`\"sfixed32_value\":          \t2147483647,` +\n\t\t`\"sfixed64_value\":          \t-4611686018427387904,` +\n\t\t`\"sint32_value\":            \t2147483647,` +\n\t\t`\"sint64_value\":            \t4611686018427387903,` +\n\t\t`\"repeated_string_value\": \t\t[\"a\", \"b\", \"c\"],` +\n\t\t`\"oneof_value\":\t\t\t\t\t{\"oneof_string\":\"x\"},` +\n\t\t`\"map_value\": \t\t\t\t\t{\"a\": \"ONE\",` +\n\t\t`\t\t\t\t\t\t\t\t \"b\": \"ZERO\"},` +\n\t\t`\"mapped_string_value\": \t\t{\"a\": \"x\",` +\n\t\t`\t\t\t\t\t\t\t\t \"b\": \"y\"},` +\n\t\t`\"mapped_nested_value\": \t\t{\"a\": {\"name\": \"x\", \"amount\": 1},` +\n\t\t`\t\t\t\t\t\t\t\t \"b\": {\"name\": \"y\", \"amount\": 2}},` +\n\t\t`\"nonConventionalNameValue\":\t\"camelCase\",` +\n\t\t`\"timestamp_value\":\t\t\t\t\"2016-05-10T10:19:13.123Z\",` +\n\t\t`\"repeated_enum_value\":\t\t\t[\"ONE\", \"ZERO\"],` +\n\t\t`\"repeated_enum_annotation\":\t [\"ONE\", \"ZERO\"],` +\n\t\t`\"enum_value_annotation\": \t\t\"ONE\",` +\n\t\t`\"repeated_string_annotation\":\t[\"a\", \"b\"],` +\n\t\t`\"repeated_nested_annotation\": \t[{\"name\": \"hoge\",` +\n\t\t`\t\t\t\t\t\t\t\t  \"amount\": 10},` +\n\t\t`\t\t\t\t\t\t\t\t {\"name\": \"fuga\",` +\n\t\t`\t\t\t\t\t\t\t\t  \"amount\": 20}],` +\n\t\t`\"nested_annotation\": \t\t\t{\"name\": \"hoge\",` +\n\t\t`\t\t\t\t\t\t\t\t \"amount\": 10},` +\n\t\t`\"int64_override_type\":\t\t\t12345` +\n\t\t`}`\n\tvar r *field_mask.FieldMask\n\tvar err error\n\tfor i := 0; i < b.N; i++ {\n\t\tr, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), nil)\n\t}\n\tif err != nil {\n\t\tb.Error(err)\n\t}\n\tresult = r\n}\n\nfunc BenchmarkNonStandardFieldMaskFromRequestBody(b *testing.B) {\n\tinput := `{` +\n\t\t`\"id\":\t\t\t\"foo\",` +\n\t\t`\"Num\": \t\t2,` +\n\t\t`\"line_num\": \t3,` +\n\t\t`\"langIdent\":\t\"bar\",` +\n\t\t`\"STATUS\": \t\t\"baz\"` +\n\t\t`}`\n\tvar r *field_mask.FieldMask\n\tvar err error\n\tfor i := 0; i < b.N; i++ {\n\t\tr, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), nil)\n\t}\n\tif err != nil {\n\t\tb.Error(err)\n\t}\n\tresult = r\n}\n"
  },
  {
    "path": "runtime/handler.go",
    "content": "package runtime\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"google.golang.org/genproto/googleapis/api/httpbody\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// ForwardResponseStream forwards the stream from gRPC server to REST client.\nfunc ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error) {\n\trc := http.NewResponseController(w)\n\tmd, ok := ServerMetadataFromContext(ctx)\n\tif !ok {\n\t\tgrpclog.Error(\"Failed to extract ServerMetadata from context\")\n\t\thttp.Error(w, \"unexpected error\", http.StatusInternalServerError)\n\t\treturn\n\t}\n\thandleForwardResponseServerMetadata(w, mux, md)\n\n\tif !mux.disableChunkedEncoding {\n\t\tw.Header().Set(\"Transfer-Encoding\", \"chunked\")\n\t}\n\tif err := handleForwardResponseOptions(ctx, w, nil, opts); err != nil {\n\t\tHTTPError(ctx, mux, marshaler, w, req, err)\n\t\treturn\n\t}\n\n\tvar delimiter []byte\n\tif d, ok := marshaler.(Delimited); ok {\n\t\tdelimiter = d.Delimiter()\n\t} else {\n\t\tdelimiter = []byte(\"\\n\")\n\t}\n\n\tvar wroteHeader bool\n\tfor {\n\t\tresp, err := recv()\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn\n\t\t}\n\t\tif err != nil {\n\t\t\thandleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter)\n\t\t\treturn\n\t\t}\n\t\tif err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil {\n\t\t\thandleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter)\n\t\t\treturn\n\t\t}\n\n\t\trespRw, err := mux.forwardResponseRewriter(ctx, resp)\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Rewrite error: %v\", err)\n\t\t\thandleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter)\n\t\t\treturn\n\t\t}\n\n\t\tif !wroteHeader {\n\t\t\tvar contentType string\n\t\t\tif sct, ok := marshaler.(StreamContentType); ok {\n\t\t\t\tcontentType = sct.StreamContentType(respRw)\n\t\t\t} else {\n\t\t\t\tcontentType = marshaler.ContentType(respRw)\n\t\t\t}\n\t\t\tw.Header().Set(\"Content-Type\", contentType)\n\t\t}\n\n\t\tvar buf []byte\n\t\thttpBody, isHTTPBody := respRw.(*httpbody.HttpBody)\n\t\tswitch {\n\t\tcase respRw == nil:\n\t\t\tbuf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, \"empty response\")))\n\t\tcase isHTTPBody:\n\t\t\tbuf = httpBody.GetData()\n\t\tdefault:\n\t\t\tresult := map[string]interface{}{\"result\": respRw}\n\t\t\tif rb, ok := respRw.(responseBody); ok {\n\t\t\t\tresult[\"result\"] = rb.XXX_ResponseBody()\n\t\t\t}\n\n\t\t\tbuf, err = marshaler.Marshal(result)\n\t\t}\n\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to marshal response chunk: %v\", err)\n\t\t\thandleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter)\n\t\t\treturn\n\t\t}\n\t\tif _, err := w.Write(buf); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to send response chunk: %v\", err)\n\t\t\treturn\n\t\t}\n\t\twroteHeader = true\n\t\tif _, err := w.Write(delimiter); err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to send delimiter chunk: %v\", err)\n\t\t\treturn\n\t\t}\n\t\terr = rc.Flush()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, http.ErrNotSupported) {\n\t\t\t\tgrpclog.Errorf(\"Flush not supported in %T\", w)\n\t\t\t\thttp.Error(w, \"unexpected type of web server\", http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgrpclog.Errorf(\"Failed to flush response to client: %v\", err)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc handleForwardResponseServerMetadata(w http.ResponseWriter, mux *ServeMux, md ServerMetadata) {\n\tfor k, vs := range md.HeaderMD {\n\t\tif h, ok := mux.outgoingHeaderMatcher(k); ok {\n\t\t\tfor _, v := range vs {\n\t\t\t\tw.Header().Add(h, v)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc handleForwardResponseTrailerHeader(w http.ResponseWriter, mux *ServeMux, md ServerMetadata) {\n\tfor k := range md.TrailerMD {\n\t\tif h, ok := mux.outgoingTrailerMatcher(k); ok {\n\t\t\tw.Header().Add(\"Trailer\", textproto.CanonicalMIMEHeaderKey(h))\n\t\t}\n\t}\n}\n\nfunc handleForwardResponseTrailer(w http.ResponseWriter, mux *ServeMux, md ServerMetadata) {\n\tfor k, vs := range md.TrailerMD {\n\t\tif h, ok := mux.outgoingTrailerMatcher(k); ok {\n\t\t\tfor _, v := range vs {\n\t\t\t\tw.Header().Add(h, v)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// responseBody interface contains method for getting field for marshaling to the response body\n// this method is generated for response struct from the value of `response_body` in the `google.api.HttpRule`\ntype responseBody interface {\n\tXXX_ResponseBody() interface{}\n}\n\n// ForwardResponseMessage forwards the message \"resp\" from gRPC server to REST client.\nfunc ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) {\n\tmd, ok := ServerMetadataFromContext(ctx)\n\tif ok {\n\t\thandleForwardResponseServerMetadata(w, mux, md)\n\t}\n\n\t// RFC 7230 https://tools.ietf.org/html/rfc7230#section-4.1.2\n\t// Unless the request includes a TE header field indicating \"trailers\"\n\t// is acceptable, as described in Section 4.3, a server SHOULD NOT\n\t// generate trailer fields that it believes are necessary for the user\n\t// agent to receive.\n\tdoForwardTrailers := requestAcceptsTrailers(req)\n\n\tif ok && doForwardTrailers {\n\t\thandleForwardResponseTrailerHeader(w, mux, md)\n\t\tw.Header().Set(\"Transfer-Encoding\", \"chunked\")\n\t}\n\n\tcontentType := marshaler.ContentType(resp)\n\tw.Header().Set(\"Content-Type\", contentType)\n\n\tif err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil {\n\t\tHTTPError(ctx, mux, marshaler, w, req, err)\n\t\treturn\n\t}\n\trespRw, err := mux.forwardResponseRewriter(ctx, resp)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Rewrite error: %v\", err)\n\t\tHTTPError(ctx, mux, marshaler, w, req, err)\n\t\treturn\n\t}\n\tvar buf []byte\n\tif rb, ok := respRw.(responseBody); ok {\n\t\tbuf, err = marshaler.Marshal(rb.XXX_ResponseBody())\n\t} else {\n\t\tbuf, err = marshaler.Marshal(respRw)\n\t}\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Marshal error: %v\", err)\n\t\tHTTPError(ctx, mux, marshaler, w, req, err)\n\t\treturn\n\t}\n\n\tif !doForwardTrailers && mux.writeContentLength {\n\t\tw.Header().Set(\"Content-Length\", strconv.Itoa(len(buf)))\n\t}\n\n\tif _, err = w.Write(buf); err != nil && !errors.Is(err, http.ErrBodyNotAllowed) {\n\t\tgrpclog.Errorf(\"Failed to write response: %v\", err)\n\t}\n\n\tif ok && doForwardTrailers {\n\t\thandleForwardResponseTrailer(w, mux, md)\n\t}\n}\n\nfunc requestAcceptsTrailers(req *http.Request) bool {\n\tte := req.Header.Get(\"TE\")\n\treturn strings.Contains(strings.ToLower(te), \"trailers\")\n}\n\nfunc handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, resp proto.Message, opts []func(context.Context, http.ResponseWriter, proto.Message) error) error {\n\tif len(opts) == 0 {\n\t\treturn nil\n\t}\n\tfor _, opt := range opts {\n\t\tif err := opt(ctx, w, resp); err != nil {\n\t\t\treturn fmt.Errorf(\"error handling ForwardResponseOptions: %w\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, req *http.Request, mux *ServeMux, err error, delimiter []byte) {\n\tst := mux.streamErrorHandler(ctx, err)\n\tmsg := errorChunk(st)\n\tif !wroteHeader {\n\t\tw.Header().Set(\"Content-Type\", marshaler.ContentType(msg))\n\t\tw.WriteHeader(HTTPStatusFromCode(st.Code()))\n\t}\n\tbuf, err := marshaler.Marshal(msg)\n\tif err != nil {\n\t\tgrpclog.Errorf(\"Failed to marshal an error: %v\", err)\n\t\treturn\n\t}\n\tif _, err := w.Write(buf); err != nil {\n\t\tgrpclog.Errorf(\"Failed to notify error to client: %v\", err)\n\t\treturn\n\t}\n\tif _, err := w.Write(delimiter); err != nil {\n\t\tgrpclog.Errorf(\"Failed to send delimiter chunk: %v\", err)\n\t\treturn\n\t}\n}\n\nfunc errorChunk(st *status.Status) map[string]proto.Message {\n\treturn map[string]proto.Message{\"error\": st.Proto()}\n}\n"
  },
  {
    "path": "runtime/handler_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"reflect\"\n\t\"sort\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\tpb \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\ntype fakeResponseBodyWrapper struct {\n\tproto.Message\n}\n\n// XXX_ResponseBody returns id of SimpleMessage\nfunc (r fakeResponseBodyWrapper) XXX_ResponseBody() interface{} {\n\tresp := r.Message.(*pb.SimpleMessage)\n\treturn resp.Id\n}\n\nfunc TestForwardResponseStream(t *testing.T) {\n\ttype msg struct {\n\t\tpb  proto.Message\n\t\terr error\n\t}\n\ttests := []struct {\n\t\tname                   string\n\t\tmsgs                   []msg\n\t\tstatusCode             int\n\t\tresponseBody           bool\n\t\tdisableChunkedEncoding bool\n\t}{{\n\t\tname: \"encoding\",\n\t\tmsgs: []msg{\n\t\t\t{&pb.SimpleMessage{Id: \"One\"}, nil},\n\t\t\t{&pb.SimpleMessage{Id: \"Two\"}, nil},\n\t\t},\n\t\tstatusCode: http.StatusOK,\n\t}, {\n\t\tname:       \"empty\",\n\t\tstatusCode: http.StatusOK,\n\t}, {\n\t\tname:       \"error\",\n\t\tmsgs:       []msg{{nil, status.Errorf(codes.OutOfRange, \"400\")}},\n\t\tstatusCode: http.StatusBadRequest,\n\t}, {\n\t\tname: \"stream_error\",\n\t\tmsgs: []msg{\n\t\t\t{&pb.SimpleMessage{Id: \"One\"}, nil},\n\t\t\t{nil, status.Errorf(codes.OutOfRange, \"400\")},\n\t\t},\n\t\tstatusCode: http.StatusOK,\n\t}, {\n\t\tname: \"response body stream case\",\n\t\tmsgs: []msg{\n\t\t\t{fakeResponseBodyWrapper{&pb.SimpleMessage{Id: \"One\"}}, nil},\n\t\t\t{fakeResponseBodyWrapper{&pb.SimpleMessage{Id: \"Two\"}}, nil},\n\t\t},\n\t\tresponseBody: true,\n\t\tstatusCode:   http.StatusOK,\n\t}, {\n\t\tname: \"response body stream error case\",\n\t\tmsgs: []msg{\n\t\t\t{fakeResponseBodyWrapper{&pb.SimpleMessage{Id: \"One\"}}, nil},\n\t\t\t{nil, status.Errorf(codes.OutOfRange, \"400\")},\n\t\t},\n\t\tresponseBody: true,\n\t\tstatusCode:   http.StatusOK,\n\t}, {\n\t\tname: \"disable chunked encoding\",\n\t\tmsgs: []msg{\n\t\t\t{&pb.SimpleMessage{Id: \"One\"}, nil},\n\t\t},\n\t\tstatusCode:             http.StatusOK,\n\t\tdisableChunkedEncoding: true,\n\t}}\n\n\tnewTestRecv := func(t *testing.T, msgs []msg) func() (proto.Message, error) {\n\t\tvar count int\n\t\treturn func() (proto.Message, error) {\n\t\t\tif count == len(msgs) {\n\t\t\t\treturn nil, io.EOF\n\t\t\t} else if count > len(msgs) {\n\t\t\t\tt.Errorf(\"recv() called %d times for %d messages\", count, len(msgs))\n\t\t\t}\n\t\t\tcount++\n\t\t\tmsg := msgs[count-1]\n\t\t\treturn msg.pb, msg.err\n\t\t}\n\t}\n\tctx := runtime.NewServerMetadataContext(context.Background(), runtime.ServerMetadata{})\n\tmarshaler := &runtime.JSONPb{}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\trecv := newTestRecv(t, tt.msgs)\n\t\t\treq := httptest.NewRequest(\"GET\", \"http://example.com/foo\", nil)\n\t\t\tresp := httptest.NewRecorder()\n\n\t\t\tmux := runtime.NewServeMux()\n\t\t\tif tt.disableChunkedEncoding {\n\t\t\t\tmux = runtime.NewServeMux(runtime.WithDisableChunkedEncoding())\n\t\t\t}\n\t\t\truntime.ForwardResponseStream(ctx, mux, marshaler, resp, req, recv)\n\n\t\t\tw := resp.Result()\n\t\t\tif w.StatusCode != tt.statusCode {\n\t\t\t\tt.Errorf(\"StatusCode %d want %d\", w.StatusCode, tt.statusCode)\n\t\t\t}\n\t\t\tif !tt.disableChunkedEncoding {\n\t\t\t\tif h := w.Header.Get(\"Transfer-Encoding\"); h != \"chunked\" {\n\t\t\t\t\tt.Errorf(\"ForwardResponseStream missing header chunked\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif h := w.Header.Get(\"Transfer-Encoding\"); h != \"\" {\n\t\t\t\t\tt.Errorf(\"ForwardResponseStream unexpected Transfer-Encoding header %s\", h)\n\t\t\t\t}\n\t\t\t}\n\t\t\tbody, err := io.ReadAll(w.Body)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"Failed to read response body with %v\", err)\n\t\t\t}\n\t\t\tw.Body.Close()\n\t\t\tif len(body) > 0 && w.Header.Get(\"Content-Type\") != \"application/json\" {\n\t\t\t\tt.Errorf(\"Content-Type %s want application/json\", w.Header.Get(\"Content-Type\"))\n\t\t\t}\n\n\t\t\tvar want []byte\n\t\t\tfor i, msg := range tt.msgs {\n\t\t\t\tif msg.err != nil {\n\t\t\t\t\tif i == 0 {\n\t\t\t\t\t\t// Skip non-stream errors\n\t\t\t\t\t\tt.Skip(\"checking error encodings\")\n\t\t\t\t\t}\n\t\t\t\t\tdelimiter := marshaler.Delimiter()\n\t\t\t\t\tst := status.Convert(msg.err)\n\t\t\t\t\tb, err := marshaler.Marshal(map[string]proto.Message{\n\t\t\t\t\t\t\"error\": st.Proto(),\n\t\t\t\t\t})\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Errorf(\"marshaler.Marshal() failed %v\", err)\n\t\t\t\t\t}\n\t\t\t\t\terrBytes := body[len(want):]\n\t\t\t\t\tif string(errBytes) != string(b)+string(delimiter) {\n\t\t\t\t\t\tt.Errorf(\"ForwardResponseStream() = \\\"%s\\\" want \\\"%s\\\"\", errBytes, b)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tvar b []byte\n\n\t\t\t\tif tt.responseBody {\n\t\t\t\t\t// responseBody interface is in runtime package and test is in runtime_test package. hence can't use responseBody directly\n\t\t\t\t\t// So type casting to fakeResponseBodyWrapper struct to verify the data.\n\t\t\t\t\trb, ok := msg.pb.(fakeResponseBodyWrapper)\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\tt.Errorf(\"stream responseBody failed %v\", err)\n\t\t\t\t\t}\n\n\t\t\t\t\tb, err = marshaler.Marshal(map[string]interface{}{\"result\": rb.XXX_ResponseBody()})\n\t\t\t\t} else {\n\t\t\t\t\tb, err = marshaler.Marshal(map[string]interface{}{\"result\": msg.pb})\n\t\t\t\t}\n\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Errorf(\"marshaler.Marshal() failed %v\", err)\n\t\t\t\t}\n\t\t\t\twant = append(want, b...)\n\t\t\t\twant = append(want, marshaler.Delimiter()...)\n\t\t\t}\n\n\t\t\tif string(body) != string(want) {\n\t\t\t\tt.Errorf(\"ForwardResponseStream() = \\\"%s\\\" want \\\"%s\\\"\", body, want)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// A custom marshaler implementation, that doesn't implement the delimited interface\ntype CustomMarshaler struct {\n\tm *runtime.JSONPb\n}\n\nfunc (c *CustomMarshaler) Marshal(v interface{}) ([]byte, error)      { return c.m.Marshal(v) }\nfunc (c *CustomMarshaler) Unmarshal(data []byte, v interface{}) error { return c.m.Unmarshal(data, v) }\nfunc (c *CustomMarshaler) NewDecoder(r io.Reader) runtime.Decoder     { return c.m.NewDecoder(r) }\nfunc (c *CustomMarshaler) NewEncoder(w io.Writer) runtime.Encoder     { return c.m.NewEncoder(w) }\nfunc (c *CustomMarshaler) ContentType(v interface{}) string           { return \"Custom-Content-Type\" }\n\n// marshalerStreamContentType implements Marshaler, but with the addition of a custom StreamContentType.\ntype marshalerStreamContentType struct {\n\truntime.Marshaler\n\tCustomStreamContentType string\n}\n\nfunc (m marshalerStreamContentType) StreamContentType(interface{}) string {\n\treturn m.CustomStreamContentType\n}\n\nfunc TestForwardResponseStreamCustomMarshaler(t *testing.T) {\n\ttype msg struct {\n\t\tpb  proto.Message\n\t\terr error\n\t}\n\tmarshaler := &CustomMarshaler{&runtime.JSONPb{}}\n\n\ttests := []struct {\n\t\tname            string\n\t\tmarshaler       runtime.Marshaler\n\t\tmsgs            []msg\n\t\tstatusCode      int\n\t\twantContentType string\n\t}{{\n\t\tname:      \"encoding\",\n\t\tmarshaler: marshaler,\n\t\tmsgs: []msg{\n\t\t\t{&pb.SimpleMessage{Id: \"One\"}, nil},\n\t\t\t{&pb.SimpleMessage{Id: \"Two\"}, nil},\n\t\t},\n\t\tstatusCode:      http.StatusOK,\n\t\twantContentType: \"Custom-Content-Type\",\n\t}, {\n\t\tname:       \"empty\",\n\t\tmarshaler:  marshaler,\n\t\tstatusCode: http.StatusOK,\n\t}, {\n\t\tname:            \"error\",\n\t\tmarshaler:       marshaler,\n\t\tmsgs:            []msg{{nil, status.Errorf(codes.OutOfRange, \"400\")}},\n\t\tstatusCode:      http.StatusBadRequest,\n\t\twantContentType: \"Custom-Content-Type\",\n\t}, {\n\t\tname:      \"stream_error\",\n\t\tmarshaler: marshaler,\n\t\tmsgs: []msg{\n\t\t\t{&pb.SimpleMessage{Id: \"One\"}, nil},\n\t\t\t{nil, status.Errorf(codes.OutOfRange, \"400\")},\n\t\t},\n\t\tstatusCode:      http.StatusOK,\n\t\twantContentType: \"Custom-Content-Type\",\n\t}, {\n\t\tname: \"stream_content_type\",\n\t\tmarshaler: marshalerStreamContentType{\n\t\t\tMarshaler:               marshaler,\n\t\t\tCustomStreamContentType: \"Stream-Content-Type\",\n\t\t},\n\t\tmsgs: []msg{\n\t\t\t{&pb.SimpleMessage{Id: \"One\"}, nil},\n\t\t},\n\t\tstatusCode:      http.StatusOK,\n\t\twantContentType: \"Stream-Content-Type\",\n\t}}\n\n\tnewTestRecv := func(t *testing.T, msgs []msg) func() (proto.Message, error) {\n\t\tvar count int\n\t\treturn func() (proto.Message, error) {\n\t\t\tif count == len(msgs) {\n\t\t\t\treturn nil, io.EOF\n\t\t\t} else if count > len(msgs) {\n\t\t\t\tt.Errorf(\"recv() called %d times for %d messages\", count, len(msgs))\n\t\t\t}\n\t\t\tcount++\n\t\t\tmsg := msgs[count-1]\n\t\t\treturn msg.pb, msg.err\n\t\t}\n\t}\n\tctx := runtime.NewServerMetadataContext(context.Background(), runtime.ServerMetadata{})\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\trecv := newTestRecv(t, tt.msgs)\n\t\t\treq := httptest.NewRequest(\"GET\", \"http://example.com/foo\", nil)\n\t\t\tresp := httptest.NewRecorder()\n\n\t\t\truntime.ForwardResponseStream(ctx, runtime.NewServeMux(), tt.marshaler, resp, req, recv)\n\n\t\t\tw := resp.Result()\n\t\t\tif w.StatusCode != tt.statusCode {\n\t\t\t\tt.Errorf(\"StatusCode %d want %d\", w.StatusCode, tt.statusCode)\n\t\t\t}\n\t\t\tif h := w.Header.Get(\"Transfer-Encoding\"); h != \"chunked\" {\n\t\t\t\tt.Errorf(\"ForwardResponseStream missing header chunked\")\n\t\t\t}\n\t\t\tbody, err := io.ReadAll(w.Body)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"Failed to read response body with %v\", err)\n\t\t\t}\n\t\t\tw.Body.Close()\n\t\t\tif w.Header.Get(\"Content-Type\") != tt.wantContentType {\n\t\t\t\tt.Errorf(\"Content-Type %q want %q\", w.Header.Get(\"Content-Type\"), tt.wantContentType)\n\t\t\t}\n\n\t\t\tvar want []byte\n\t\t\tfor _, msg := range tt.msgs {\n\t\t\t\tif msg.err != nil {\n\t\t\t\t\tt.Skip(\"checking error encodings\")\n\t\t\t\t}\n\t\t\t\tb, err := tt.marshaler.Marshal(map[string]proto.Message{\"result\": msg.pb})\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Errorf(\"marshaler.Marshal() failed %v\", err)\n\t\t\t\t}\n\t\t\t\twant = append(want, b...)\n\t\t\t\twant = append(want, \"\\n\"...)\n\t\t\t}\n\n\t\t\tif string(body) != string(want) {\n\t\t\t\tt.Errorf(\"ForwardResponseStream() = \\\"%s\\\" want \\\"%s\\\"\", body, want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestForwardResponseMessage(t *testing.T) {\n\tmsg := &pb.SimpleMessage{Id: \"One\"}\n\ttests := []struct {\n\t\tname              string\n\t\tmarshaler         runtime.Marshaler\n\t\tcontentType       string\n\t\tfrw               runtime.ForwardResponseRewriter\n\t\tgetWantedResponse func(msg any) ([]byte, error)\n\t}{{\n\t\tname:        \"standard marshaler\",\n\t\tmarshaler:   &runtime.JSONPb{},\n\t\tcontentType: \"application/json\",\n\t}, {\n\t\tname:        \"httpbody marshaler\",\n\t\tmarshaler:   &runtime.HTTPBodyMarshaler{&runtime.JSONPb{}},\n\t\tcontentType: \"application/json\",\n\t}, {\n\t\tname:        \"custom marshaler\",\n\t\tmarshaler:   &CustomMarshaler{&runtime.JSONPb{}},\n\t\tcontentType: \"Custom-Content-Type\",\n\t}, {\n\t\tname:        \"custom forward response rewriter\",\n\t\tmarshaler:   &runtime.JSONPb{},\n\t\tcontentType: \"application/json\",\n\t\tfrw: func(ctx context.Context, response proto.Message) (any, error) {\n\t\t\treturn map[string]any{\n\t\t\t\t\"ok\":   true,\n\t\t\t\t\"data\": response,\n\t\t\t}, nil\n\t\t},\n\t\tgetWantedResponse: func(msg any) ([]byte, error) {\n\t\t\treturn new(runtime.JSONPb).Marshal(map[string]any{\"ok\": true, \"data\": msg})\n\t\t},\n\t}}\n\n\tctx := runtime.NewServerMetadataContext(context.Background(), runtime.ServerMetadata{})\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\treq := httptest.NewRequest(\"GET\", \"http://example.com/foo\", nil)\n\t\t\tresp := httptest.NewRecorder()\n\n\t\t\topts := []runtime.ServeMuxOption{}\n\t\t\tif tt.frw != nil {\n\t\t\t\topts = append(opts, runtime.WithForwardResponseRewriter(tt.frw))\n\t\t\t}\n\n\t\t\truntime.ForwardResponseMessage(ctx, runtime.NewServeMux(opts...), tt.marshaler, resp, req, msg)\n\n\t\t\tw := resp.Result()\n\t\t\tif w.StatusCode != http.StatusOK {\n\t\t\t\tt.Errorf(\"StatusCode %d want %d\", w.StatusCode, http.StatusOK)\n\t\t\t}\n\t\t\tif h := w.Header.Get(\"Content-Type\"); h != tt.contentType {\n\t\t\t\tt.Errorf(\"Content-Type %v want %v\", h, tt.contentType)\n\t\t\t}\n\t\t\tbody, err := io.ReadAll(w.Body)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"Failed to read response body with %v\", err)\n\t\t\t}\n\t\t\tw.Body.Close()\n\n\t\t\tif tt.getWantedResponse == nil {\n\t\t\t\ttt.getWantedResponse = tt.marshaler.Marshal\n\t\t\t}\n\t\t\twant, err := tt.getWantedResponse(msg)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"marshaler.Marshal() failed %v\", err)\n\t\t\t}\n\n\t\t\tif string(body) != string(want) {\n\t\t\t\tt.Errorf(\"ForwardResponseMessage() = \\\"%s\\\" want \\\"%s\\\"\", body, want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestOutgoingHeaderMatcher(t *testing.T) {\n\tt.Parallel()\n\tmsg := &pb.SimpleMessage{Id: \"foo\"}\n\tfor _, tc := range []struct {\n\t\tname    string\n\t\tmd      runtime.ServerMetadata\n\t\theaders http.Header\n\t\tmatcher runtime.HeaderMatcherFunc\n\t}{\n\t\t{\n\t\t\tname: \"default matcher\",\n\t\t\tmd: runtime.ServerMetadata{\n\t\t\t\tHeaderMD: metadata.Pairs(\n\t\t\t\t\t\"foo\", \"bar\",\n\t\t\t\t\t\"baz\", \"qux\",\n\t\t\t\t),\n\t\t\t},\n\t\t\theaders: http.Header{\n\t\t\t\t\"Content-Type\":      []string{\"application/json\"},\n\t\t\t\t\"Grpc-Metadata-Foo\": []string{\"bar\"},\n\t\t\t\t\"Grpc-Metadata-Baz\": []string{\"qux\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"custom matcher\",\n\t\t\tmd: runtime.ServerMetadata{\n\t\t\t\tHeaderMD: metadata.Pairs(\n\t\t\t\t\t\"foo\", \"bar\",\n\t\t\t\t\t\"baz\", \"qux\",\n\t\t\t\t),\n\t\t\t},\n\t\t\theaders: http.Header{\n\t\t\t\t\"Content-Type\": []string{\"application/json\"},\n\t\t\t\t\"Custom-Foo\":   []string{\"bar\"},\n\t\t\t},\n\t\t\tmatcher: func(key string) (string, bool) {\n\t\t\t\tswitch key {\n\t\t\t\tcase \"foo\":\n\t\t\t\t\treturn \"custom-foo\", true\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"\", false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t} {\n\t\ttc := tc\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\t\t\tctx := runtime.NewServerMetadataContext(context.Background(), tc.md)\n\n\t\t\treq := httptest.NewRequest(\"GET\", \"http://example.com/foo\", nil)\n\t\t\tresp := httptest.NewRecorder()\n\n\t\t\tmux := runtime.NewServeMux(\n\t\t\t\truntime.WithOutgoingHeaderMatcher(tc.matcher),\n\t\t\t)\n\t\t\truntime.ForwardResponseMessage(ctx, mux, &runtime.JSONPb{}, resp, req, msg)\n\n\t\t\tw := resp.Result()\n\t\t\tdefer w.Body.Close()\n\t\t\tif w.StatusCode != http.StatusOK {\n\t\t\t\tt.Fatalf(\"StatusCode %d want %d\", w.StatusCode, http.StatusOK)\n\t\t\t}\n\n\t\t\tif !reflect.DeepEqual(w.Header, tc.headers) {\n\t\t\t\tt.Fatalf(\"Header %v want %v\", w.Header, tc.headers)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestOutgoingHeaderMatcherWithContentLength(t *testing.T) {\n\tt.Parallel()\n\tmsg := &pb.SimpleMessage{Id: \"foo\"}\n\tfor _, tc := range []struct {\n\t\tname    string\n\t\tmd      runtime.ServerMetadata\n\t\theaders http.Header\n\t\tmatcher runtime.HeaderMatcherFunc\n\t}{\n\t\t{\n\t\t\tname: \"default matcher\",\n\t\t\tmd: runtime.ServerMetadata{\n\t\t\t\tHeaderMD: metadata.Pairs(\n\t\t\t\t\t\"foo\", \"bar\",\n\t\t\t\t\t\"baz\", \"qux\",\n\t\t\t\t),\n\t\t\t},\n\t\t\theaders: http.Header{\n\t\t\t\t\"Content-Length\":    []string{\"12\"},\n\t\t\t\t\"Content-Type\":      []string{\"application/json\"},\n\t\t\t\t\"Grpc-Metadata-Foo\": []string{\"bar\"},\n\t\t\t\t\"Grpc-Metadata-Baz\": []string{\"qux\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"custom matcher\",\n\t\t\tmd: runtime.ServerMetadata{\n\t\t\t\tHeaderMD: metadata.Pairs(\n\t\t\t\t\t\"foo\", \"bar\",\n\t\t\t\t\t\"baz\", \"qux\",\n\t\t\t\t),\n\t\t\t},\n\t\t\theaders: http.Header{\n\t\t\t\t\"Content-Length\": []string{\"12\"},\n\t\t\t\t\"Content-Type\":   []string{\"application/json\"},\n\t\t\t\t\"Custom-Foo\":     []string{\"bar\"},\n\t\t\t},\n\t\t\tmatcher: func(key string) (string, bool) {\n\t\t\t\tswitch key {\n\t\t\t\tcase \"foo\":\n\t\t\t\t\treturn \"custom-foo\", true\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"\", false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t} {\n\t\ttc := tc\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\t\t\tctx := runtime.NewServerMetadataContext(context.Background(), tc.md)\n\n\t\t\treq := httptest.NewRequest(\"GET\", \"http://example.com/foo\", nil)\n\t\t\tresp := httptest.NewRecorder()\n\n\t\t\tmux := runtime.NewServeMux(\n\t\t\t\truntime.WithOutgoingHeaderMatcher(tc.matcher),\n\t\t\t\truntime.WithWriteContentLength(),\n\t\t\t)\n\t\t\truntime.ForwardResponseMessage(ctx, mux, &runtime.JSONPb{}, resp, req, msg)\n\n\t\t\tw := resp.Result()\n\t\t\tdefer w.Body.Close()\n\t\t\tif w.StatusCode != http.StatusOK {\n\t\t\t\tt.Fatalf(\"StatusCode %d want %d\", w.StatusCode, http.StatusOK)\n\t\t\t}\n\n\t\t\tif !reflect.DeepEqual(w.Header, tc.headers) {\n\t\t\t\tt.Fatalf(\"Header %v want %v\", w.Header, tc.headers)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestOutgoingTrailerMatcher(t *testing.T) {\n\tt.Parallel()\n\tmsg := &pb.SimpleMessage{Id: \"foo\"}\n\tfor _, tc := range []struct {\n\t\tname    string\n\t\tmd      runtime.ServerMetadata\n\t\tcaller  http.Header\n\t\theaders http.Header\n\t\ttrailer http.Header\n\t\tmatcher runtime.HeaderMatcherFunc\n\t}{\n\t\t{\n\t\t\tname: \"default matcher, caller accepts\",\n\t\t\tmd: runtime.ServerMetadata{\n\t\t\t\tTrailerMD: metadata.Pairs(\n\t\t\t\t\t\"foo\", \"bar\",\n\t\t\t\t\t\"baz\", \"qux\",\n\t\t\t\t),\n\t\t\t},\n\t\t\tcaller: http.Header{\n\t\t\t\t\"Te\": []string{\"trailers\"},\n\t\t\t},\n\t\t\theaders: http.Header{\n\t\t\t\t\"Transfer-Encoding\": []string{\"chunked\"},\n\t\t\t\t\"Content-Type\":      []string{\"application/json\"},\n\t\t\t\t\"Trailer\":           []string{\"Grpc-Trailer-Baz\", \"Grpc-Trailer-Foo\"},\n\t\t\t},\n\t\t\ttrailer: http.Header{\n\t\t\t\t\"Grpc-Trailer-Foo\": []string{\"bar\"},\n\t\t\t\t\"Grpc-Trailer-Baz\": []string{\"qux\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"default matcher, caller rejects\",\n\t\t\tmd: runtime.ServerMetadata{\n\t\t\t\tTrailerMD: metadata.Pairs(\n\t\t\t\t\t\"foo\", \"bar\",\n\t\t\t\t\t\"baz\", \"qux\",\n\t\t\t\t),\n\t\t\t},\n\t\t\theaders: http.Header{\n\t\t\t\t\"Content-Length\": []string{\"12\"},\n\t\t\t\t\"Content-Type\":   []string{\"application/json\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"custom matcher\",\n\t\t\tmd: runtime.ServerMetadata{\n\t\t\t\tTrailerMD: metadata.Pairs(\n\t\t\t\t\t\"foo\", \"bar\",\n\t\t\t\t\t\"baz\", \"qux\",\n\t\t\t\t),\n\t\t\t},\n\t\t\tcaller: http.Header{\n\t\t\t\t\"Te\": []string{\"trailers\"},\n\t\t\t},\n\t\t\theaders: http.Header{\n\t\t\t\t\"Transfer-Encoding\": []string{\"chunked\"},\n\t\t\t\t\"Content-Type\":      []string{\"application/json\"},\n\t\t\t\t\"Trailer\":           []string{\"Custom-Trailer-Foo\"},\n\t\t\t},\n\t\t\ttrailer: http.Header{\n\t\t\t\t\"Custom-Trailer-Foo\": []string{\"bar\"},\n\t\t\t},\n\t\t\tmatcher: func(key string) (string, bool) {\n\t\t\t\tswitch key {\n\t\t\t\tcase \"foo\":\n\t\t\t\t\treturn \"custom-trailer-foo\", true\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"\", false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t} {\n\t\ttc := tc\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\t\t\tctx := runtime.NewServerMetadataContext(context.Background(), tc.md)\n\n\t\t\treq := httptest.NewRequest(\"GET\", \"http://example.com/foo\", nil)\n\t\t\treq.Header = tc.caller\n\t\t\tresp := httptest.NewRecorder()\n\n\t\t\tmux := runtime.NewServeMux(\n\t\t\t\truntime.WithOutgoingTrailerMatcher(tc.matcher),\n\t\t\t\truntime.WithWriteContentLength(),\n\t\t\t)\n\t\t\truntime.ForwardResponseMessage(ctx, mux, &runtime.JSONPb{}, resp, req, msg)\n\n\t\t\tw := resp.Result()\n\t\t\t_, _ = io.Copy(io.Discard, w.Body)\n\t\t\tdefer w.Body.Close()\n\t\t\tif w.StatusCode != http.StatusOK {\n\t\t\t\tt.Fatalf(\"StatusCode %d want %d\", w.StatusCode, http.StatusOK)\n\t\t\t}\n\n\t\t\t// Sort to the trailer headers to ensure the test is deterministic\n\t\t\tsort.Strings(w.Header[\"Trailer\"])\n\n\t\t\tif !reflect.DeepEqual(w.Header, tc.headers) {\n\t\t\t\tt.Fatalf(\"Header %v want %v\", w.Header, tc.headers)\n\t\t\t}\n\n\t\t\tif !reflect.DeepEqual(w.Trailer, tc.trailer) {\n\t\t\t\tt.Fatalf(\"Trailer %v want %v\", w.Trailer, tc.trailer)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\nload(\"@io_bazel_rules_go//proto:def.bzl\", \"go_proto_library\")\nload(\"@rules_proto//proto:defs.bzl\", \"proto_library\")\n\n# gazelle:exclude non_standard_names_grpc.pb.go\n\npackage(default_visibility = [\"//visibility:public\"])\n\nproto_library(\n    name = \"examplepb_proto\",\n    srcs = [\n        \"example.proto\",\n        \"non_standard_names.proto\",\n        \"proto2.proto\",\n        \"proto3.proto\",\n    ],\n    deps = [\n        \"@com_google_protobuf//:any_proto\",\n        \"@com_google_protobuf//:duration_proto\",\n        \"@com_google_protobuf//:empty_proto\",\n        \"@com_google_protobuf//:field_mask_proto\",\n        \"@com_google_protobuf//:struct_proto\",\n        \"@com_google_protobuf//:timestamp_proto\",\n        \"@com_google_protobuf//:wrappers_proto\",\n        \"@googleapis//google/api:annotations_proto\",\n    ],\n)\n\ngo_proto_library(\n    name = \"examplepb_go_proto\",\n    compilers = [\n        \"//:go_apiv2\",\n        \"//:go_grpc\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\",\n    proto = \":examplepb_proto\",\n    deps = [\n        \"@org_golang_google_genproto_googleapis_api//annotations\",\n    ],\n)\n\ngo_library(\n    name = \"examplepb\",\n    embed = [\":examplepb_go_proto\"],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\",\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":examplepb\",\n    visibility = [\"//runtime:__subpackages__\"],\n)\n"
  },
  {
    "path": "runtime/internal/examplepb/example.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: runtime/internal/examplepb/example.proto\n\npackage examplepb\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tanypb \"google.golang.org/protobuf/types/known/anypb\"\n\temptypb \"google.golang.org/protobuf/types/known/emptypb\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\ttimestamppb \"google.golang.org/protobuf/types/known/timestamppb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// NumericEnum is one or zero.\ntype NumericEnum int32\n\nconst (\n\t// ZERO means 0\n\tNumericEnum_ZERO NumericEnum = 0\n\t// ONE means 1\n\tNumericEnum_ONE NumericEnum = 1\n)\n\n// Enum value maps for NumericEnum.\nvar (\n\tNumericEnum_name = map[int32]string{\n\t\t0: \"ZERO\",\n\t\t1: \"ONE\",\n\t}\n\tNumericEnum_value = map[string]int32{\n\t\t\"ZERO\": 0,\n\t\t\"ONE\":  1,\n\t}\n)\n\nfunc (x NumericEnum) Enum() *NumericEnum {\n\tp := new(NumericEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x NumericEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (NumericEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_runtime_internal_examplepb_example_proto_enumTypes[0].Descriptor()\n}\n\nfunc (NumericEnum) Type() protoreflect.EnumType {\n\treturn &file_runtime_internal_examplepb_example_proto_enumTypes[0]\n}\n\nfunc (x NumericEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use NumericEnum.Descriptor instead.\nfunc (NumericEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{0}\n}\n\n// DeepEnum is one or zero.\ntype ABitOfEverything_Nested_DeepEnum int32\n\nconst (\n\t// FALSE is false.\n\tABitOfEverything_Nested_FALSE ABitOfEverything_Nested_DeepEnum = 0\n\t// TRUE is true.\n\tABitOfEverything_Nested_TRUE ABitOfEverything_Nested_DeepEnum = 1\n)\n\n// Enum value maps for ABitOfEverything_Nested_DeepEnum.\nvar (\n\tABitOfEverything_Nested_DeepEnum_name = map[int32]string{\n\t\t0: \"FALSE\",\n\t\t1: \"TRUE\",\n\t}\n\tABitOfEverything_Nested_DeepEnum_value = map[string]int32{\n\t\t\"FALSE\": 0,\n\t\t\"TRUE\":  1,\n\t}\n)\n\nfunc (x ABitOfEverything_Nested_DeepEnum) Enum() *ABitOfEverything_Nested_DeepEnum {\n\tp := new(ABitOfEverything_Nested_DeepEnum)\n\t*p = x\n\treturn p\n}\n\nfunc (x ABitOfEverything_Nested_DeepEnum) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (ABitOfEverything_Nested_DeepEnum) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_runtime_internal_examplepb_example_proto_enumTypes[1].Descriptor()\n}\n\nfunc (ABitOfEverything_Nested_DeepEnum) Type() protoreflect.EnumType {\n\treturn &file_runtime_internal_examplepb_example_proto_enumTypes[1]\n}\n\nfunc (x ABitOfEverything_Nested_DeepEnum) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use ABitOfEverything_Nested_DeepEnum.Descriptor instead.\nfunc (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{1, 0, 0}\n}\n\ntype RepeatedResponseBodyOut_Response_ResponseType int32\n\nconst (\n\t// UNKNOWN\n\tRepeatedResponseBodyOut_Response_UNKNOWN RepeatedResponseBodyOut_Response_ResponseType = 0\n\t// A is 1\n\tRepeatedResponseBodyOut_Response_A RepeatedResponseBodyOut_Response_ResponseType = 1\n\t// B is 2\n\tRepeatedResponseBodyOut_Response_B RepeatedResponseBodyOut_Response_ResponseType = 2\n)\n\n// Enum value maps for RepeatedResponseBodyOut_Response_ResponseType.\nvar (\n\tRepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{\n\t\t0: \"UNKNOWN\",\n\t\t1: \"A\",\n\t\t2: \"B\",\n\t}\n\tRepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{\n\t\t\"UNKNOWN\": 0,\n\t\t\"A\":       1,\n\t\t\"B\":       2,\n\t}\n)\n\nfunc (x RepeatedResponseBodyOut_Response_ResponseType) Enum() *RepeatedResponseBodyOut_Response_ResponseType {\n\tp := new(RepeatedResponseBodyOut_Response_ResponseType)\n\t*p = x\n\treturn p\n}\n\nfunc (x RepeatedResponseBodyOut_Response_ResponseType) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (RepeatedResponseBodyOut_Response_ResponseType) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_runtime_internal_examplepb_example_proto_enumTypes[2].Descriptor()\n}\n\nfunc (RepeatedResponseBodyOut_Response_ResponseType) Type() protoreflect.EnumType {\n\treturn &file_runtime_internal_examplepb_example_proto_enumTypes[2]\n}\n\nfunc (x RepeatedResponseBodyOut_Response_ResponseType) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use RepeatedResponseBodyOut_Response_ResponseType.Descriptor instead.\nfunc (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{3, 0, 0}\n}\n\n// SimpleMessage represents a simple message sent to the Echo service.\ntype SimpleMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tId string `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n}\n\nfunc (x *SimpleMessage) Reset() {\n\t*x = SimpleMessage{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *SimpleMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*SimpleMessage) ProtoMessage() {}\n\nfunc (x *SimpleMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use SimpleMessage.ProtoReflect.Descriptor instead.\nfunc (*SimpleMessage) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *SimpleMessage) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\ntype ABitOfEverything struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSingleNested        *ABitOfEverything_Nested   `protobuf:\"bytes,25,opt,name=single_nested,json=singleNested,proto3\" json:\"single_nested,omitempty\"`\n\tUuid                string                     `protobuf:\"bytes,1,opt,name=uuid,proto3\" json:\"uuid,omitempty\"`\n\tNested              []*ABitOfEverything_Nested `protobuf:\"bytes,2,rep,name=nested,proto3\" json:\"nested,omitempty\"`\n\tFloatValue          float32                    `protobuf:\"fixed32,3,opt,name=float_value,json=floatValue,proto3\" json:\"float_value,omitempty\"`\n\tDoubleValue         float64                    `protobuf:\"fixed64,4,opt,name=double_value,json=doubleValue,proto3\" json:\"double_value,omitempty\"`\n\tInt64Value          int64                      `protobuf:\"varint,5,opt,name=int64_value,json=int64Value,proto3\" json:\"int64_value,omitempty\"`\n\tUint64Value         uint64                     `protobuf:\"varint,6,opt,name=uint64_value,json=uint64Value,proto3\" json:\"uint64_value,omitempty\"`\n\tInt32Value          int32                      `protobuf:\"varint,7,opt,name=int32_value,json=int32Value,proto3\" json:\"int32_value,omitempty\"`\n\tFixed64Value        uint64                     `protobuf:\"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3\" json:\"fixed64_value,omitempty\"`\n\tFixed32Value        uint32                     `protobuf:\"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3\" json:\"fixed32_value,omitempty\"`\n\tBoolValue           bool                       `protobuf:\"varint,10,opt,name=bool_value,json=boolValue,proto3\" json:\"bool_value,omitempty\"`\n\tStringValue         string                     `protobuf:\"bytes,11,opt,name=string_value,json=stringValue,proto3\" json:\"string_value,omitempty\"`\n\tBytesValue          []byte                     `protobuf:\"bytes,29,opt,name=bytes_value,json=bytesValue,proto3\" json:\"bytes_value,omitempty\"`\n\tUint32Value         uint32                     `protobuf:\"varint,13,opt,name=uint32_value,json=uint32Value,proto3\" json:\"uint32_value,omitempty\"`\n\tEnumValue           NumericEnum                `protobuf:\"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum\" json:\"enum_value,omitempty\"`\n\tSfixed32Value       int32                      `protobuf:\"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3\" json:\"sfixed32_value,omitempty\"`\n\tSfixed64Value       int64                      `protobuf:\"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3\" json:\"sfixed64_value,omitempty\"`\n\tSint32Value         int32                      `protobuf:\"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3\" json:\"sint32_value,omitempty\"`\n\tSint64Value         int64                      `protobuf:\"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3\" json:\"sint64_value,omitempty\"`\n\tRepeatedStringValue []string                   `protobuf:\"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3\" json:\"repeated_string_value,omitempty\"`\n\t// Types that are assignable to OneofValue:\n\t//\n\t//\t*ABitOfEverything_OneofEmpty\n\t//\t*ABitOfEverything_OneofString\n\tOneofValue               isABitOfEverything_OneofValue       `protobuf_oneof:\"oneof_value\"`\n\tMapValue                 map[string]NumericEnum              `protobuf:\"bytes,22,rep,name=map_value,json=mapValue,proto3\" json:\"map_value,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"varint,2,opt,name=value,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum\"`\n\tMappedStringValue        map[string]string                   `protobuf:\"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3\" json:\"mapped_string_value,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMappedNestedValue        map[string]*ABitOfEverything_Nested `protobuf:\"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3\" json:\"mapped_nested_value,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tNonConventionalNameValue string                              `protobuf:\"bytes,26,opt,name=nonConventionalNameValue,proto3\" json:\"nonConventionalNameValue,omitempty\"`\n\tTimestampValue           *timestamppb.Timestamp              `protobuf:\"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3\" json:\"timestamp_value,omitempty\"`\n\t// repeated enum value. it is comma-separated in query\n\tRepeatedEnumValue []NumericEnum `protobuf:\"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum\" json:\"repeated_enum_value,omitempty\"`\n\t// repeated numeric enum comment (This comment is overridden by the field\n\t// annotation)\n\tRepeatedEnumAnnotation []NumericEnum `protobuf:\"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum\" json:\"repeated_enum_annotation,omitempty\"`\n\t// numeric enum comment (This comment is overridden by the field annotation)\n\tEnumValueAnnotation NumericEnum `protobuf:\"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum\" json:\"enum_value_annotation,omitempty\"`\n\t// repeated string comment (This comment is overridden by the field\n\t// annotation)\n\tRepeatedStringAnnotation []string `protobuf:\"bytes,34,rep,name=repeated_string_annotation,json=repeatedStringAnnotation,proto3\" json:\"repeated_string_annotation,omitempty\"`\n\t// repeated nested object comment (This comment is overridden by the field\n\t// annotation)\n\tRepeatedNestedAnnotation []*ABitOfEverything_Nested `protobuf:\"bytes,35,rep,name=repeated_nested_annotation,json=repeatedNestedAnnotation,proto3\" json:\"repeated_nested_annotation,omitempty\"`\n\t// nested object comments (This comment is overridden by the field annotation)\n\tNestedAnnotation  *ABitOfEverything_Nested `protobuf:\"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3\" json:\"nested_annotation,omitempty\"`\n\tInt64OverrideType int64                    `protobuf:\"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3\" json:\"int64_override_type,omitempty\"`\n\tAnytype           *anypb.Any               `protobuf:\"bytes,38,opt,name=anytype,proto3\" json:\"anytype,omitempty\"`\n\tRepeatedAnytype   []*anypb.Any             `protobuf:\"bytes,39,rep,name=repeated_anytype,json=repeatedAnytype,proto3\" json:\"repeated_anytype,omitempty\"`\n}\n\nfunc (x *ABitOfEverything) Reset() {\n\t*x = ABitOfEverything{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ABitOfEverything) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ABitOfEverything) ProtoMessage() {}\n\nfunc (x *ABitOfEverything) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ABitOfEverything.ProtoReflect.Descriptor instead.\nfunc (*ABitOfEverything) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.SingleNested\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetUuid() string {\n\tif x != nil {\n\t\treturn x.Uuid\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetNested() []*ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.Nested\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetFloatValue() float32 {\n\tif x != nil {\n\t\treturn x.FloatValue\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetDoubleValue() float64 {\n\tif x != nil {\n\t\treturn x.DoubleValue\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetInt64Value() int64 {\n\tif x != nil {\n\t\treturn x.Int64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetUint64Value() uint64 {\n\tif x != nil {\n\t\treturn x.Uint64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetInt32Value() int32 {\n\tif x != nil {\n\t\treturn x.Int32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetFixed64Value() uint64 {\n\tif x != nil {\n\t\treturn x.Fixed64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetFixed32Value() uint32 {\n\tif x != nil {\n\t\treturn x.Fixed32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetBoolValue() bool {\n\tif x != nil {\n\t\treturn x.BoolValue\n\t}\n\treturn false\n}\n\nfunc (x *ABitOfEverything) GetStringValue() string {\n\tif x != nil {\n\t\treturn x.StringValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetBytesValue() []byte {\n\tif x != nil {\n\t\treturn x.BytesValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetUint32Value() uint32 {\n\tif x != nil {\n\t\treturn x.Uint32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetEnumValue() NumericEnum {\n\tif x != nil {\n\t\treturn x.EnumValue\n\t}\n\treturn NumericEnum_ZERO\n}\n\nfunc (x *ABitOfEverything) GetSfixed32Value() int32 {\n\tif x != nil {\n\t\treturn x.Sfixed32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetSfixed64Value() int64 {\n\tif x != nil {\n\t\treturn x.Sfixed64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetSint32Value() int32 {\n\tif x != nil {\n\t\treturn x.Sint32Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetSint64Value() int64 {\n\tif x != nil {\n\t\treturn x.Sint64Value\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetRepeatedStringValue() []string {\n\tif x != nil {\n\t\treturn x.RepeatedStringValue\n\t}\n\treturn nil\n}\n\nfunc (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue {\n\tif m != nil {\n\t\treturn m.OneofValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetOneofEmpty() *emptypb.Empty {\n\tif x, ok := x.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok {\n\t\treturn x.OneofEmpty\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetOneofString() string {\n\tif x, ok := x.GetOneofValue().(*ABitOfEverything_OneofString); ok {\n\t\treturn x.OneofString\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetMapValue() map[string]NumericEnum {\n\tif x != nil {\n\t\treturn x.MapValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetMappedStringValue() map[string]string {\n\tif x != nil {\n\t\treturn x.MappedStringValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.MappedNestedValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetNonConventionalNameValue() string {\n\tif x != nil {\n\t\treturn x.NonConventionalNameValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything) GetTimestampValue() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.TimestampValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum {\n\tif x != nil {\n\t\treturn x.RepeatedEnumValue\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum {\n\tif x != nil {\n\t\treturn x.RepeatedEnumAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetEnumValueAnnotation() NumericEnum {\n\tif x != nil {\n\t\treturn x.EnumValueAnnotation\n\t}\n\treturn NumericEnum_ZERO\n}\n\nfunc (x *ABitOfEverything) GetRepeatedStringAnnotation() []string {\n\tif x != nil {\n\t\treturn x.RepeatedStringAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.RepeatedNestedAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested {\n\tif x != nil {\n\t\treturn x.NestedAnnotation\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetInt64OverrideType() int64 {\n\tif x != nil {\n\t\treturn x.Int64OverrideType\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything) GetAnytype() *anypb.Any {\n\tif x != nil {\n\t\treturn x.Anytype\n\t}\n\treturn nil\n}\n\nfunc (x *ABitOfEverything) GetRepeatedAnytype() []*anypb.Any {\n\tif x != nil {\n\t\treturn x.RepeatedAnytype\n\t}\n\treturn nil\n}\n\ntype isABitOfEverything_OneofValue interface {\n\tisABitOfEverything_OneofValue()\n}\n\ntype ABitOfEverything_OneofEmpty struct {\n\tOneofEmpty *emptypb.Empty `protobuf:\"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof\"`\n}\n\ntype ABitOfEverything_OneofString struct {\n\tOneofString string `protobuf:\"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof\"`\n}\n\nfunc (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {}\n\nfunc (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {}\n\ntype ResponseBodyOut struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tResponse *ResponseBodyOut_Response `protobuf:\"bytes,2,opt,name=response,proto3\" json:\"response,omitempty\"`\n}\n\nfunc (x *ResponseBodyOut) Reset() {\n\t*x = ResponseBodyOut{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ResponseBodyOut) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ResponseBodyOut) ProtoMessage() {}\n\nfunc (x *ResponseBodyOut) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ResponseBodyOut.ProtoReflect.Descriptor instead.\nfunc (*ResponseBodyOut) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response {\n\tif x != nil {\n\t\treturn x.Response\n\t}\n\treturn nil\n}\n\ntype RepeatedResponseBodyOut struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tResponse []*RepeatedResponseBodyOut_Response `protobuf:\"bytes,2,rep,name=response,proto3\" json:\"response,omitempty\"`\n}\n\nfunc (x *RepeatedResponseBodyOut) Reset() {\n\t*x = RepeatedResponseBodyOut{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *RepeatedResponseBodyOut) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*RepeatedResponseBodyOut) ProtoMessage() {}\n\nfunc (x *RepeatedResponseBodyOut) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use RepeatedResponseBodyOut.ProtoReflect.Descriptor instead.\nfunc (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response {\n\tif x != nil {\n\t\treturn x.Response\n\t}\n\treturn nil\n}\n\ntype UpdateMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tUpdateMask       *fieldmaskpb.FieldMask `protobuf:\"bytes,1,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n\tABitOfEverything *ABitOfEverything      `protobuf:\"bytes,2,opt,name=a_bit_of_everything,json=aBitOfEverything,proto3\" json:\"a_bit_of_everything,omitempty\"`\n}\n\nfunc (x *UpdateMessage) Reset() {\n\t*x = UpdateMessage{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UpdateMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UpdateMessage) ProtoMessage() {}\n\nfunc (x *UpdateMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UpdateMessage.ProtoReflect.Descriptor instead.\nfunc (*UpdateMessage) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *UpdateMessage) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\nfunc (x *UpdateMessage) GetABitOfEverything() *ABitOfEverything {\n\tif x != nil {\n\t\treturn x.ABitOfEverything\n\t}\n\treturn nil\n}\n\ntype NestedOuter struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tOne *NestedOne `protobuf:\"bytes,1,opt,name=one,proto3\" json:\"one,omitempty\"`\n}\n\nfunc (x *NestedOuter) Reset() {\n\t*x = NestedOuter{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NestedOuter) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NestedOuter) ProtoMessage() {}\n\nfunc (x *NestedOuter) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NestedOuter.ProtoReflect.Descriptor instead.\nfunc (*NestedOuter) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{5}\n}\n\nfunc (x *NestedOuter) GetOne() *NestedOne {\n\tif x != nil {\n\t\treturn x.One\n\t}\n\treturn nil\n}\n\ntype NestedOne struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tTwo *NestedTwo `protobuf:\"bytes,1,opt,name=two,proto3\" json:\"two,omitempty\"`\n}\n\nfunc (x *NestedOne) Reset() {\n\t*x = NestedOne{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NestedOne) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NestedOne) ProtoMessage() {}\n\nfunc (x *NestedOne) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NestedOne.ProtoReflect.Descriptor instead.\nfunc (*NestedOne) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{6}\n}\n\nfunc (x *NestedOne) GetTwo() *NestedTwo {\n\tif x != nil {\n\t\treturn x.Two\n\t}\n\treturn nil\n}\n\ntype NestedTwo struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tThree *NestedThree `protobuf:\"bytes,1,opt,name=three,proto3\" json:\"three,omitempty\"`\n}\n\nfunc (x *NestedTwo) Reset() {\n\t*x = NestedTwo{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[7]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NestedTwo) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NestedTwo) ProtoMessage() {}\n\nfunc (x *NestedTwo) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[7]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NestedTwo.ProtoReflect.Descriptor instead.\nfunc (*NestedTwo) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{7}\n}\n\nfunc (x *NestedTwo) GetThree() *NestedThree {\n\tif x != nil {\n\t\treturn x.Three\n\t}\n\treturn nil\n}\n\ntype NestedThree struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tA bool `protobuf:\"varint,1,opt,name=a,proto3\" json:\"a,omitempty\"`\n\tB bool `protobuf:\"varint,2,opt,name=b,proto3\" json:\"b,omitempty\"`\n}\n\nfunc (x *NestedThree) Reset() {\n\t*x = NestedThree{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[8]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NestedThree) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NestedThree) ProtoMessage() {}\n\nfunc (x *NestedThree) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[8]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NestedThree.ProtoReflect.Descriptor instead.\nfunc (*NestedThree) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{8}\n}\n\nfunc (x *NestedThree) GetA() bool {\n\tif x != nil {\n\t\treturn x.A\n\t}\n\treturn false\n}\n\nfunc (x *NestedThree) GetB() bool {\n\tif x != nil {\n\t\treturn x.B\n\t}\n\treturn false\n}\n\ntype UpdateNestedRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tNested     *NestedOuter           `protobuf:\"bytes,1,opt,name=nested,proto3\" json:\"nested,omitempty\"`\n\tUpdateMask *fieldmaskpb.FieldMask `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n}\n\nfunc (x *UpdateNestedRequest) Reset() {\n\t*x = UpdateNestedRequest{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[9]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *UpdateNestedRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UpdateNestedRequest) ProtoMessage() {}\n\nfunc (x *UpdateNestedRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[9]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UpdateNestedRequest.ProtoReflect.Descriptor instead.\nfunc (*UpdateNestedRequest) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{9}\n}\n\nfunc (x *UpdateNestedRequest) GetNested() *NestedOuter {\n\tif x != nil {\n\t\treturn x.Nested\n\t}\n\treturn nil\n}\n\nfunc (x *UpdateNestedRequest) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\n// Nested is nested type.\ntype ABitOfEverything_Nested struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// name is nested field.\n\tName   string `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tAmount uint32 `protobuf:\"varint,2,opt,name=amount,proto3\" json:\"amount,omitempty\"`\n\t// DeepEnum comment.\n\tOk ABitOfEverything_Nested_DeepEnum `protobuf:\"varint,3,opt,name=ok,proto3,enum=grpc.gateway.runtime.internal.examplepb.ABitOfEverything_Nested_DeepEnum\" json:\"ok,omitempty\"`\n}\n\nfunc (x *ABitOfEverything_Nested) Reset() {\n\t*x = ABitOfEverything_Nested{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[10]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ABitOfEverything_Nested) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ABitOfEverything_Nested) ProtoMessage() {}\n\nfunc (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[10]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ABitOfEverything_Nested.ProtoReflect.Descriptor instead.\nfunc (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{1, 0}\n}\n\nfunc (x *ABitOfEverything_Nested) GetName() string {\n\tif x != nil {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\nfunc (x *ABitOfEverything_Nested) GetAmount() uint32 {\n\tif x != nil {\n\t\treturn x.Amount\n\t}\n\treturn 0\n}\n\nfunc (x *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum {\n\tif x != nil {\n\t\treturn x.Ok\n\t}\n\treturn ABitOfEverything_Nested_FALSE\n}\n\ntype ResponseBodyOut_Response struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tData string `protobuf:\"bytes,1,opt,name=data,proto3\" json:\"data,omitempty\"`\n}\n\nfunc (x *ResponseBodyOut_Response) Reset() {\n\t*x = ResponseBodyOut_Response{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[14]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *ResponseBodyOut_Response) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ResponseBodyOut_Response) ProtoMessage() {}\n\nfunc (x *ResponseBodyOut_Response) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[14]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ResponseBodyOut_Response.ProtoReflect.Descriptor instead.\nfunc (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{2, 0}\n}\n\nfunc (x *ResponseBodyOut_Response) GetData() string {\n\tif x != nil {\n\t\treturn x.Data\n\t}\n\treturn \"\"\n}\n\ntype RepeatedResponseBodyOut_Response struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tData string                                        `protobuf:\"bytes,1,opt,name=data,proto3\" json:\"data,omitempty\"`\n\tType RepeatedResponseBodyOut_Response_ResponseType `protobuf:\"varint,3,opt,name=type,proto3,enum=grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType\" json:\"type,omitempty\"`\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) Reset() {\n\t*x = RepeatedResponseBodyOut_Response{}\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[15]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*RepeatedResponseBodyOut_Response) ProtoMessage() {}\n\nfunc (x *RepeatedResponseBodyOut_Response) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_example_proto_msgTypes[15]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use RepeatedResponseBodyOut_Response.ProtoReflect.Descriptor instead.\nfunc (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{3, 0}\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) GetData() string {\n\tif x != nil {\n\t\treturn x.Data\n\t}\n\treturn \"\"\n}\n\nfunc (x *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType {\n\tif x != nil {\n\t\treturn x.Type\n\t}\n\treturn RepeatedResponseBodyOut_Response_UNKNOWN\n}\n\nvar File_runtime_internal_examplepb_example_proto protoreflect.FileDescriptor\n\nvar file_runtime_internal_examplepb_example_proto_rawDesc = []byte{\n\t0x0a, 0x28, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,\n\t0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65,\n\t0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74,\n\t0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1f,\n\t0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,\n\t0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22,\n\t0xdc, 0x15, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69,\n\t0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72,\n\t0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73,\n\t0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75,\n\t0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12,\n\t0x58, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72,\n\t0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66,\n\t0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65,\n\t0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f,\n\t0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a,\n\t0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f,\n\t0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01,\n\t0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a,\n\t0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01,\n\t0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21,\n\t0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06,\n\t0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64,\n\t0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64,\n\t0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c,\n\t0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a,\n\t0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08,\n\t0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73,\n\t0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f,\n\t0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20,\n\t0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,\n\t0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, 0x6e,\n\t0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65,\n\t0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52,\n\t0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25,\n\t0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e,\n\t0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74,\n\t0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b,\n\t0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72,\n\t0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65,\n\t0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,\n\t0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a,\n\t0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e,\n\t0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09,\n\t0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12,\n\t0x64, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03,\n\t0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69,\n\t0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61,\n\t0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64,\n\t0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42,\n\t0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d,\n\t0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72,\n\t0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70,\n\t0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e,\n\t0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64,\n\t0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e,\n\t0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61,\n\t0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e,\n\t0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61,\n\t0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73,\n\t0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,\n\t0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69,\n\t0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x13,\n\t0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52,\n\t0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65,\n\t0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20,\n\t0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e,\n\t0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65,\n\t0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,\n\t0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28,\n\t0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65,\n\t0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1a,\n\t0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f,\n\t0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09,\n\t0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x1a, 0x72, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e,\n\t0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40,\n\t0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75,\n\t0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45,\n\t0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, 0x11, 0x6e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,\n\t0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67,\n\t0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41,\n\t0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x74,\n\t0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65,\n\t0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, 0x65,\n\t0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x61, 0x6e, 0x79,\n\t0x74, 0x79, 0x70, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79,\n\t0x52, 0x07, 0x61, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x72, 0x65, 0x70,\n\t0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x18, 0x27, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xb0, 0x01, 0x0a, 0x06, 0x4e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f,\n\t0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e,\n\t0x74, 0x12, 0x59, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x49, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e,\n\t0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76,\n\t0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e,\n\t0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08,\n\t0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53,\n\t0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x1a, 0x71, 0x0a,\n\t0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,\n\t0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,\n\t0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,\n\t0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72,\n\t0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69,\n\t0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,\n\t0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,\n\t0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x86, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65,\n\t0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,\n\t0x6b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,\n\t0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69,\n\t0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42,\n\t0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x90,\n\t0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f,\n\t0x75, 0x74, 0x12, 0x5d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,\n\t0x65, 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a,\n\t0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74,\n\t0x61, 0x22, 0xb8, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65,\n\t0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x65, 0x0a,\n\t0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72,\n\t0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,\n\t0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75,\n\t0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70,\n\t0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb5, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,\n\t0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20,\n\t0x01, 0x28, 0x0e, 0x32, 0x56, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f,\n\t0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52,\n\t0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70,\n\t0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70,\n\t0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x05,\n\t0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x22, 0xb6, 0x01, 0x0a,\n\t0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b,\n\t0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52,\n\t0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x68, 0x0a, 0x13, 0x61,\n\t0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69,\n\t0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68,\n\t0x69, 0x6e, 0x67, 0x52, 0x10, 0x61, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79,\n\t0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x53, 0x0a, 0x0b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f,\n\t0x75, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,\n\t0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74,\n\t0x65, 0x64, 0x4f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x22, 0x51, 0x0a, 0x09, 0x4e, 0x65,\n\t0x73, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x22, 0x57, 0x0a,\n\t0x09, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x4a, 0x0a, 0x05, 0x74, 0x68,\n\t0x72, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x68, 0x72, 0x65, 0x65, 0x52,\n\t0x05, 0x74, 0x68, 0x72, 0x65, 0x65, 0x22, 0x29, 0x0a, 0x0b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x54, 0x68, 0x72, 0x65, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,\n\t0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x01,\n\t0x62, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x73, 0x74,\n\t0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x06, 0x6e, 0x65, 0x73,\n\t0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x52,\n\t0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74,\n\t0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,\n\t0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,\n\t0x4d, 0x61, 0x73, 0x6b, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45,\n\t0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a,\n\t0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73,\n\t0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_runtime_internal_examplepb_example_proto_rawDescOnce sync.Once\n\tfile_runtime_internal_examplepb_example_proto_rawDescData = file_runtime_internal_examplepb_example_proto_rawDesc\n)\n\nfunc file_runtime_internal_examplepb_example_proto_rawDescGZIP() []byte {\n\tfile_runtime_internal_examplepb_example_proto_rawDescOnce.Do(func() {\n\t\tfile_runtime_internal_examplepb_example_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_example_proto_rawDescData)\n\t})\n\treturn file_runtime_internal_examplepb_example_proto_rawDescData\n}\n\nvar file_runtime_internal_examplepb_example_proto_enumTypes = make([]protoimpl.EnumInfo, 3)\nvar file_runtime_internal_examplepb_example_proto_msgTypes = make([]protoimpl.MessageInfo, 16)\nvar file_runtime_internal_examplepb_example_proto_goTypes = []any{\n\t(NumericEnum)(0),                                   // 0: grpc.gateway.runtime.internal.examplepb.NumericEnum\n\t(ABitOfEverything_Nested_DeepEnum)(0),              // 1: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum\n\t(RepeatedResponseBodyOut_Response_ResponseType)(0), // 2: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType\n\t(*SimpleMessage)(nil),                              // 3: grpc.gateway.runtime.internal.examplepb.SimpleMessage\n\t(*ABitOfEverything)(nil),                           // 4: grpc.gateway.runtime.internal.examplepb.ABitOfEverything\n\t(*ResponseBodyOut)(nil),                            // 5: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut\n\t(*RepeatedResponseBodyOut)(nil),                    // 6: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut\n\t(*UpdateMessage)(nil),                              // 7: grpc.gateway.runtime.internal.examplepb.UpdateMessage\n\t(*NestedOuter)(nil),                                // 8: grpc.gateway.runtime.internal.examplepb.NestedOuter\n\t(*NestedOne)(nil),                                  // 9: grpc.gateway.runtime.internal.examplepb.NestedOne\n\t(*NestedTwo)(nil),                                  // 10: grpc.gateway.runtime.internal.examplepb.NestedTwo\n\t(*NestedThree)(nil),                                // 11: grpc.gateway.runtime.internal.examplepb.NestedThree\n\t(*UpdateNestedRequest)(nil),                        // 12: grpc.gateway.runtime.internal.examplepb.UpdateNestedRequest\n\t(*ABitOfEverything_Nested)(nil),                    // 13: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested\n\tnil,                                                // 14: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry\n\tnil,                                                // 15: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry\n\tnil,                                                // 16: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry\n\t(*ResponseBodyOut_Response)(nil),                   // 17: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response\n\t(*RepeatedResponseBodyOut_Response)(nil),           // 18: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response\n\t(*emptypb.Empty)(nil),                              // 19: google.protobuf.Empty\n\t(*timestamppb.Timestamp)(nil),                      // 20: google.protobuf.Timestamp\n\t(*anypb.Any)(nil),                                  // 21: google.protobuf.Any\n\t(*fieldmaskpb.FieldMask)(nil),                      // 22: google.protobuf.FieldMask\n}\nvar file_runtime_internal_examplepb_example_proto_depIdxs = []int32{\n\t13, // 0: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested\n\t13, // 1: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested\n\t0,  // 2: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum\n\t19, // 3: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty\n\t14, // 4: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry\n\t15, // 5: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry\n\t16, // 6: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry\n\t20, // 7: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp\n\t0,  // 8: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum\n\t0,  // 9: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum\n\t0,  // 10: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum\n\t13, // 11: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested\n\t13, // 12: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested\n\t21, // 13: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.anytype:type_name -> google.protobuf.Any\n\t21, // 14: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_anytype:type_name -> google.protobuf.Any\n\t17, // 15: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response\n\t18, // 16: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response\n\t22, // 17: grpc.gateway.runtime.internal.examplepb.UpdateMessage.update_mask:type_name -> google.protobuf.FieldMask\n\t4,  // 18: grpc.gateway.runtime.internal.examplepb.UpdateMessage.a_bit_of_everything:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything\n\t9,  // 19: grpc.gateway.runtime.internal.examplepb.NestedOuter.one:type_name -> grpc.gateway.runtime.internal.examplepb.NestedOne\n\t10, // 20: grpc.gateway.runtime.internal.examplepb.NestedOne.two:type_name -> grpc.gateway.runtime.internal.examplepb.NestedTwo\n\t11, // 21: grpc.gateway.runtime.internal.examplepb.NestedTwo.three:type_name -> grpc.gateway.runtime.internal.examplepb.NestedThree\n\t8,  // 22: grpc.gateway.runtime.internal.examplepb.UpdateNestedRequest.nested:type_name -> grpc.gateway.runtime.internal.examplepb.NestedOuter\n\t22, // 23: grpc.gateway.runtime.internal.examplepb.UpdateNestedRequest.update_mask:type_name -> google.protobuf.FieldMask\n\t1,  // 24: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum\n\t0,  // 25: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum\n\t13, // 26: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested\n\t2,  // 27: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType\n\t28, // [28:28] is the sub-list for method output_type\n\t28, // [28:28] is the sub-list for method input_type\n\t28, // [28:28] is the sub-list for extension type_name\n\t28, // [28:28] is the sub-list for extension extendee\n\t0,  // [0:28] is the sub-list for field type_name\n}\n\nfunc init() { file_runtime_internal_examplepb_example_proto_init() }\nfunc file_runtime_internal_examplepb_example_proto_init() {\n\tif File_runtime_internal_examplepb_example_proto != nil {\n\t\treturn\n\t}\n\tfile_runtime_internal_examplepb_example_proto_msgTypes[1].OneofWrappers = []any{\n\t\t(*ABitOfEverything_OneofEmpty)(nil),\n\t\t(*ABitOfEverything_OneofString)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_runtime_internal_examplepb_example_proto_rawDesc,\n\t\t\tNumEnums:      3,\n\t\t\tNumMessages:   16,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_runtime_internal_examplepb_example_proto_goTypes,\n\t\tDependencyIndexes: file_runtime_internal_examplepb_example_proto_depIdxs,\n\t\tEnumInfos:         file_runtime_internal_examplepb_example_proto_enumTypes,\n\t\tMessageInfos:      file_runtime_internal_examplepb_example_proto_msgTypes,\n\t}.Build()\n\tFile_runtime_internal_examplepb_example_proto = out.File\n\tfile_runtime_internal_examplepb_example_proto_rawDesc = nil\n\tfile_runtime_internal_examplepb_example_proto_goTypes = nil\n\tfile_runtime_internal_examplepb_example_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/example.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.runtime.internal.examplepb;\n\nimport \"google/protobuf/any.proto\";\nimport \"google/protobuf/empty.proto\";\nimport \"google/protobuf/field_mask.proto\";\nimport \"google/protobuf/timestamp.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\";\n\n// SimpleMessage represents a simple message sent to the Echo service.\nmessage SimpleMessage {\n  string id = 1;\n}\n\nmessage ABitOfEverything {\n  // Nested is nested type.\n  message Nested {\n    // name is nested field.\n    string name = 1;\n    uint32 amount = 2;\n    // DeepEnum is one or zero.\n    enum DeepEnum {\n      // FALSE is false.\n      FALSE = 0;\n      // TRUE is true.\n      TRUE = 1;\n    }\n    // DeepEnum comment.\n    DeepEnum ok = 3;\n  }\n  Nested single_nested = 25;\n  string uuid = 1;\n  repeated Nested nested = 2;\n  float float_value = 3;\n  double double_value = 4;\n  int64 int64_value = 5;\n  uint64 uint64_value = 6;\n  int32 int32_value = 7;\n  fixed64 fixed64_value = 8;\n  fixed32 fixed32_value = 9;\n  bool bool_value = 10;\n  string string_value = 11;\n  bytes bytes_value = 29;\n  uint32 uint32_value = 13;\n  NumericEnum enum_value = 14;\n  sfixed32 sfixed32_value = 15;\n  sfixed64 sfixed64_value = 16;\n  sint32 sint32_value = 17;\n  sint64 sint64_value = 18;\n  repeated string repeated_string_value = 19;\n  oneof oneof_value {\n    google.protobuf.Empty oneof_empty = 20;\n    string oneof_string = 21;\n  }\n  map<string, NumericEnum> map_value = 22;\n  map<string, string> mapped_string_value = 23;\n  map<string, Nested> mapped_nested_value = 24;\n  string nonConventionalNameValue = 26;\n  google.protobuf.Timestamp timestamp_value = 27;\n  // repeated enum value. it is comma-separated in query\n  repeated NumericEnum repeated_enum_value = 28;\n  // repeated numeric enum comment (This comment is overridden by the field\n  // annotation)\n  repeated NumericEnum repeated_enum_annotation = 32;\n  // numeric enum comment (This comment is overridden by the field annotation)\n  NumericEnum enum_value_annotation = 33;\n  // repeated string comment (This comment is overridden by the field\n  // annotation)\n  repeated string repeated_string_annotation = 34;\n  // repeated nested object comment (This comment is overridden by the field\n  // annotation)\n  repeated Nested repeated_nested_annotation = 35;\n  // nested object comments (This comment is overridden by the field annotation)\n  Nested nested_annotation = 36;\n  int64 int64_override_type = 37;\n  google.protobuf.Any anytype = 38;\n  repeated google.protobuf.Any repeated_anytype = 39;\n}\n\n// NumericEnum is one or zero.\nenum NumericEnum {\n  // ZERO means 0\n  ZERO = 0;\n  // ONE means 1\n  ONE = 1;\n}\n\nmessage ResponseBodyOut {\n  message Response {\n    string data = 1;\n  }\n  Response response = 2;\n}\n\nmessage RepeatedResponseBodyOut {\n  message Response {\n    string data = 1;\n    enum ResponseType {\n      // UNKNOWN\n      UNKNOWN = 0;\n      // A is 1\n      A = 1;\n      // B is 2\n      B = 2;\n    }\n    ResponseType type = 3;\n  }\n  repeated Response response = 2;\n}\n\nmessage UpdateMessage {\n  google.protobuf.FieldMask update_mask = 1;\n  ABitOfEverything a_bit_of_everything = 2;\n}\n\nmessage NestedOuter {\n  NestedOne one = 1;\n}\n\nmessage NestedOne {\n  NestedTwo two = 1;\n}\n\nmessage NestedTwo {\n  NestedThree three = 1;\n}\n\nmessage NestedThree {\n  bool a = 1;\n  bool b = 2;\n}\n\nmessage UpdateNestedRequest {\n  NestedOuter nested = 1;\n  google.protobuf.FieldMask update_mask = 2;\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/example.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"runtime/internal/examplepb/example.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/non_standard_names.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: runtime/internal/examplepb/non_standard_names.proto\n\npackage examplepb\n\nimport (\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\n// NonStandardMessage has oddly named fields.\ntype NonStandardMessage struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId          string                    `protobuf:\"bytes,1,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tNum         int64                     `protobuf:\"varint,2,opt,name=Num,proto3\" json:\"Num,omitempty\"`\n\tLineNum     int64                     `protobuf:\"varint,3,opt,name=line_num,json=lineNum,proto3\" json:\"line_num,omitempty\"`\n\tLangIdent   string                    `protobuf:\"bytes,4,opt,name=langIdent,proto3\" json:\"langIdent,omitempty\"`\n\tSTATUS      string                    `protobuf:\"bytes,5,opt,name=STATUS,proto3\" json:\"STATUS,omitempty\"`\n\tEn_GB       int64                     `protobuf:\"varint,6,opt,name=en_GB,json=enGB,proto3\" json:\"en_GB,omitempty\"`\n\tNo          string                    `protobuf:\"bytes,7,opt,name=no,proto3\" json:\"no,omitempty\"`\n\tThing       *NonStandardMessage_Thing `protobuf:\"bytes,8,opt,name=thing,proto3\" json:\"thing,omitempty\"`\n\tStructField *structpb.Struct          `protobuf:\"bytes,9,opt,name=struct_field,json=structField,proto3\" json:\"struct_field,omitempty\"`\n\tValueField  *structpb.Value           `protobuf:\"bytes,10,opt,name=value_field,json=valueField,proto3\" json:\"value_field,omitempty\"`\n}\n\nfunc (x *NonStandardMessage) Reset() {\n\t*x = NonStandardMessage{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessage) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessage) ProtoMessage() {}\n\nfunc (x *NonStandardMessage) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessage.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessage) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *NonStandardMessage) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessage) GetLineNum() int64 {\n\tif x != nil {\n\t\treturn x.LineNum\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessage) GetLangIdent() string {\n\tif x != nil {\n\t\treturn x.LangIdent\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetSTATUS() string {\n\tif x != nil {\n\t\treturn x.STATUS\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetEn_GB() int64 {\n\tif x != nil {\n\t\treturn x.En_GB\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessage) GetNo() string {\n\tif x != nil {\n\t\treturn x.No\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessage) GetThing() *NonStandardMessage_Thing {\n\tif x != nil {\n\t\treturn x.Thing\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardMessage) GetStructField() *structpb.Struct {\n\tif x != nil {\n\t\treturn x.StructField\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardMessage) GetValueField() *structpb.Value {\n\tif x != nil {\n\t\treturn x.ValueField\n\t}\n\treturn nil\n}\n\ntype NonStandardUpdateRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBody       *NonStandardMessage    `protobuf:\"bytes,1,opt,name=body,proto3\" json:\"body,omitempty\"`\n\tUpdateMask *fieldmaskpb.FieldMask `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n}\n\nfunc (x *NonStandardUpdateRequest) Reset() {\n\t*x = NonStandardUpdateRequest{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[1]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardUpdateRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardUpdateRequest) ProtoMessage() {}\n\nfunc (x *NonStandardUpdateRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[1]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardUpdateRequest.ProtoReflect.Descriptor instead.\nfunc (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *NonStandardUpdateRequest) GetBody() *NonStandardMessage {\n\tif x != nil {\n\t\treturn x.Body\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\n// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion.\ntype NonStandardMessageWithJSONNames struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Id represents the message identifier.\n\tId          string                                 `protobuf:\"bytes,1,opt,name=id,json=ID,proto3\" json:\"id,omitempty\"`\n\tNum         int64                                  `protobuf:\"varint,2,opt,name=Num,proto3\" json:\"Num,omitempty\"`\n\tLineNum     int64                                  `protobuf:\"varint,3,opt,name=line_num,json=LineNum,proto3\" json:\"line_num,omitempty\"`\n\tLangIdent   string                                 `protobuf:\"bytes,4,opt,name=langIdent,proto3\" json:\"langIdent,omitempty\"`\n\tSTATUS      string                                 `protobuf:\"bytes,5,opt,name=STATUS,json=status,proto3\" json:\"STATUS,omitempty\"`\n\tEn_GB       int64                                  `protobuf:\"varint,6,opt,name=en_GB,json=En_GB,proto3\" json:\"en_GB,omitempty\"`\n\tNo          string                                 `protobuf:\"bytes,7,opt,name=no,json=yes,proto3\" json:\"no,omitempty\"`\n\tThing       *NonStandardMessageWithJSONNames_Thing `protobuf:\"bytes,8,opt,name=thing,json=Thingy,proto3\" json:\"thing,omitempty\"`\n\tStructField *structpb.Struct                       `protobuf:\"bytes,9,opt,name=struct_field,json=StructField,proto3\" json:\"struct_field,omitempty\"`\n\tValueField  *structpb.Value                        `protobuf:\"bytes,10,opt,name=value_field,json=ValueField,proto3\" json:\"value_field,omitempty\"`\n}\n\nfunc (x *NonStandardMessageWithJSONNames) Reset() {\n\t*x = NonStandardMessageWithJSONNames{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[2]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessageWithJSONNames) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessageWithJSONNames) ProtoMessage() {}\n\nfunc (x *NonStandardMessageWithJSONNames) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[2]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessageWithJSONNames.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetId() string {\n\tif x != nil {\n\t\treturn x.Id\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetNum() int64 {\n\tif x != nil {\n\t\treturn x.Num\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetLineNum() int64 {\n\tif x != nil {\n\t\treturn x.LineNum\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetLangIdent() string {\n\tif x != nil {\n\t\treturn x.LangIdent\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetSTATUS() string {\n\tif x != nil {\n\t\treturn x.STATUS\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetEn_GB() int64 {\n\tif x != nil {\n\t\treturn x.En_GB\n\t}\n\treturn 0\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetNo() string {\n\tif x != nil {\n\t\treturn x.No\n\t}\n\treturn \"\"\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessageWithJSONNames_Thing {\n\tif x != nil {\n\t\treturn x.Thing\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetStructField() *structpb.Struct {\n\tif x != nil {\n\t\treturn x.StructField\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardMessageWithJSONNames) GetValueField() *structpb.Value {\n\tif x != nil {\n\t\treturn x.ValueField\n\t}\n\treturn nil\n}\n\ntype NonStandardWithJSONNamesUpdateRequest struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tBody       *NonStandardMessageWithJSONNames `protobuf:\"bytes,1,opt,name=body,proto3\" json:\"body,omitempty\"`\n\tUpdateMask *fieldmaskpb.FieldMask           `protobuf:\"bytes,2,opt,name=update_mask,json=updateMask,proto3\" json:\"update_mask,omitempty\"`\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) Reset() {\n\t*x = NonStandardWithJSONNamesUpdateRequest{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[3]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[3]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardWithJSONNamesUpdateRequest.ProtoReflect.Descriptor instead.\nfunc (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWithJSONNames {\n\tif x != nil {\n\t\treturn x.Body\n\t}\n\treturn nil\n}\n\nfunc (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.UpdateMask\n\t}\n\treturn nil\n}\n\ntype NonStandardMessage_Thing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubThing *NonStandardMessage_Thing_SubThing `protobuf:\"bytes,1,opt,name=subThing,proto3\" json:\"subThing,omitempty\"`\n}\n\nfunc (x *NonStandardMessage_Thing) Reset() {\n\t*x = NonStandardMessage_Thing{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[4]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessage_Thing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessage_Thing) ProtoMessage() {}\n\nfunc (x *NonStandardMessage_Thing) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[4]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessage_Thing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0}\n}\n\nfunc (x *NonStandardMessage_Thing) GetSubThing() *NonStandardMessage_Thing_SubThing {\n\tif x != nil {\n\t\treturn x.SubThing\n\t}\n\treturn nil\n}\n\ntype NonStandardMessage_Thing_SubThing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubValue string `protobuf:\"bytes,1,opt,name=sub_value,json=subValue,proto3\" json:\"sub_value,omitempty\"`\n}\n\nfunc (x *NonStandardMessage_Thing_SubThing) Reset() {\n\t*x = NonStandardMessage_Thing_SubThing{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[5]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessage_Thing_SubThing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessage_Thing_SubThing) ProtoMessage() {}\n\nfunc (x *NonStandardMessage_Thing_SubThing) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[5]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessage_Thing_SubThing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0, 0}\n}\n\nfunc (x *NonStandardMessage_Thing_SubThing) GetSubValue() string {\n\tif x != nil {\n\t\treturn x.SubValue\n\t}\n\treturn \"\"\n}\n\ntype NonStandardMessageWithJSONNames_Thing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubThing *NonStandardMessageWithJSONNames_Thing_SubThing `protobuf:\"bytes,1,opt,name=subThing,json=SubThing,proto3\" json:\"subThing,omitempty\"`\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) Reset() {\n\t*x = NonStandardMessageWithJSONNames_Thing{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[6]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[6]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessageWithJSONNames_Thing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0}\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing) GetSubThing() *NonStandardMessageWithJSONNames_Thing_SubThing {\n\tif x != nil {\n\t\treturn x.SubThing\n\t}\n\treturn nil\n}\n\ntype NonStandardMessageWithJSONNames_Thing_SubThing struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tSubValue string `protobuf:\"bytes,1,opt,name=sub_value,json=sub_Value,proto3\" json:\"sub_value,omitempty\"`\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) Reset() {\n\t*x = NonStandardMessageWithJSONNames_Thing_SubThing{}\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[7]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[7]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use NonStandardMessageWithJSONNames_Thing_SubThing.ProtoReflect.Descriptor instead.\nfunc (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0, 0}\n}\n\nfunc (x *NonStandardMessageWithJSONNames_Thing_SubThing) GetSubValue() string {\n\tif x != nil {\n\t\treturn x.SubValue\n\t}\n\treturn \"\"\n}\n\nvar File_runtime_internal_examplepb_non_standard_names_proto protoreflect.FileDescriptor\n\nvar file_runtime_internal_examplepb_non_standard_names_proto_rawDesc = []byte{\n\t0x0a, 0x33, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x6e, 0x6f, 0x6e,\n\t0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69,\n\t0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,\n\t0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95, 0x04, 0x0a,\n\t0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,\n\t0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75,\n\t0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d,\n\t0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16,\n\t0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,\n\t0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x13, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18,\n\t0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x65, 0x6e, 0x47, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x6e,\n\t0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x57, 0x0a, 0x05, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d,\n\t0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x74,\n\t0x68, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x66,\n\t0x69, 0x65, 0x6c, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,\n\t0x75, 0x63, 0x74, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64,\n\t0x12, 0x37, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18,\n\t0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x1a, 0x98, 0x01, 0x0a, 0x05, 0x54, 0x68,\n\t0x69, 0x6e, 0x67, 0x12, 0x66, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x18,\n\t0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e,\n\t0x67, 0x52, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x27, 0x0a, 0x08, 0x53,\n\t0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x18, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e,\n\t0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,\n\t0x74, 0x12, 0x4f, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72,\n\t0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61,\n\t0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x62, 0x6f,\n\t0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73,\n\t0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,\n\t0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d,\n\t0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22,\n\t0xc0, 0x04, 0x0a, 0x1f, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d,\n\t0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61,\n\t0x6d, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x02, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,\n\t0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75,\n\t0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d,\n\t0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20,\n\t0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16,\n\t0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,\n\t0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18,\n\t0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x45, 0x6e, 0x5f, 0x47, 0x42, 0x12, 0x0f, 0x0a, 0x02,\n\t0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x65, 0x0a,\n\t0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74,\n\t0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61,\n\t0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f,\n\t0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x54, 0x68,\n\t0x69, 0x6e, 0x67, 0x79, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x66,\n\t0x69, 0x65, 0x6c, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,\n\t0x75, 0x63, 0x74, 0x52, 0x0b, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64,\n\t0x12, 0x37, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18,\n\t0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x1a, 0xa6, 0x01, 0x0a, 0x05, 0x54, 0x68,\n\t0x69, 0x6e, 0x67, 0x12, 0x73, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x18,\n\t0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e,\n\t0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08,\n\t0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x28, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54,\n\t0x68, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x25, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61,\n\t0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55,\n\t0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x04,\n\t0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d,\n\t0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e,\n\t0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70,\n\t0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64,\n\t0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xbf, 0x03, 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53,\n\t0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb7,\n\t0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55,\n\t0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x67,\n\t0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74,\n\t0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61,\n\t0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02,\n\t0x27, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61,\n\t0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72,\n\t0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0xee, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64,\n\t0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73,\n\t0x12, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74,\n\t0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61,\n\t0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,\n\t0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,\n\t0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,\n\t0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74,\n\t0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74,\n\t0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93,\n\t0x02, 0x37, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61,\n\t0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a,\n\t0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74,\n\t0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f,\n\t0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_runtime_internal_examplepb_non_standard_names_proto_rawDescOnce sync.Once\n\tfile_runtime_internal_examplepb_non_standard_names_proto_rawDescData = file_runtime_internal_examplepb_non_standard_names_proto_rawDesc\n)\n\nfunc file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP() []byte {\n\tfile_runtime_internal_examplepb_non_standard_names_proto_rawDescOnce.Do(func() {\n\t\tfile_runtime_internal_examplepb_non_standard_names_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_non_standard_names_proto_rawDescData)\n\t})\n\treturn file_runtime_internal_examplepb_non_standard_names_proto_rawDescData\n}\n\nvar file_runtime_internal_examplepb_non_standard_names_proto_msgTypes = make([]protoimpl.MessageInfo, 8)\nvar file_runtime_internal_examplepb_non_standard_names_proto_goTypes = []any{\n\t(*NonStandardMessage)(nil),                             // 0: grpc.gateway.runtime.internal.examplepb.NonStandardMessage\n\t(*NonStandardUpdateRequest)(nil),                       // 1: grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest\n\t(*NonStandardMessageWithJSONNames)(nil),                // 2: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames\n\t(*NonStandardWithJSONNamesUpdateRequest)(nil),          // 3: grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest\n\t(*NonStandardMessage_Thing)(nil),                       // 4: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing\n\t(*NonStandardMessage_Thing_SubThing)(nil),              // 5: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing.SubThing\n\t(*NonStandardMessageWithJSONNames_Thing)(nil),          // 6: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing\n\t(*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing\n\t(*structpb.Struct)(nil),                                // 8: google.protobuf.Struct\n\t(*structpb.Value)(nil),                                 // 9: google.protobuf.Value\n\t(*fieldmaskpb.FieldMask)(nil),                          // 10: google.protobuf.FieldMask\n}\nvar file_runtime_internal_examplepb_non_standard_names_proto_depIdxs = []int32{\n\t4,  // 0: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing\n\t8,  // 1: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.struct_field:type_name -> google.protobuf.Struct\n\t9,  // 2: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.value_field:type_name -> google.protobuf.Value\n\t0,  // 3: grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest.body:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage\n\t10, // 4: grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask\n\t6,  // 5: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.thing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing\n\t8,  // 6: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.struct_field:type_name -> google.protobuf.Struct\n\t9,  // 7: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.value_field:type_name -> google.protobuf.Value\n\t2,  // 8: grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.body:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames\n\t10, // 9: grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask\n\t5,  // 10: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing.subThing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing.SubThing\n\t7,  // 11: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing.subThing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing\n\t1,  // 12: grpc.gateway.runtime.internal.examplepb.NonStandardService.Update:input_type -> grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest\n\t3,  // 13: grpc.gateway.runtime.internal.examplepb.NonStandardService.UpdateWithJSONNames:input_type -> grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest\n\t0,  // 14: grpc.gateway.runtime.internal.examplepb.NonStandardService.Update:output_type -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage\n\t2,  // 15: grpc.gateway.runtime.internal.examplepb.NonStandardService.UpdateWithJSONNames:output_type -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames\n\t14, // [14:16] is the sub-list for method output_type\n\t12, // [12:14] is the sub-list for method input_type\n\t12, // [12:12] is the sub-list for extension type_name\n\t12, // [12:12] is the sub-list for extension extendee\n\t0,  // [0:12] is the sub-list for field type_name\n}\n\nfunc init() { file_runtime_internal_examplepb_non_standard_names_proto_init() }\nfunc file_runtime_internal_examplepb_non_standard_names_proto_init() {\n\tif File_runtime_internal_examplepb_non_standard_names_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_runtime_internal_examplepb_non_standard_names_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   8,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   1,\n\t\t},\n\t\tGoTypes:           file_runtime_internal_examplepb_non_standard_names_proto_goTypes,\n\t\tDependencyIndexes: file_runtime_internal_examplepb_non_standard_names_proto_depIdxs,\n\t\tMessageInfos:      file_runtime_internal_examplepb_non_standard_names_proto_msgTypes,\n\t}.Build()\n\tFile_runtime_internal_examplepb_non_standard_names_proto = out.File\n\tfile_runtime_internal_examplepb_non_standard_names_proto_rawDesc = nil\n\tfile_runtime_internal_examplepb_non_standard_names_proto_goTypes = nil\n\tfile_runtime_internal_examplepb_non_standard_names_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/non_standard_names.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.runtime.internal.examplepb;\n\nimport \"google/api/annotations.proto\";\nimport \"google/protobuf/field_mask.proto\";\nimport \"google/protobuf/struct.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\";\n\n// NonStandardMessage has oddly named fields.\nmessage NonStandardMessage {\n  // Id represents the message identifier.\n  string id = 1;\n  int64 Num = 2;\n  int64 line_num = 3;\n  string langIdent = 4;\n  string STATUS = 5;\n  int64 en_GB = 6;\n  string no = 7;\n\n  message Thing {\n    message SubThing {\n      string sub_value = 1;\n    }\n    SubThing subThing = 1;\n  }\n  Thing thing = 8;\n  google.protobuf.Struct struct_field = 9;\n  google.protobuf.Value value_field = 10;\n}\n\nmessage NonStandardUpdateRequest {\n  NonStandardMessage body = 1;\n  google.protobuf.FieldMask update_mask = 2;\n}\n\n// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion.\nmessage NonStandardMessageWithJSONNames {\n  // Id represents the message identifier.\n  string id = 1 [json_name = \"ID\"];\n  int64 Num = 2 [json_name = \"Num\"];\n  int64 line_num = 3 [json_name = \"LineNum\"];\n  string langIdent = 4 [json_name = \"langIdent\"];\n  string STATUS = 5 [json_name = \"status\"];\n  int64 en_GB = 6 [json_name = \"En_GB\"];\n  string no = 7 [json_name = \"yes\"];\n\n  message Thing {\n    message SubThing {\n      string sub_value = 1 [json_name = \"sub_Value\"];\n    }\n    SubThing subThing = 1 [json_name = \"SubThing\"];\n  }\n  Thing thing = 8 [json_name = \"Thingy\"];\n  google.protobuf.Struct struct_field = 9 [json_name = \"StructField\"];\n  google.protobuf.Value value_field = 10 [json_name = \"ValueField\"];\n}\n\nmessage NonStandardWithJSONNamesUpdateRequest {\n  NonStandardMessageWithJSONNames body = 1;\n  google.protobuf.FieldMask update_mask = 2;\n}\n\n// NonStandardService responds to incoming messages, applies a field mask and returns the masked response.\nservice NonStandardService {\n  // Apply field mask to empty NonStandardMessage and return result.\n  rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) {\n    option (google.api.http) = {\n      patch: \"/v1/example/non_standard/update\"\n      body: \"body\"\n    };\n  }\n\n  // Apply field mask to empty NonStandardMessageWithJSONNames and return result.\n  rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) {\n    option (google.api.http) = {\n      patch: \"/v1/example/non_standard/update_with_json_names\"\n      body: \"body\"\n    };\n  }\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/non_standard_names.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"runtime/internal/examplepb/non_standard_names.proto\",\n    \"version\": \"version not set\"\n  },\n  \"tags\": [\n    {\n      \"name\": \"NonStandardService\"\n    }\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/v1/example/non_standard/update\": {\n      \"patch\": {\n        \"summary\": \"Apply field mask to empty NonStandardMessage and return result.\",\n        \"operationId\": \"NonStandardService_Update\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessage\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessage\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"NonStandardService\"\n        ]\n      }\n    },\n    \"/v1/example/non_standard/update_with_json_names\": {\n      \"patch\": {\n        \"summary\": \"Apply field mask to empty NonStandardMessageWithJSONNames and return result.\",\n        \"operationId\": \"NonStandardService_UpdateWithJSONNames\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A successful response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNames\"\n            }\n          },\n          \"default\": {\n            \"description\": \"An unexpected error response.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/rpcStatus\"\n            }\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNames\"\n            }\n          }\n        ],\n        \"tags\": [\n          \"NonStandardService\"\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"examplepbNonStandardMessage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"Num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"lineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"langIdent\": {\n          \"type\": \"string\"\n        },\n        \"STATUS\": {\n          \"type\": \"string\"\n        },\n        \"enGB\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"no\": {\n          \"type\": \"string\"\n        },\n        \"thing\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageThing\"\n        },\n        \"structField\": {\n          \"type\": \"object\"\n        },\n        \"valueField\": {}\n      },\n      \"description\": \"NonStandardMessage has oddly named fields.\"\n    },\n    \"examplepbNonStandardMessageThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"subThing\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageThingSubThing\"\n        }\n      }\n    },\n    \"examplepbNonStandardMessageThingSubThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"subValue\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"examplepbNonStandardMessageWithJSONNames\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"ID\": {\n          \"type\": \"string\",\n          \"description\": \"Id represents the message identifier.\"\n        },\n        \"Num\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"LineNum\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"langIdent\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"type\": \"string\"\n        },\n        \"En_GB\": {\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"yes\": {\n          \"type\": \"string\"\n        },\n        \"Thingy\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNamesThing\"\n        },\n        \"StructField\": {\n          \"type\": \"object\"\n        },\n        \"ValueField\": {}\n      },\n      \"description\": \"NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion.\"\n    },\n    \"examplepbNonStandardMessageWithJSONNamesThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"SubThing\": {\n          \"$ref\": \"#/definitions/examplepbNonStandardMessageWithJSONNamesThingSubThing\"\n        }\n      }\n    },\n    \"examplepbNonStandardMessageWithJSONNamesThingSubThing\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"sub_Value\": {\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"protobufNullValue\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"NULL_VALUE\"\n      ],\n      \"default\": \"NULL_VALUE\",\n      \"description\": \"`NullValue` is a singleton enumeration to represent the null value for the\\n`Value` type union.\\n\\nThe JSON representation for `NullValue` is JSON `null`.\\n\\n - NULL_VALUE: Null value.\"\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/non_standard_names_grpc.pb.go",
    "content": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.5.1\n// - protoc             (unknown)\n// source: runtime/internal/examplepb/non_standard_names.proto\n\npackage examplepb\n\nimport (\n\tcontext \"context\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\n// Requires gRPC-Go v1.64.0 or later.\nconst _ = grpc.SupportPackageIsVersion9\n\nconst (\n\tNonStandardService_Update_FullMethodName              = \"/grpc.gateway.runtime.internal.examplepb.NonStandardService/Update\"\n\tNonStandardService_UpdateWithJSONNames_FullMethodName = \"/grpc.gateway.runtime.internal.examplepb.NonStandardService/UpdateWithJSONNames\"\n)\n\n// NonStandardServiceClient is the client API for NonStandardService service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.\n//\n// NonStandardService responds to incoming messages, applies a field mask and returns the masked response.\ntype NonStandardServiceClient interface {\n\t// Apply field mask to empty NonStandardMessage and return result.\n\tUpdate(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error)\n\t// Apply field mask to empty NonStandardMessageWithJSONNames and return result.\n\tUpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error)\n}\n\ntype nonStandardServiceClient struct {\n\tcc grpc.ClientConnInterface\n}\n\nfunc NewNonStandardServiceClient(cc grpc.ClientConnInterface) NonStandardServiceClient {\n\treturn &nonStandardServiceClient{cc}\n}\n\nfunc (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(NonStandardMessage)\n\terr := c.cc.Invoke(ctx, NonStandardService_Update_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *nonStandardServiceClient) UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) {\n\tcOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)\n\tout := new(NonStandardMessageWithJSONNames)\n\terr := c.cc.Invoke(ctx, NonStandardService_UpdateWithJSONNames_FullMethodName, in, out, cOpts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// NonStandardServiceServer is the server API for NonStandardService service.\n// All implementations should embed UnimplementedNonStandardServiceServer\n// for forward compatibility.\n//\n// NonStandardService responds to incoming messages, applies a field mask and returns the masked response.\ntype NonStandardServiceServer interface {\n\t// Apply field mask to empty NonStandardMessage and return result.\n\tUpdate(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error)\n\t// Apply field mask to empty NonStandardMessageWithJSONNames and return result.\n\tUpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error)\n}\n\n// UnimplementedNonStandardServiceServer should be embedded to have\n// forward compatible implementations.\n//\n// NOTE: this should be embedded by value instead of pointer to avoid a nil\n// pointer dereference when methods are called.\ntype UnimplementedNonStandardServiceServer struct{}\n\nfunc (UnimplementedNonStandardServiceServer) Update(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Update not implemented\")\n}\nfunc (UnimplementedNonStandardServiceServer) UpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateWithJSONNames not implemented\")\n}\nfunc (UnimplementedNonStandardServiceServer) testEmbeddedByValue() {}\n\n// UnsafeNonStandardServiceServer may be embedded to opt out of forward compatibility for this service.\n// Use of this interface is not recommended, as added methods to NonStandardServiceServer will\n// result in compilation errors.\ntype UnsafeNonStandardServiceServer interface {\n\tmustEmbedUnimplementedNonStandardServiceServer()\n}\n\nfunc RegisterNonStandardServiceServer(s grpc.ServiceRegistrar, srv NonStandardServiceServer) {\n\t// If the following call pancis, it indicates UnimplementedNonStandardServiceServer was\n\t// embedded by pointer and is nil.  This will cause panics if an\n\t// unimplemented method is ever invoked, so we test this at initialization\n\t// time to prevent it from happening at runtime later due to I/O.\n\tif t, ok := srv.(interface{ testEmbeddedByValue() }); ok {\n\t\tt.testEmbeddedByValue()\n\t}\n\ts.RegisterService(&NonStandardService_ServiceDesc, srv)\n}\n\nfunc _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(NonStandardUpdateRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(NonStandardServiceServer).Update(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: NonStandardService_Update_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(NonStandardServiceServer).Update(ctx, req.(*NonStandardUpdateRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(NonStandardWithJSONNamesUpdateRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: NonStandardService_UpdateWithJSONNames_FullMethodName,\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, req.(*NonStandardWithJSONNamesUpdateRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\n// NonStandardService_ServiceDesc is the grpc.ServiceDesc for NonStandardService service.\n// It's only intended for direct use with grpc.RegisterService,\n// and not to be introspected or modified (even as a copy)\nvar NonStandardService_ServiceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.gateway.runtime.internal.examplepb.NonStandardService\",\n\tHandlerType: (*NonStandardServiceServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Update\",\n\t\t\tHandler:    _NonStandardService_Update_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateWithJSONNames\",\n\t\t\tHandler:    _NonStandardService_UpdateWithJSONNames_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"runtime/internal/examplepb/non_standard_names.proto\",\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/proto2.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: runtime/internal/examplepb/proto2.proto\n\npackage examplepb\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype Proto2Message struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tFloatValue    *float32 `protobuf:\"fixed32,42,opt,name=float_value,json=floatValue\" json:\"float_value,omitempty\"`\n\tDoubleValue   *float64 `protobuf:\"fixed64,43,opt,name=double_value,json=doubleValue\" json:\"double_value,omitempty\"`\n\tInt64Value    *int64   `protobuf:\"varint,3,opt,name=int64_value,json=int64Value\" json:\"int64_value,omitempty\"`\n\tInt32Value    *int32   `protobuf:\"varint,4,opt,name=int32_value,json=int32Value\" json:\"int32_value,omitempty\"`\n\tUint64Value   *uint64  `protobuf:\"varint,5,opt,name=uint64_value,json=uint64Value\" json:\"uint64_value,omitempty\"`\n\tUint32Value   *uint32  `protobuf:\"varint,6,opt,name=uint32_value,json=uint32Value\" json:\"uint32_value,omitempty\"`\n\tBoolValue     *bool    `protobuf:\"varint,7,opt,name=bool_value,json=boolValue\" json:\"bool_value,omitempty\"`\n\tStringValue   *string  `protobuf:\"bytes,8,opt,name=string_value,json=stringValue\" json:\"string_value,omitempty\"`\n\tBytesValue    []byte   `protobuf:\"bytes,9,opt,name=bytes_value,json=bytesValue\" json:\"bytes_value,omitempty\"`\n\tRepeatedValue []string `protobuf:\"bytes,10,rep,name=repeated_value,json=repeatedValue\" json:\"repeated_value,omitempty\"`\n}\n\nfunc (x *Proto2Message) Reset() {\n\t*x = Proto2Message{}\n\tmi := &file_runtime_internal_examplepb_proto2_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Proto2Message) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Proto2Message) ProtoMessage() {}\n\nfunc (x *Proto2Message) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_proto2_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Proto2Message.ProtoReflect.Descriptor instead.\nfunc (*Proto2Message) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_proto2_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *Proto2Message) GetFloatValue() float32 {\n\tif x != nil && x.FloatValue != nil {\n\t\treturn *x.FloatValue\n\t}\n\treturn 0\n}\n\nfunc (x *Proto2Message) GetDoubleValue() float64 {\n\tif x != nil && x.DoubleValue != nil {\n\t\treturn *x.DoubleValue\n\t}\n\treturn 0\n}\n\nfunc (x *Proto2Message) GetInt64Value() int64 {\n\tif x != nil && x.Int64Value != nil {\n\t\treturn *x.Int64Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto2Message) GetInt32Value() int32 {\n\tif x != nil && x.Int32Value != nil {\n\t\treturn *x.Int32Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto2Message) GetUint64Value() uint64 {\n\tif x != nil && x.Uint64Value != nil {\n\t\treturn *x.Uint64Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto2Message) GetUint32Value() uint32 {\n\tif x != nil && x.Uint32Value != nil {\n\t\treturn *x.Uint32Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto2Message) GetBoolValue() bool {\n\tif x != nil && x.BoolValue != nil {\n\t\treturn *x.BoolValue\n\t}\n\treturn false\n}\n\nfunc (x *Proto2Message) GetStringValue() string {\n\tif x != nil && x.StringValue != nil {\n\t\treturn *x.StringValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *Proto2Message) GetBytesValue() []byte {\n\tif x != nil {\n\t\treturn x.BytesValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto2Message) GetRepeatedValue() []string {\n\tif x != nil {\n\t\treturn x.RepeatedValue\n\t}\n\treturn nil\n}\n\nvar File_runtime_internal_examplepb_proto2_proto protoreflect.FileDescriptor\n\nvar file_runtime_internal_examplepb_proto2_proto_rawDesc = []byte{\n\t0x0a, 0x27, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x22, 0xe5, 0x02, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x4d, 0x65, 0x73,\n\t0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75,\n\t0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36,\n\t0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69,\n\t0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74,\n\t0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,\n\t0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69,\n\t0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04,\n\t0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a,\n\t0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20,\n\t0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07,\n\t0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,\n\t0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x70,\n\t0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69,\n\t0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63,\n\t0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62,\n}\n\nvar (\n\tfile_runtime_internal_examplepb_proto2_proto_rawDescOnce sync.Once\n\tfile_runtime_internal_examplepb_proto2_proto_rawDescData = file_runtime_internal_examplepb_proto2_proto_rawDesc\n)\n\nfunc file_runtime_internal_examplepb_proto2_proto_rawDescGZIP() []byte {\n\tfile_runtime_internal_examplepb_proto2_proto_rawDescOnce.Do(func() {\n\t\tfile_runtime_internal_examplepb_proto2_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_proto2_proto_rawDescData)\n\t})\n\treturn file_runtime_internal_examplepb_proto2_proto_rawDescData\n}\n\nvar file_runtime_internal_examplepb_proto2_proto_msgTypes = make([]protoimpl.MessageInfo, 1)\nvar file_runtime_internal_examplepb_proto2_proto_goTypes = []any{\n\t(*Proto2Message)(nil), // 0: grpc.gateway.runtime.internal.examplepb.Proto2Message\n}\nvar file_runtime_internal_examplepb_proto2_proto_depIdxs = []int32{\n\t0, // [0:0] is the sub-list for method output_type\n\t0, // [0:0] is the sub-list for method input_type\n\t0, // [0:0] is the sub-list for extension type_name\n\t0, // [0:0] is the sub-list for extension extendee\n\t0, // [0:0] is the sub-list for field type_name\n}\n\nfunc init() { file_runtime_internal_examplepb_proto2_proto_init() }\nfunc file_runtime_internal_examplepb_proto2_proto_init() {\n\tif File_runtime_internal_examplepb_proto2_proto != nil {\n\t\treturn\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_runtime_internal_examplepb_proto2_proto_rawDesc,\n\t\t\tNumEnums:      0,\n\t\t\tNumMessages:   1,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_runtime_internal_examplepb_proto2_proto_goTypes,\n\t\tDependencyIndexes: file_runtime_internal_examplepb_proto2_proto_depIdxs,\n\t\tMessageInfos:      file_runtime_internal_examplepb_proto2_proto_msgTypes,\n\t}.Build()\n\tFile_runtime_internal_examplepb_proto2_proto = out.File\n\tfile_runtime_internal_examplepb_proto2_proto_rawDesc = nil\n\tfile_runtime_internal_examplepb_proto2_proto_goTypes = nil\n\tfile_runtime_internal_examplepb_proto2_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/proto2.proto",
    "content": "syntax = \"proto2\";\n\npackage grpc.gateway.runtime.internal.examplepb;\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\";\n\nmessage Proto2Message {\n  optional float float_value = 42;\n  optional double double_value = 43;\n  optional int64 int64_value = 3;\n  optional int32 int32_value = 4;\n  optional uint64 uint64_value = 5;\n  optional uint32 uint32_value = 6;\n  optional bool bool_value = 7;\n  optional string string_value = 8;\n  optional bytes bytes_value = 9;\n  repeated string repeated_value = 10;\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/proto2.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"runtime/internal/examplepb/proto2.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/proto3.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.35.1\n// \tprotoc        (unknown)\n// source: runtime/internal/examplepb/proto3.proto\n\npackage examplepb\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\tdurationpb \"google.golang.org/protobuf/types/known/durationpb\"\n\tfieldmaskpb \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\tstructpb \"google.golang.org/protobuf/types/known/structpb\"\n\ttimestamppb \"google.golang.org/protobuf/types/known/timestamppb\"\n\twrapperspb \"google.golang.org/protobuf/types/known/wrapperspb\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype EnumValue int32\n\nconst (\n\tEnumValue_X EnumValue = 0\n\tEnumValue_Y EnumValue = 1\n\tEnumValue_Z EnumValue = 2\n)\n\n// Enum value maps for EnumValue.\nvar (\n\tEnumValue_name = map[int32]string{\n\t\t0: \"X\",\n\t\t1: \"Y\",\n\t\t2: \"Z\",\n\t}\n\tEnumValue_value = map[string]int32{\n\t\t\"X\": 0,\n\t\t\"Y\": 1,\n\t\t\"Z\": 2,\n\t}\n)\n\nfunc (x EnumValue) Enum() *EnumValue {\n\tp := new(EnumValue)\n\t*p = x\n\treturn p\n}\n\nfunc (x EnumValue) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (EnumValue) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_runtime_internal_examplepb_proto3_proto_enumTypes[0].Descriptor()\n}\n\nfunc (EnumValue) Type() protoreflect.EnumType {\n\treturn &file_runtime_internal_examplepb_proto3_proto_enumTypes[0]\n}\n\nfunc (x EnumValue) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Use EnumValue.Descriptor instead.\nfunc (EnumValue) EnumDescriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_proto3_proto_rawDescGZIP(), []int{0}\n}\n\ntype Proto3Message struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\t// Next number: 51\n\tNested          *Proto3Message            `protobuf:\"bytes,41,opt,name=nested,proto3\" json:\"nested,omitempty\"`\n\tFloatValue      float32                   `protobuf:\"fixed32,42,opt,name=float_value,json=floatValue,proto3\" json:\"float_value,omitempty\"`\n\tDoubleValue     float64                   `protobuf:\"fixed64,43,opt,name=double_value,json=doubleValue,proto3\" json:\"double_value,omitempty\"`\n\tInt64Value      int64                     `protobuf:\"varint,3,opt,name=int64_value,json=int64Value,proto3\" json:\"int64_value,omitempty\"`\n\tInt32Value      int32                     `protobuf:\"varint,4,opt,name=int32_value,json=int32Value,proto3\" json:\"int32_value,omitempty\"`\n\tUint64Value     uint64                    `protobuf:\"varint,5,opt,name=uint64_value,json=uint64Value,proto3\" json:\"uint64_value,omitempty\"`\n\tUint32Value     uint32                    `protobuf:\"varint,6,opt,name=uint32_value,json=uint32Value,proto3\" json:\"uint32_value,omitempty\"`\n\tBoolValue       bool                      `protobuf:\"varint,7,opt,name=bool_value,json=boolValue,proto3\" json:\"bool_value,omitempty\"`\n\tStringValue     string                    `protobuf:\"bytes,8,opt,name=string_value,json=stringValue,proto3\" json:\"string_value,omitempty\"`\n\tBytesValue      []byte                    `protobuf:\"bytes,9,opt,name=bytes_value,json=bytesValue,proto3\" json:\"bytes_value,omitempty\"`\n\tRepeatedValue   []string                  `protobuf:\"bytes,10,rep,name=repeated_value,json=repeatedValue,proto3\" json:\"repeated_value,omitempty\"`\n\tOptionalValue   *string                   `protobuf:\"bytes,49,opt,name=optional_value,json=optionalValue,proto3,oneof\" json:\"optional_value,omitempty\"`\n\tRepeatedMessage []*wrapperspb.UInt64Value `protobuf:\"bytes,44,rep,name=repeated_message,json=repeatedMessage,proto3\" json:\"repeated_message,omitempty\"`\n\tEnumValue       EnumValue                 `protobuf:\"varint,11,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue\" json:\"enum_value,omitempty\"`\n\tRepeatedEnum    []EnumValue               `protobuf:\"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue\" json:\"repeated_enum,omitempty\"`\n\tTimestampValue  *timestamppb.Timestamp    `protobuf:\"bytes,13,opt,name=timestamp_value,json=timestampValue,proto3\" json:\"timestamp_value,omitempty\"`\n\tDurationValue   *durationpb.Duration      `protobuf:\"bytes,14,opt,name=duration_value,json=durationValue,proto3\" json:\"duration_value,omitempty\"`\n\tFieldmaskValue  *fieldmaskpb.FieldMask    `protobuf:\"bytes,15,opt,name=fieldmask_value,json=fieldmaskValue,proto3\" json:\"fieldmask_value,omitempty\"`\n\t// Types that are assignable to OneofValue:\n\t//\n\t//\t*Proto3Message_OneofBoolValue\n\t//\t*Proto3Message_OneofStringValue\n\tOneofValue isProto3Message_OneofValue `protobuf_oneof:\"oneof_value\"`\n\t// Types that are assignable to NestedOneofValue:\n\t//\n\t//\t*Proto3Message_NestedOneofInt32Value\n\t//\t*Proto3Message_NestedOneofValueOne\n\tNestedOneofValue   isProto3Message_NestedOneofValue   `protobuf_oneof:\"nested_oneof_value\"`\n\tWrapperDoubleValue *wrapperspb.DoubleValue            `protobuf:\"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue,proto3\" json:\"wrapper_double_value,omitempty\"`\n\tWrapperFloatValue  *wrapperspb.FloatValue             `protobuf:\"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue,proto3\" json:\"wrapper_float_value,omitempty\"`\n\tWrapperInt64Value  *wrapperspb.Int64Value             `protobuf:\"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value,proto3\" json:\"wrapper_int64_value,omitempty\"`\n\tWrapperInt32Value  *wrapperspb.Int32Value             `protobuf:\"bytes,20,opt,name=wrapper_int32_value,json=wrapperInt32Value,proto3\" json:\"wrapper_int32_value,omitempty\"`\n\tWrapperUInt64Value *wrapperspb.UInt64Value            `protobuf:\"bytes,21,opt,name=wrapper_u_int64_value,json=wrapperUInt64Value,proto3\" json:\"wrapper_u_int64_value,omitempty\"`\n\tWrapperUInt32Value *wrapperspb.UInt32Value            `protobuf:\"bytes,22,opt,name=wrapper_u_int32_value,json=wrapperUInt32Value,proto3\" json:\"wrapper_u_int32_value,omitempty\"`\n\tWrapperBoolValue   *wrapperspb.BoolValue              `protobuf:\"bytes,23,opt,name=wrapper_bool_value,json=wrapperBoolValue,proto3\" json:\"wrapper_bool_value,omitempty\"`\n\tWrapperStringValue *wrapperspb.StringValue            `protobuf:\"bytes,24,opt,name=wrapper_string_value,json=wrapperStringValue,proto3\" json:\"wrapper_string_value,omitempty\"`\n\tWrapperBytesValue  *wrapperspb.BytesValue             `protobuf:\"bytes,25,opt,name=wrapper_bytes_value,json=wrapperBytesValue,proto3\" json:\"wrapper_bytes_value,omitempty\"`\n\tMapValue           map[string]string                  `protobuf:\"bytes,26,rep,name=map_value,json=mapValue,proto3\" json:\"map_value,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMapValue2          map[string]int32                   `protobuf:\"bytes,27,rep,name=map_value2,json=mapValue2,proto3\" json:\"map_value2,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"varint,2,opt,name=value,proto3\"`\n\tMapValue3          map[int32]string                   `protobuf:\"bytes,28,rep,name=map_value3,json=mapValue3,proto3\" json:\"map_value3,omitempty\" protobuf_key:\"varint,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMapValue4          map[string]int64                   `protobuf:\"bytes,29,rep,name=map_value4,json=mapValue4,proto3\" json:\"map_value4,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"varint,2,opt,name=value,proto3\"`\n\tMapValue5          map[int64]string                   `protobuf:\"bytes,30,rep,name=map_value5,json=mapValue5,proto3\" json:\"map_value5,omitempty\" protobuf_key:\"varint,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMapValue6          map[string]uint32                  `protobuf:\"bytes,31,rep,name=map_value6,json=mapValue6,proto3\" json:\"map_value6,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"varint,2,opt,name=value,proto3\"`\n\tMapValue7          map[uint32]string                  `protobuf:\"bytes,32,rep,name=map_value7,json=mapValue7,proto3\" json:\"map_value7,omitempty\" protobuf_key:\"varint,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMapValue8          map[string]uint64                  `protobuf:\"bytes,33,rep,name=map_value8,json=mapValue8,proto3\" json:\"map_value8,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"varint,2,opt,name=value,proto3\"`\n\tMapValue9          map[uint64]string                  `protobuf:\"bytes,34,rep,name=map_value9,json=mapValue9,proto3\" json:\"map_value9,omitempty\" protobuf_key:\"varint,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMapValue10         map[string]float32                 `protobuf:\"bytes,35,rep,name=map_value10,json=mapValue10,proto3\" json:\"map_value10,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"fixed32,2,opt,name=value,proto3\"`\n\tMapValue12         map[string]float64                 `protobuf:\"bytes,37,rep,name=map_value12,json=mapValue12,proto3\" json:\"map_value12,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"fixed64,2,opt,name=value,proto3\"`\n\tMapValue14         map[string]bool                    `protobuf:\"bytes,39,rep,name=map_value14,json=mapValue14,proto3\" json:\"map_value14,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"varint,2,opt,name=value,proto3\"`\n\tMapValue15         map[bool]string                    `protobuf:\"bytes,40,rep,name=map_value15,json=mapValue15,proto3\" json:\"map_value15,omitempty\" protobuf_key:\"varint,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tMapValue16         map[string]*wrapperspb.UInt64Value `protobuf:\"bytes,45,rep,name=map_value16,json=mapValue16,proto3\" json:\"map_value16,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tStructValueValue   *structpb.Value                    `protobuf:\"bytes,47,opt,name=struct_value_value,json=structValueValue,proto3\" json:\"struct_value_value,omitempty\"`\n\tStructValue        *structpb.Struct                   `protobuf:\"bytes,48,opt,name=struct_value,json=structValue,proto3\" json:\"struct_value,omitempty\"`\n}\n\nfunc (x *Proto3Message) Reset() {\n\t*x = Proto3Message{}\n\tmi := &file_runtime_internal_examplepb_proto3_proto_msgTypes[0]\n\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\tms.StoreMessageInfo(mi)\n}\n\nfunc (x *Proto3Message) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*Proto3Message) ProtoMessage() {}\n\nfunc (x *Proto3Message) ProtoReflect() protoreflect.Message {\n\tmi := &file_runtime_internal_examplepb_proto3_proto_msgTypes[0]\n\tif x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use Proto3Message.ProtoReflect.Descriptor instead.\nfunc (*Proto3Message) Descriptor() ([]byte, []int) {\n\treturn file_runtime_internal_examplepb_proto3_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *Proto3Message) GetNested() *Proto3Message {\n\tif x != nil {\n\t\treturn x.Nested\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetFloatValue() float32 {\n\tif x != nil {\n\t\treturn x.FloatValue\n\t}\n\treturn 0\n}\n\nfunc (x *Proto3Message) GetDoubleValue() float64 {\n\tif x != nil {\n\t\treturn x.DoubleValue\n\t}\n\treturn 0\n}\n\nfunc (x *Proto3Message) GetInt64Value() int64 {\n\tif x != nil {\n\t\treturn x.Int64Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto3Message) GetInt32Value() int32 {\n\tif x != nil {\n\t\treturn x.Int32Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto3Message) GetUint64Value() uint64 {\n\tif x != nil {\n\t\treturn x.Uint64Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto3Message) GetUint32Value() uint32 {\n\tif x != nil {\n\t\treturn x.Uint32Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto3Message) GetBoolValue() bool {\n\tif x != nil {\n\t\treturn x.BoolValue\n\t}\n\treturn false\n}\n\nfunc (x *Proto3Message) GetStringValue() string {\n\tif x != nil {\n\t\treturn x.StringValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *Proto3Message) GetBytesValue() []byte {\n\tif x != nil {\n\t\treturn x.BytesValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetRepeatedValue() []string {\n\tif x != nil {\n\t\treturn x.RepeatedValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetOptionalValue() string {\n\tif x != nil && x.OptionalValue != nil {\n\t\treturn *x.OptionalValue\n\t}\n\treturn \"\"\n}\n\nfunc (x *Proto3Message) GetRepeatedMessage() []*wrapperspb.UInt64Value {\n\tif x != nil {\n\t\treturn x.RepeatedMessage\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetEnumValue() EnumValue {\n\tif x != nil {\n\t\treturn x.EnumValue\n\t}\n\treturn EnumValue_X\n}\n\nfunc (x *Proto3Message) GetRepeatedEnum() []EnumValue {\n\tif x != nil {\n\t\treturn x.RepeatedEnum\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetTimestampValue() *timestamppb.Timestamp {\n\tif x != nil {\n\t\treturn x.TimestampValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetDurationValue() *durationpb.Duration {\n\tif x != nil {\n\t\treturn x.DurationValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetFieldmaskValue() *fieldmaskpb.FieldMask {\n\tif x != nil {\n\t\treturn x.FieldmaskValue\n\t}\n\treturn nil\n}\n\nfunc (m *Proto3Message) GetOneofValue() isProto3Message_OneofValue {\n\tif m != nil {\n\t\treturn m.OneofValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetOneofBoolValue() bool {\n\tif x, ok := x.GetOneofValue().(*Proto3Message_OneofBoolValue); ok {\n\t\treturn x.OneofBoolValue\n\t}\n\treturn false\n}\n\nfunc (x *Proto3Message) GetOneofStringValue() string {\n\tif x, ok := x.GetOneofValue().(*Proto3Message_OneofStringValue); ok {\n\t\treturn x.OneofStringValue\n\t}\n\treturn \"\"\n}\n\nfunc (m *Proto3Message) GetNestedOneofValue() isProto3Message_NestedOneofValue {\n\tif m != nil {\n\t\treturn m.NestedOneofValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetNestedOneofInt32Value() int32 {\n\tif x, ok := x.GetNestedOneofValue().(*Proto3Message_NestedOneofInt32Value); ok {\n\t\treturn x.NestedOneofInt32Value\n\t}\n\treturn 0\n}\n\nfunc (x *Proto3Message) GetNestedOneofValueOne() *Proto3Message {\n\tif x, ok := x.GetNestedOneofValue().(*Proto3Message_NestedOneofValueOne); ok {\n\t\treturn x.NestedOneofValueOne\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperDoubleValue() *wrapperspb.DoubleValue {\n\tif x != nil {\n\t\treturn x.WrapperDoubleValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperFloatValue() *wrapperspb.FloatValue {\n\tif x != nil {\n\t\treturn x.WrapperFloatValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperInt64Value() *wrapperspb.Int64Value {\n\tif x != nil {\n\t\treturn x.WrapperInt64Value\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperInt32Value() *wrapperspb.Int32Value {\n\tif x != nil {\n\t\treturn x.WrapperInt32Value\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperUInt64Value() *wrapperspb.UInt64Value {\n\tif x != nil {\n\t\treturn x.WrapperUInt64Value\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperUInt32Value() *wrapperspb.UInt32Value {\n\tif x != nil {\n\t\treturn x.WrapperUInt32Value\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperBoolValue() *wrapperspb.BoolValue {\n\tif x != nil {\n\t\treturn x.WrapperBoolValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperStringValue() *wrapperspb.StringValue {\n\tif x != nil {\n\t\treturn x.WrapperStringValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetWrapperBytesValue() *wrapperspb.BytesValue {\n\tif x != nil {\n\t\treturn x.WrapperBytesValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue() map[string]string {\n\tif x != nil {\n\t\treturn x.MapValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue2() map[string]int32 {\n\tif x != nil {\n\t\treturn x.MapValue2\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue3() map[int32]string {\n\tif x != nil {\n\t\treturn x.MapValue3\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue4() map[string]int64 {\n\tif x != nil {\n\t\treturn x.MapValue4\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue5() map[int64]string {\n\tif x != nil {\n\t\treturn x.MapValue5\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue6() map[string]uint32 {\n\tif x != nil {\n\t\treturn x.MapValue6\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue7() map[uint32]string {\n\tif x != nil {\n\t\treturn x.MapValue7\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue8() map[string]uint64 {\n\tif x != nil {\n\t\treturn x.MapValue8\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue9() map[uint64]string {\n\tif x != nil {\n\t\treturn x.MapValue9\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue10() map[string]float32 {\n\tif x != nil {\n\t\treturn x.MapValue10\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue12() map[string]float64 {\n\tif x != nil {\n\t\treturn x.MapValue12\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue14() map[string]bool {\n\tif x != nil {\n\t\treturn x.MapValue14\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue15() map[bool]string {\n\tif x != nil {\n\t\treturn x.MapValue15\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetMapValue16() map[string]*wrapperspb.UInt64Value {\n\tif x != nil {\n\t\treturn x.MapValue16\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetStructValueValue() *structpb.Value {\n\tif x != nil {\n\t\treturn x.StructValueValue\n\t}\n\treturn nil\n}\n\nfunc (x *Proto3Message) GetStructValue() *structpb.Struct {\n\tif x != nil {\n\t\treturn x.StructValue\n\t}\n\treturn nil\n}\n\ntype isProto3Message_OneofValue interface {\n\tisProto3Message_OneofValue()\n}\n\ntype Proto3Message_OneofBoolValue struct {\n\tOneofBoolValue bool `protobuf:\"varint,1,opt,name=oneof_bool_value,json=oneofBoolValue,proto3,oneof\"`\n}\n\ntype Proto3Message_OneofStringValue struct {\n\tOneofStringValue string `protobuf:\"bytes,2,opt,name=oneof_string_value,json=oneofStringValue,proto3,oneof\"`\n}\n\nfunc (*Proto3Message_OneofBoolValue) isProto3Message_OneofValue() {}\n\nfunc (*Proto3Message_OneofStringValue) isProto3Message_OneofValue() {}\n\ntype isProto3Message_NestedOneofValue interface {\n\tisProto3Message_NestedOneofValue()\n}\n\ntype Proto3Message_NestedOneofInt32Value struct {\n\tNestedOneofInt32Value int32 `protobuf:\"varint,50,opt,name=nested_oneof_int32_value,json=nestedOneofInt32Value,proto3,oneof\"`\n}\n\ntype Proto3Message_NestedOneofValueOne struct {\n\tNestedOneofValueOne *Proto3Message `protobuf:\"bytes,46,opt,name=nested_oneof_value_one,json=nestedOneofValueOne,proto3,oneof\"`\n}\n\nfunc (*Proto3Message_NestedOneofInt32Value) isProto3Message_NestedOneofValue() {}\n\nfunc (*Proto3Message_NestedOneofValueOne) isProto3Message_NestedOneofValue() {}\n\nvar File_runtime_internal_examplepb_proto3_proto protoreflect.FileDescriptor\n\nvar file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{\n\t0x0a, 0x27, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,\n\t0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,\n\t0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x22, 0xc8, 0x22, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65,\n\t0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18,\n\t0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x6e,\n\t0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61,\n\t0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f,\n\t0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74,\n\t0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,\n\t0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e,\n\t0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,\n\t0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75,\n\t0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,\n\t0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21,\n\t0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06,\n\t0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65,\n\t0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x6f,\n\t0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x31, 0x20,\n\t0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61,\n\t0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x2c, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,\n\t0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,\n\t0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x12, 0x51, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b,\n\t0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65,\n\t0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65,\n\t0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45,\n\t0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,\n\t0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d,\n\t0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c,\n\t0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x43, 0x0a, 0x0f,\n\t0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,\n\t0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,\n\t0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,\n\t0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,\n\t0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d,\n\t0x61, 0x73, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x6e, 0x65, 0x6f,\n\t0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74,\n\t0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,\n\t0x48, 0x00, 0x52, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x18, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6f,\n\t0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x32, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x15, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64,\n\t0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,\n\t0x6d, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72,\n\t0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65,\n\t0x64, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x6e, 0x65, 0x12, 0x4e,\n\t0x0a, 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,\n\t0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,\n\t0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70,\n\t0x70, 0x65, 0x72, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b,\n\t0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,\n\t0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c,\n\t0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,\n\t0x72, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77,\n\t0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,\n\t0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e,\n\t0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70,\n\t0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x33, 0x32,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72,\n\t0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x15,\n\t0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,\n\t0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x36,\n\t0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,\n\t0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,\n\t0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,\n\t0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74,\n\t0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70,\n\t0x65, 0x72, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,\n\t0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,\n\t0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72,\n\t0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32,\n\t0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,\n\t0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77,\n\t0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74,\n\t0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,\n\t0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,\n\t0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61,\n\t0x70, 0x70, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x61,\n\t0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74,\n\t0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x18,\n\t0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74,\n\t0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74,\n\t0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e,\n\t0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61,\n\t0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61,\n\t0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x33, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72,\n\t0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69,\n\t0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d,\n\t0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73,\n\t0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x45, 0x6e, 0x74,\n\t0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x12, 0x64, 0x0a,\n\t0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74,\n\t0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x34, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x35, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67,\n\t0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69,\n\t0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70,\n\t0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,\n\t0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09,\n\t0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70,\n\t0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e,\n\t0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e,\n\t0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78,\n\t0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65,\n\t0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45,\n\t0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x12,\n\t0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x18, 0x20, 0x20,\n\t0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77,\n\t0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,\n\t0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72,\n\t0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x37, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x38, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63,\n\t0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,\n\t0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,\n\t0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,\n\t0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, 0x0a, 0x0a, 0x6d,\n\t0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72,\n\t0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x39, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30,\n\t0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61,\n\t0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e,\n\t0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62,\n\t0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d,\n\t0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a,\n\t0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61,\n\t0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32,\n\t0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72,\n\t0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,\n\t0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n\t0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x31, 0x32, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x31, 0x34, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,\n\t0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e,\n\t0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,\n\t0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,\n\t0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, 0x67, 0x0a, 0x0b,\n\t0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,\n\t0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,\n\t0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74,\n\t0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x31, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x31, 0x35, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x31, 0x36, 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70,\n\t0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d,\n\t0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70,\n\t0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61,\n\t0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x45, 0x6e, 0x74,\n\t0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x12, 0x44,\n\t0x0a, 0x12, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c,\n\t0x75, 0x65, 0x52, 0x10, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x56,\n\t0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f,\n\t0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,\n\t0x75, 0x63, 0x74, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,\n\t0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,\n\t0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a,\n\t0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,\n\t0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,\n\t0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,\n\t0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d,\n\t0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,\n\t0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,\n\t0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61,\n\t0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61,\n\t0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,\n\t0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,\n\t0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75,\n\t0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,\n\t0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37,\n\t0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,\n\t0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,\n\t0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,\n\t0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e,\n\t0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,\n\t0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,\n\t0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72,\n\t0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03,\n\t0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a,\n\t0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79,\n\t0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,\n\t0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,\n\t0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f,\n\t0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,\n\t0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,\n\t0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01,\n\t0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d,\n\t0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,\n\t0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,\n\t0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,\n\t0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61,\n\t0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,\n\t0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,\n\t0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0f, 0x4d, 0x61, 0x70,\n\t0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,\n\t0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32,\n\t0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,\n\t0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,\n\t0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,\n\t0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f,\n\t0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f,\n\t0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f,\n\t0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x20,\n\t0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x05, 0x0a, 0x01, 0x58,\n\t0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x5a, 0x10, 0x02,\n\t0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67,\n\t0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72,\n\t0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75,\n\t0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65,\n\t0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,\n}\n\nvar (\n\tfile_runtime_internal_examplepb_proto3_proto_rawDescOnce sync.Once\n\tfile_runtime_internal_examplepb_proto3_proto_rawDescData = file_runtime_internal_examplepb_proto3_proto_rawDesc\n)\n\nfunc file_runtime_internal_examplepb_proto3_proto_rawDescGZIP() []byte {\n\tfile_runtime_internal_examplepb_proto3_proto_rawDescOnce.Do(func() {\n\t\tfile_runtime_internal_examplepb_proto3_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_proto3_proto_rawDescData)\n\t})\n\treturn file_runtime_internal_examplepb_proto3_proto_rawDescData\n}\n\nvar file_runtime_internal_examplepb_proto3_proto_enumTypes = make([]protoimpl.EnumInfo, 1)\nvar file_runtime_internal_examplepb_proto3_proto_msgTypes = make([]protoimpl.MessageInfo, 15)\nvar file_runtime_internal_examplepb_proto3_proto_goTypes = []any{\n\t(EnumValue)(0),                 // 0: grpc.gateway.runtime.internal.examplepb.EnumValue\n\t(*Proto3Message)(nil),          // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message\n\tnil,                            // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry\n\tnil,                            // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry\n\tnil,                            // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry\n\tnil,                            // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry\n\tnil,                            // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry\n\tnil,                            // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry\n\tnil,                            // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry\n\tnil,                            // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry\n\tnil,                            // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry\n\tnil,                            // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry\n\tnil,                            // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry\n\tnil,                            // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry\n\tnil,                            // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry\n\tnil,                            // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry\n\t(*wrapperspb.UInt64Value)(nil), // 16: google.protobuf.UInt64Value\n\t(*timestamppb.Timestamp)(nil),  // 17: google.protobuf.Timestamp\n\t(*durationpb.Duration)(nil),    // 18: google.protobuf.Duration\n\t(*fieldmaskpb.FieldMask)(nil),  // 19: google.protobuf.FieldMask\n\t(*wrapperspb.DoubleValue)(nil), // 20: google.protobuf.DoubleValue\n\t(*wrapperspb.FloatValue)(nil),  // 21: google.protobuf.FloatValue\n\t(*wrapperspb.Int64Value)(nil),  // 22: google.protobuf.Int64Value\n\t(*wrapperspb.Int32Value)(nil),  // 23: google.protobuf.Int32Value\n\t(*wrapperspb.UInt32Value)(nil), // 24: google.protobuf.UInt32Value\n\t(*wrapperspb.BoolValue)(nil),   // 25: google.protobuf.BoolValue\n\t(*wrapperspb.StringValue)(nil), // 26: google.protobuf.StringValue\n\t(*wrapperspb.BytesValue)(nil),  // 27: google.protobuf.BytesValue\n\t(*structpb.Value)(nil),         // 28: google.protobuf.Value\n\t(*structpb.Struct)(nil),        // 29: google.protobuf.Struct\n}\nvar file_runtime_internal_examplepb_proto3_proto_depIdxs = []int32{\n\t1,  // 0: grpc.gateway.runtime.internal.examplepb.Proto3Message.nested:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message\n\t16, // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message.repeated_message:type_name -> google.protobuf.UInt64Value\n\t0,  // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue\n\t0,  // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.repeated_enum:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue\n\t17, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.timestamp_value:type_name -> google.protobuf.Timestamp\n\t18, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.duration_value:type_name -> google.protobuf.Duration\n\t19, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.fieldmask_value:type_name -> google.protobuf.FieldMask\n\t1,  // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.nested_oneof_value_one:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message\n\t20, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_double_value:type_name -> google.protobuf.DoubleValue\n\t21, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_float_value:type_name -> google.protobuf.FloatValue\n\t22, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int64_value:type_name -> google.protobuf.Int64Value\n\t23, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int32_value:type_name -> google.protobuf.Int32Value\n\t16, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int64_value:type_name -> google.protobuf.UInt64Value\n\t24, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int32_value:type_name -> google.protobuf.UInt32Value\n\t25, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bool_value:type_name -> google.protobuf.BoolValue\n\t26, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_string_value:type_name -> google.protobuf.StringValue\n\t27, // 16: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bytes_value:type_name -> google.protobuf.BytesValue\n\t2,  // 17: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry\n\t3,  // 18: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value2:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry\n\t4,  // 19: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value3:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry\n\t5,  // 20: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value4:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry\n\t6,  // 21: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value5:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry\n\t7,  // 22: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value6:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry\n\t8,  // 23: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value7:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry\n\t9,  // 24: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value8:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry\n\t10, // 25: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value9:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry\n\t11, // 26: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value10:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry\n\t12, // 27: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value12:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry\n\t13, // 28: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value14:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry\n\t14, // 29: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value15:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry\n\t15, // 30: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value16:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry\n\t28, // 31: grpc.gateway.runtime.internal.examplepb.Proto3Message.struct_value_value:type_name -> google.protobuf.Value\n\t29, // 32: grpc.gateway.runtime.internal.examplepb.Proto3Message.struct_value:type_name -> google.protobuf.Struct\n\t16, // 33: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry.value:type_name -> google.protobuf.UInt64Value\n\t34, // [34:34] is the sub-list for method output_type\n\t34, // [34:34] is the sub-list for method input_type\n\t34, // [34:34] is the sub-list for extension type_name\n\t34, // [34:34] is the sub-list for extension extendee\n\t0,  // [0:34] is the sub-list for field type_name\n}\n\nfunc init() { file_runtime_internal_examplepb_proto3_proto_init() }\nfunc file_runtime_internal_examplepb_proto3_proto_init() {\n\tif File_runtime_internal_examplepb_proto3_proto != nil {\n\t\treturn\n\t}\n\tfile_runtime_internal_examplepb_proto3_proto_msgTypes[0].OneofWrappers = []any{\n\t\t(*Proto3Message_OneofBoolValue)(nil),\n\t\t(*Proto3Message_OneofStringValue)(nil),\n\t\t(*Proto3Message_NestedOneofInt32Value)(nil),\n\t\t(*Proto3Message_NestedOneofValueOne)(nil),\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_runtime_internal_examplepb_proto3_proto_rawDesc,\n\t\t\tNumEnums:      1,\n\t\t\tNumMessages:   15,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_runtime_internal_examplepb_proto3_proto_goTypes,\n\t\tDependencyIndexes: file_runtime_internal_examplepb_proto3_proto_depIdxs,\n\t\tEnumInfos:         file_runtime_internal_examplepb_proto3_proto_enumTypes,\n\t\tMessageInfos:      file_runtime_internal_examplepb_proto3_proto_msgTypes,\n\t}.Build()\n\tFile_runtime_internal_examplepb_proto3_proto = out.File\n\tfile_runtime_internal_examplepb_proto3_proto_rawDesc = nil\n\tfile_runtime_internal_examplepb_proto3_proto_goTypes = nil\n\tfile_runtime_internal_examplepb_proto3_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/proto3.proto",
    "content": "syntax = \"proto3\";\n\npackage grpc.gateway.runtime.internal.examplepb;\n\nimport \"google/protobuf/duration.proto\";\nimport \"google/protobuf/field_mask.proto\";\nimport \"google/protobuf/struct.proto\";\nimport \"google/protobuf/timestamp.proto\";\nimport \"google/protobuf/wrappers.proto\";\n\noption go_package = \"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\";\n\nmessage Proto3Message {\n  // Next number: 51\n  Proto3Message nested = 41;\n  float float_value = 42;\n  double double_value = 43;\n  int64 int64_value = 3;\n  int32 int32_value = 4;\n  uint64 uint64_value = 5;\n  uint32 uint32_value = 6;\n  bool bool_value = 7;\n  string string_value = 8;\n  bytes bytes_value = 9;\n  repeated string repeated_value = 10;\n  optional string optional_value = 49;\n  repeated google.protobuf.UInt64Value repeated_message = 44;\n  EnumValue enum_value = 11;\n  repeated EnumValue repeated_enum = 12;\n  google.protobuf.Timestamp timestamp_value = 13;\n  google.protobuf.Duration duration_value = 14;\n  google.protobuf.FieldMask fieldmask_value = 15;\n  oneof oneof_value {\n    bool oneof_bool_value = 1;\n    string oneof_string_value = 2;\n  }\n  oneof nested_oneof_value {\n    int32 nested_oneof_int32_value = 50;\n    Proto3Message nested_oneof_value_one = 46;\n  }\n  google.protobuf.DoubleValue wrapper_double_value = 17;\n  google.protobuf.FloatValue wrapper_float_value = 18;\n  google.protobuf.Int64Value wrapper_int64_value = 19;\n  google.protobuf.Int32Value wrapper_int32_value = 20;\n  google.protobuf.UInt64Value wrapper_u_int64_value = 21;\n  google.protobuf.UInt32Value wrapper_u_int32_value = 22;\n  google.protobuf.BoolValue wrapper_bool_value = 23;\n  google.protobuf.StringValue wrapper_string_value = 24;\n  google.protobuf.BytesValue wrapper_bytes_value = 25;\n  map<string, string> map_value = 26;\n  map<string, int32> map_value2 = 27;\n  map<int32, string> map_value3 = 28;\n  map<string, int64> map_value4 = 29;\n  map<int64, string> map_value5 = 30;\n  map<string, uint32> map_value6 = 31;\n  map<uint32, string> map_value7 = 32;\n  map<string, uint64> map_value8 = 33;\n  map<uint64, string> map_value9 = 34;\n  map<string, float> map_value10 = 35;\n  map<string, double> map_value12 = 37;\n  map<string, bool> map_value14 = 39;\n  map<bool, string> map_value15 = 40;\n  map<string, google.protobuf.UInt64Value> map_value16 = 45;\n  google.protobuf.Value struct_value_value = 47;\n  google.protobuf.Struct struct_value = 48;\n}\n\nenum EnumValue {\n  X = 0;\n  Y = 1;\n  Z = 2;\n}\n"
  },
  {
    "path": "runtime/internal/examplepb/proto3.swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"runtime/internal/examplepb/proto3.proto\",\n    \"version\": \"version not set\"\n  },\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"paths\": {},\n  \"definitions\": {\n    \"protobufAny\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"@type\": {\n          \"type\": \"string\",\n          \"description\": \"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\\"/\\\" character. The last segment of the URL's path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\\".\\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n  value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n  URL, or have them precompiled into a binary to avoid any\\n  lookup. Therefore, binary compatibility needs to be preserved\\n  on changes to types. (Use versioned type names to manage\\n  breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com. As of May 2023, there are no widely used type server\\nimplementations and no plans to implement one.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics.\"\n        }\n      },\n      \"additionalProperties\": {},\n      \"description\": \"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n    Foo foo = ...;\\n    Any any;\\n    any.PackFrom(foo);\\n    ...\\n    if (any.UnpackTo(\\u0026foo)) {\\n      ...\\n    }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n    Foo foo = ...;\\n    Any any = Any.pack(foo);\\n    ...\\n    if (any.is(Foo.class)) {\\n      foo = any.unpack(Foo.class);\\n    }\\n    // or ...\\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\\n      foo = any.unpack(Foo.getDefaultInstance());\\n    }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n    foo = Foo(...)\\n    any = Any()\\n    any.Pack(foo)\\n    ...\\n    if any.Is(Foo.DESCRIPTOR):\\n      any.Unpack(foo)\\n      ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n     foo := \\u0026pb.Foo{...}\\n     any, err := anypb.New(foo)\\n     if err != nil {\\n       ...\\n     }\\n     ...\\n     foo := \\u0026pb.Foo{}\\n     if err := any.UnmarshalTo(foo); err != nil {\\n       ...\\n     }\\n\\nThe pack methods provided by protobuf library will by default use\\n'type.googleapis.com/full.type.name' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last '/'\\nin the type URL, for example \\\"foo.bar.com/x/y.z\\\" will yield type\\nname \\\"y.z\\\".\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n    package google.profile;\\n    message Person {\\n      string first_name = 1;\\n      string last_name = 2;\\n    }\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.profile.Person\\\",\\n      \\\"firstName\\\": \\u003cstring\\u003e,\\n      \\\"lastName\\\": \\u003cstring\\u003e\\n    }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n    {\\n      \\\"@type\\\": \\\"type.googleapis.com/google.protobuf.Duration\\\",\\n      \\\"value\\\": \\\"1.212s\\\"\\n    }\"\n    },\n    \"rpcStatus\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"message\": {\n          \"type\": \"string\"\n        },\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"$ref\": \"#/definitions/protobufAny\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "runtime/marshal_httpbodyproto.go",
    "content": "package runtime\n\nimport (\n\t\"google.golang.org/genproto/googleapis/api/httpbody\"\n)\n\n// HTTPBodyMarshaler is a Marshaler which supports marshaling of a\n// google.api.HttpBody message as the full response body if it is\n// the actual message used as the response. If not, then this will\n// simply fallback to the Marshaler specified as its default Marshaler.\ntype HTTPBodyMarshaler struct {\n\tMarshaler\n}\n\n// ContentType returns its specified content type in case v is a\n// google.api.HttpBody message, otherwise it will fall back to the default Marshalers\n// content type.\nfunc (h *HTTPBodyMarshaler) ContentType(v interface{}) string {\n\tif httpBody, ok := v.(*httpbody.HttpBody); ok {\n\t\treturn httpBody.GetContentType()\n\t}\n\treturn h.Marshaler.ContentType(v)\n}\n\n// Marshal marshals \"v\" by returning the body bytes if v is a\n// google.api.HttpBody message, otherwise it falls back to the default Marshaler.\nfunc (h *HTTPBodyMarshaler) Marshal(v interface{}) ([]byte, error) {\n\tif httpBody, ok := v.(*httpbody.HttpBody); ok {\n\t\treturn httpBody.GetData(), nil\n\t}\n\treturn h.Marshaler.Marshal(v)\n}\n"
  },
  {
    "path": "runtime/marshal_httpbodyproto_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"google.golang.org/genproto/googleapis/api/httpbody\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n)\n\nfunc TestHTTPBodyContentType(t *testing.T) {\n\tm := runtime.HTTPBodyMarshaler{\n\t\t&runtime.JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tUseProtoNames: true,\n\t\t\t},\n\t\t},\n\t}\n\texpected := \"CustomContentType\"\n\tmessage := &httpbody.HttpBody{\n\t\tContentType: expected,\n\t}\n\tres := m.ContentType(nil)\n\tif res != \"application/json\" {\n\t\tt.Errorf(\"content type not equal (%q, %q)\", res, expected)\n\t}\n\tres = m.ContentType(message)\n\tif res != expected {\n\t\tt.Errorf(\"content type not equal (%q, %q)\", res, expected)\n\t}\n}\n\nfunc TestHTTPBodyMarshal(t *testing.T) {\n\tm := runtime.HTTPBodyMarshaler{\n\t\t&runtime.JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tUseProtoNames: true,\n\t\t\t},\n\t\t},\n\t}\n\texpected := []byte(\"Some test\")\n\tmessage := &httpbody.HttpBody{\n\t\tData: expected,\n\t}\n\tres, err := m.Marshal(message)\n\tif err != nil {\n\t\tt.Errorf(\"m.Marshal(%#v) failed with %v; want success\", message, err)\n\t}\n\tif !bytes.Equal(res, expected) {\n\t\tt.Errorf(\"Marshalled data not equal (%q, %q)\", res, expected)\n\n\t}\n}\n"
  },
  {
    "path": "runtime/marshal_json.go",
    "content": "package runtime\n\nimport (\n\t\"encoding/json\"\n\t\"io\"\n)\n\n// JSONBuiltin is a Marshaler which marshals/unmarshals into/from JSON\n// with the standard \"encoding/json\" package of Golang.\n// Although it is generally faster for simple proto messages than JSONPb,\n// it does not support advanced features of protobuf, e.g. map, oneof, ....\n//\n// The NewEncoder and NewDecoder types return *json.Encoder and\n// *json.Decoder respectively.\ntype JSONBuiltin struct{}\n\n// ContentType always Returns \"application/json\".\nfunc (*JSONBuiltin) ContentType(_ interface{}) string {\n\treturn \"application/json\"\n}\n\n// Marshal marshals \"v\" into JSON\nfunc (j *JSONBuiltin) Marshal(v interface{}) ([]byte, error) {\n\treturn json.Marshal(v)\n}\n\n// MarshalIndent is like Marshal but applies Indent to format the output\nfunc (j *JSONBuiltin) MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {\n\treturn json.MarshalIndent(v, prefix, indent)\n}\n\n// Unmarshal unmarshals JSON data into \"v\".\nfunc (j *JSONBuiltin) Unmarshal(data []byte, v interface{}) error {\n\treturn json.Unmarshal(data, v)\n}\n\n// NewDecoder returns a Decoder which reads JSON stream from \"r\".\nfunc (j *JSONBuiltin) NewDecoder(r io.Reader) Decoder {\n\treturn json.NewDecoder(r)\n}\n\n// NewEncoder returns an Encoder which writes JSON stream into \"w\".\nfunc (j *JSONBuiltin) NewEncoder(w io.Writer) Encoder {\n\treturn json.NewEncoder(w)\n}\n\n// Delimiter for newline encoded JSON streams.\nfunc (j *JSONBuiltin) Delimiter() []byte {\n\treturn []byte(\"\\n\")\n}\n"
  },
  {
    "path": "runtime/marshal_json_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/testing/protocmp\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\nfunc TestJSONBuiltinMarshal(t *testing.T) {\n\tvar m runtime.JSONBuiltin\n\tmsg := &examplepb.SimpleMessage{\n\t\tId: \"foo\",\n\t}\n\n\tbuf, err := m.Marshal(msg)\n\tif err != nil {\n\t\tt.Errorf(\"m.Marshal(%v) failed with %v; want success\", msg, err)\n\t}\n\n\tgot := new(examplepb.SimpleMessage)\n\tif err := json.Unmarshal(buf, got); err != nil {\n\t\tt.Errorf(\"json.Unmarshal(%q, got) failed with %v; want success\", buf, err)\n\t}\n\tif diff := cmp.Diff(got, msg, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestJSONBuiltinMarshalField(t *testing.T) {\n\tvar (\n\t\tm   runtime.JSONBuiltin\n\t\tbuf []byte\n\t\terr error\n\t)\n\n\tfor _, fixt := range builtinFieldFixtures {\n\t\tif len(fixt.indent) == 0 {\n\t\t\tbuf, err = m.Marshal(fixt.data)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"m.Marshal(%v) failed with %v; want success\", fixt.data, err)\n\t\t\t}\n\t\t} else {\n\t\t\tbuf, err = m.MarshalIndent(fixt.data, \"\", fixt.indent)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"m.MarshalIndent(%v, \\\"\\\", \\\"%s\\\") failed with %v; want success\", fixt.data, fixt.indent, err)\n\t\t\t}\n\t\t}\n\n\t\tif got, want := string(buf), fixt.json; got != want {\n\t\t\tt.Errorf(\"got = %q; want %q; data = %#v\", got, want, fixt.data)\n\t\t}\n\t}\n}\n\nfunc TestJSONBuiltinMarshalFieldKnownErrors(t *testing.T) {\n\tvar m runtime.JSONBuiltin\n\tfor _, fixt := range builtinKnownErrors {\n\t\tbuf, err := m.Marshal(fixt.data)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"m.Marshal(%v) failed with %v; want success\", fixt.data, err)\n\t\t}\n\t\tif got, want := string(buf), fixt.json; got == want {\n\t\t\tt.Errorf(\"surprisingly got = %q; as want %q; data = %#v\", got, want, fixt.data)\n\t\t}\n\t}\n}\n\nfunc TestJSONBuiltinsnmarshal(t *testing.T) {\n\tvar (\n\t\tm   runtime.JSONBuiltin\n\t\tgot = new(examplepb.SimpleMessage)\n\n\t\tdata = []byte(`{\"id\": \"foo\"}`)\n\t)\n\tif err := m.Unmarshal(data, got); err != nil {\n\t\tt.Errorf(\"m.Unmarshal(%q, got) failed with %v; want success\", data, err)\n\t}\n\n\twant := &examplepb.SimpleMessage{\n\t\tId: \"foo\",\n\t}\n\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestJSONBuiltinUnmarshalField(t *testing.T) {\n\tvar m runtime.JSONBuiltin\n\tfor _, fixt := range builtinFieldFixtures {\n\t\tdest := alloc(reflect.TypeOf(fixt.data))\n\t\tif err := m.Unmarshal([]byte(fixt.json), dest.Interface()); err != nil {\n\t\t\tt.Errorf(\"m.Unmarshal(%q, dest) failed with %v; want success\", fixt.json, err)\n\t\t}\n\n\t\tgot, want := dest.Elem().Interface(), fixt.data\n\t\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\t\tt.Error(diff)\n\t\t}\n\t}\n}\n\nfunc alloc(t reflect.Type) reflect.Value {\n\tif t == nil {\n\t\treturn reflect.ValueOf(new(interface{}))\n\t}\n\treturn reflect.New(t)\n}\n\nfunc TestJSONBuiltinUnmarshalFieldKnownErrors(t *testing.T) {\n\tvar m runtime.JSONBuiltin\n\tfor _, fixt := range builtinKnownErrors {\n\t\tdest := reflect.New(reflect.TypeOf(fixt.data))\n\t\tif err := m.Unmarshal([]byte(fixt.json), dest.Interface()); err == nil {\n\t\t\tt.Errorf(\"m.Unmarshal(%q, dest) succeeded; want an error\", fixt.json)\n\t\t}\n\t}\n}\n\nfunc TestJSONBuiltinEncoder(t *testing.T) {\n\tvar m runtime.JSONBuiltin\n\tmsg := &examplepb.SimpleMessage{\n\t\tId: \"foo\",\n\t}\n\n\tvar buf bytes.Buffer\n\tenc := m.NewEncoder(&buf)\n\tif err := enc.Encode(msg); err != nil {\n\t\tt.Errorf(\"enc.Encode(%v) failed with %v; want success\", msg, err)\n\t}\n\n\tgot := new(examplepb.SimpleMessage)\n\tif err := json.Unmarshal(buf.Bytes(), got); err != nil {\n\t\tt.Errorf(\"json.Unmarshal(%q, got) failed with %v; want success\", buf.String(), err)\n\t}\n\tif diff := cmp.Diff(got, msg, protocmp.Transform()); diff != \"\" {\n\t\tt.Error(diff)\n\t}\n}\n\nfunc TestJSONBuiltinEncoderFields(t *testing.T) {\n\tvar m runtime.JSONBuiltin\n\tfor _, fixt := range builtinFieldFixtures {\n\t\tvar buf bytes.Buffer\n\t\tenc := m.NewEncoder(&buf)\n\n\t\tif fixt.indent != \"\" {\n\t\t\tif e, ok := enc.(*json.Encoder); ok {\n\t\t\t\te.SetIndent(\"\", fixt.indent)\n\t\t\t} else {\n\t\t\t\t// By default, JSONBuiltin.NewEncoder returns *json.Encoder as runtime.Encoder.\n\t\t\t\t// Otherwise it's better to fail the tests than skip fixtures with non empty indent\n\t\t\t\tt.Errorf(\"enc is not *json.Encoder, unable to set indentation settings. \" +\n\t\t\t\t\t\"This failure prevents testing the correctness of indentation in JSON output.\")\n\t\t\t}\n\t\t}\n\n\t\tif err := enc.Encode(fixt.data); err != nil {\n\t\t\tt.Errorf(\"enc.Encode(%#v) failed with %v; want success\", fixt.data, err)\n\t\t}\n\n\t\tif got, want := buf.String(), fixt.json+\"\\n\"; got != want {\n\t\t\tt.Errorf(\"got = %q; want %q; data = %#v\", got, want, fixt.data)\n\t\t}\n\t}\n}\n\nfunc TestJSONBuiltinDecoder(t *testing.T) {\n\tvar (\n\t\tm   runtime.JSONBuiltin\n\t\tgot = new(examplepb.SimpleMessage)\n\n\t\tdata = `{\"id\": \"foo\"}`\n\t)\n\tr := strings.NewReader(data)\n\tdec := m.NewDecoder(r)\n\tif err := dec.Decode(got); err != nil {\n\t\tt.Errorf(\"m.Unmarshal(got) failed with %v; want success\", err)\n\t}\n\n\twant := &examplepb.SimpleMessage{\n\t\tId: \"foo\",\n\t}\n\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\tt.Errorf(\"got = %v; want = %v\", got, want)\n\t}\n}\n\nfunc TestJSONBuiltinDecoderFields(t *testing.T) {\n\tvar m runtime.JSONBuiltin\n\tfor _, fixt := range builtinFieldFixtures {\n\t\tr := strings.NewReader(fixt.json)\n\t\tdec := m.NewDecoder(r)\n\t\tdest := alloc(reflect.TypeOf(fixt.data))\n\t\tif err := dec.Decode(dest.Interface()); err != nil {\n\t\t\tt.Errorf(\"dec.Decode(dest) failed with %v; want success; data = %q\", err, fixt.json)\n\t\t}\n\n\t\tgot, want := dest.Elem().Interface(), fixt.data\n\t\tif diff := cmp.Diff(got, want, protocmp.Transform()); diff != \"\" {\n\t\t\tt.Error(diff)\n\t\t}\n\t}\n}\n\nvar (\n\tdefaultIndent        = \"  \"\n\tbuiltinFieldFixtures = []struct {\n\t\tdata   interface{}\n\t\tindent string\n\t\tjson   string\n\t}{\n\t\t{data: \"\", json: `\"\"`},\n\t\t{data: \"\", indent: defaultIndent, json: `\"\"`},\n\t\t{data: proto.String(\"\"), json: `\"\"`},\n\t\t{data: proto.String(\"\"), indent: defaultIndent, json: `\"\"`},\n\t\t{data: \"foo\", json: `\"foo\"`},\n\t\t{data: \"foo\", indent: defaultIndent, json: `\"foo\"`},\n\t\t{data: []byte(\"foo\"), json: `\"Zm9v\"`},\n\t\t{data: []byte(\"foo\"), indent: defaultIndent, json: `\"Zm9v\"`},\n\t\t{data: []byte{}, json: `\"\"`},\n\t\t{data: []byte{}, indent: defaultIndent, json: `\"\"`},\n\t\t{data: proto.String(\"foo\"), json: `\"foo\"`},\n\t\t{data: proto.String(\"foo\"), indent: defaultIndent, json: `\"foo\"`},\n\t\t{data: int32(-1), json: \"-1\"},\n\t\t{data: int32(-1), indent: defaultIndent, json: \"-1\"},\n\t\t{data: proto.Int32(-1), json: \"-1\"},\n\t\t{data: proto.Int32(-1), indent: defaultIndent, json: \"-1\"},\n\t\t{data: int64(-1), json: \"-1\"},\n\t\t{data: int64(-1), indent: defaultIndent, json: \"-1\"},\n\t\t{data: proto.Int64(-1), json: \"-1\"},\n\t\t{data: proto.Int64(-1), indent: defaultIndent, json: \"-1\"},\n\t\t{data: uint32(123), json: \"123\"},\n\t\t{data: uint32(123), indent: defaultIndent, json: \"123\"},\n\t\t{data: proto.Uint32(123), json: \"123\"},\n\t\t{data: proto.Uint32(123), indent: defaultIndent, json: \"123\"},\n\t\t{data: uint64(123), json: \"123\"},\n\t\t{data: uint64(123), indent: defaultIndent, json: \"123\"},\n\t\t{data: proto.Uint64(123), json: \"123\"},\n\t\t{data: proto.Uint64(123), indent: defaultIndent, json: \"123\"},\n\t\t{data: float32(-1.5), json: \"-1.5\"},\n\t\t{data: float32(-1.5), indent: defaultIndent, json: \"-1.5\"},\n\t\t{data: proto.Float32(-1.5), json: \"-1.5\"},\n\t\t{data: proto.Float32(-1.5), indent: defaultIndent, json: \"-1.5\"},\n\t\t{data: float64(-1.5), json: \"-1.5\"},\n\t\t{data: float64(-1.5), indent: defaultIndent, json: \"-1.5\"},\n\t\t{data: proto.Float64(-1.5), json: \"-1.5\"},\n\t\t{data: proto.Float64(-1.5), indent: defaultIndent, json: \"-1.5\"},\n\t\t{data: true, json: \"true\"},\n\t\t{data: true, indent: defaultIndent, json: \"true\"},\n\t\t{data: proto.Bool(true), json: \"true\"},\n\t\t{data: proto.Bool(true), indent: defaultIndent, json: \"true\"},\n\t\t{data: (*string)(nil), json: \"null\"},\n\t\t{data: (*string)(nil), indent: defaultIndent, json: \"null\"},\n\t\t{data: new(emptypb.Empty), json: \"{}\"},\n\t\t{data: new(emptypb.Empty), indent: defaultIndent, json: \"{}\"},\n\t\t{data: examplepb.NumericEnum_ONE, json: \"1\"},\n\t\t{data: examplepb.NumericEnum_ONE, indent: defaultIndent, json: \"1\"},\n\t\t{data: nil, json: \"null\"},\n\t\t{data: nil, indent: defaultIndent, json: \"null\"},\n\t\t{data: (*string)(nil), json: \"null\"},\n\t\t{data: (*string)(nil), indent: defaultIndent, json: \"null\"},\n\t\t{data: []interface{}{nil, \"foo\", -1.0, 1.234, true}, json: `[null,\"foo\",-1,1.234,true]`},\n\t\t{data: []interface{}{nil, \"foo\", -1.0, 1.234, true}, indent: defaultIndent, json: \"[\\n  null,\\n  \\\"foo\\\",\\n  -1,\\n  1.234,\\n  true\\n]\"},\n\t\t{\n\t\t\tdata: map[string]interface{}{\"bar\": nil, \"baz\": -1.0, \"fiz\": 1.234, \"foo\": true},\n\t\t\tjson: `{\"bar\":null,\"baz\":-1,\"fiz\":1.234,\"foo\":true}`,\n\t\t},\n\t\t{\n\t\t\tdata:   map[string]interface{}{\"bar\": nil, \"baz\": -1.0, \"fiz\": 1.234, \"foo\": true},\n\t\t\tindent: defaultIndent,\n\t\t\tjson:   \"{\\n  \\\"bar\\\": null,\\n  \\\"baz\\\": -1,\\n  \\\"fiz\\\": 1.234,\\n  \\\"foo\\\": true\\n}\",\n\t\t},\n\t\t{\n\t\t\tdata: (*examplepb.NumericEnum)(proto.Int32(int32(examplepb.NumericEnum_ONE))),\n\t\t\tjson: \"1\",\n\t\t},\n\t\t{\n\t\t\tdata:   (*examplepb.NumericEnum)(proto.Int32(int32(examplepb.NumericEnum_ONE))),\n\t\t\tindent: defaultIndent,\n\t\t\tjson:   \"1\",\n\t\t},\n\t\t{data: map[string]int{\"FOO\": 0, \"BAR\": -1}, json: \"{\\\"BAR\\\":-1,\\\"FOO\\\":0}\"},\n\t\t{data: map[string]int{\"FOO\": 0, \"BAR\": -1}, indent: defaultIndent, json: \"{\\n  \\\"BAR\\\": -1,\\n  \\\"FOO\\\": 0\\n}\"},\n\t\t{data: struct {\n\t\t\tA string\n\t\t\tB int\n\t\t\tC map[string]int\n\t\t}{A: \"Go\", B: 3, C: map[string]int{\"FOO\": 0, \"BAR\": -1}},\n\t\t\tjson: \"{\\\"A\\\":\\\"Go\\\",\\\"B\\\":3,\\\"C\\\":{\\\"BAR\\\":-1,\\\"FOO\\\":0}}\"},\n\t\t{data: struct {\n\t\t\tA string\n\t\t\tB int\n\t\t\tC map[string]int\n\t\t}{A: \"Go\", B: 3, C: map[string]int{\"FOO\": 0, \"BAR\": -1}}, indent: defaultIndent,\n\t\t\tjson: \"{\\n  \\\"A\\\": \\\"Go\\\",\\n  \\\"B\\\": 3,\\n  \\\"C\\\": {\\n    \\\"BAR\\\": -1,\\n    \\\"FOO\\\": 0\\n  }\\n}\"},\n\t}\n\tbuiltinKnownErrors = []struct {\n\t\tdata interface{}\n\t\tjson string\n\t}{\n\t\t{data: examplepb.NumericEnum_ONE, json: \"ONE\"},\n\t\t{\n\t\t\tdata: (*examplepb.NumericEnum)(proto.Int32(int32(examplepb.NumericEnum_ONE))),\n\t\t\tjson: \"ONE\",\n\t\t},\n\t\t{\n\t\t\tdata: &examplepb.ABitOfEverything_OneofString{OneofString: \"abc\"},\n\t\t\tjson: `\"abc\"`,\n\t\t},\n\t\t{\n\t\t\tdata: &timestamppb.Timestamp{\n\t\t\t\tSeconds: 1462875553,\n\t\t\t\tNanos:   123000000,\n\t\t\t},\n\t\t\tjson: `\"2016-05-10T10:19:13.123Z\"`,\n\t\t},\n\t\t{\n\t\t\tdata: wrapperspb.Int32(123),\n\t\t\tjson: \"123\",\n\t\t},\n\t}\n)\n"
  },
  {
    "path": "runtime/marshal_jsonpb.go",
    "content": "package runtime\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// JSONPb is a Marshaler which marshals/unmarshals into/from JSON\n// with the \"google.golang.org/protobuf/encoding/protojson\" marshaler.\n// It supports the full functionality of protobuf unlike JSONBuiltin.\n//\n// The NewDecoder method returns a DecoderWrapper, so the underlying\n// *json.Decoder methods can be used.\ntype JSONPb struct {\n\tprotojson.MarshalOptions\n\tprotojson.UnmarshalOptions\n}\n\n// ContentType always returns \"application/json\".\nfunc (*JSONPb) ContentType(_ interface{}) string {\n\treturn \"application/json\"\n}\n\n// Marshal marshals \"v\" into JSON.\nfunc (j *JSONPb) Marshal(v interface{}) ([]byte, error) {\n\tvar buf bytes.Buffer\n\tif err := j.marshalTo(&buf, v); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf.Bytes(), nil\n}\n\nfunc (j *JSONPb) marshalTo(w io.Writer, v interface{}) error {\n\tp, ok := v.(proto.Message)\n\tif !ok {\n\t\tbuf, err := j.marshalNonProtoField(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif j.Indent != \"\" {\n\t\t\tb := &bytes.Buffer{}\n\t\t\tif err := json.Indent(b, buf, \"\", j.Indent); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tbuf = b.Bytes()\n\t\t}\n\t\t_, err = w.Write(buf)\n\t\treturn err\n\t}\n\n\tb, err := j.MarshalOptions.Marshal(p)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = w.Write(b)\n\treturn err\n}\n\nvar (\n\t// protoMessageType is stored to prevent constant lookup of the same type at runtime.\n\tprotoMessageType = reflect.TypeFor[proto.Message]()\n)\n\n// marshalNonProto marshals a non-message field of a protobuf message.\n// This function does not correctly marshal arbitrary data structures into JSON,\n// it is only capable of marshaling non-message field values of protobuf,\n// i.e. primitive types, enums; pointers to primitives or enums; maps from\n// integer/string types to primitives/enums/pointers to messages.\nfunc (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) {\n\tif v == nil {\n\t\treturn []byte(\"null\"), nil\n\t}\n\trv := reflect.ValueOf(v)\n\tfor rv.Kind() == reflect.Ptr {\n\t\tif rv.IsNil() {\n\t\t\treturn []byte(\"null\"), nil\n\t\t}\n\t\trv = rv.Elem()\n\t}\n\n\tif rv.Kind() == reflect.Slice {\n\t\tif rv.IsNil() {\n\t\t\tif j.EmitUnpopulated {\n\t\t\t\treturn []byte(\"[]\"), nil\n\t\t\t}\n\t\t\treturn []byte(\"null\"), nil\n\t\t}\n\n\t\tif rv.Type().Elem().Implements(protoMessageType) {\n\t\t\tvar buf bytes.Buffer\n\t\t\tif err := buf.WriteByte('['); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\t\tif i != 0 {\n\t\t\t\t\tif err := buf.WriteByte(','); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif err := j.marshalTo(&buf, rv.Index(i).Interface().(proto.Message)); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif err := buf.WriteByte(']'); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn buf.Bytes(), nil\n\t\t}\n\n\t\tif rv.Type().Elem().Implements(typeProtoEnum) {\n\t\t\tvar buf bytes.Buffer\n\t\t\tif err := buf.WriteByte('['); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\t\tif i != 0 {\n\t\t\t\t\tif err := buf.WriteByte(','); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar err error\n\t\t\t\tif j.UseEnumNumbers {\n\t\t\t\t\t_, err = buf.WriteString(strconv.FormatInt(rv.Index(i).Int(), 10))\n\t\t\t\t} else {\n\t\t\t\t\t_, err = buf.WriteString(\"\\\"\" + rv.Index(i).Interface().(protoEnum).String() + \"\\\"\")\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif err := buf.WriteByte(']'); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn buf.Bytes(), nil\n\t\t}\n\t}\n\n\tif rv.Kind() == reflect.Map {\n\t\tm := make(map[string]*json.RawMessage)\n\t\tfor _, k := range rv.MapKeys() {\n\t\t\tbuf, err := j.Marshal(rv.MapIndex(k).Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tm[fmt.Sprintf(\"%v\", k.Interface())] = (*json.RawMessage)(&buf)\n\t\t}\n\t\treturn json.Marshal(m)\n\t}\n\tif enum, ok := rv.Interface().(protoEnum); ok && !j.UseEnumNumbers {\n\t\treturn json.Marshal(enum.String())\n\t}\n\treturn json.Marshal(rv.Interface())\n}\n\n// Unmarshal unmarshals JSON \"data\" into \"v\"\nfunc (j *JSONPb) Unmarshal(data []byte, v interface{}) error {\n\treturn unmarshalJSONPb(data, j.UnmarshalOptions, v)\n}\n\n// NewDecoder returns a Decoder which reads JSON stream from \"r\".\nfunc (j *JSONPb) NewDecoder(r io.Reader) Decoder {\n\td := json.NewDecoder(r)\n\treturn DecoderWrapper{\n\t\tDecoder:          d,\n\t\tUnmarshalOptions: j.UnmarshalOptions,\n\t}\n}\n\n// DecoderWrapper is a wrapper around a *json.Decoder that adds\n// support for protos to the Decode method.\ntype DecoderWrapper struct {\n\t*json.Decoder\n\tprotojson.UnmarshalOptions\n}\n\n// Decode wraps the embedded decoder's Decode method to support\n// protos using a jsonpb.Unmarshaler.\nfunc (d DecoderWrapper) Decode(v interface{}) error {\n\treturn decodeJSONPb(d.Decoder, d.UnmarshalOptions, v)\n}\n\n// NewEncoder returns an Encoder which writes JSON stream into \"w\".\nfunc (j *JSONPb) NewEncoder(w io.Writer) Encoder {\n\treturn EncoderFunc(func(v interface{}) error {\n\t\tif err := j.marshalTo(w, v); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// mimic json.Encoder by adding a newline (makes output\n\t\t// easier to read when it contains multiple encoded items)\n\t\t_, err := w.Write(j.Delimiter())\n\t\treturn err\n\t})\n}\n\nfunc unmarshalJSONPb(data []byte, unmarshaler protojson.UnmarshalOptions, v interface{}) error {\n\td := json.NewDecoder(bytes.NewReader(data))\n\treturn decodeJSONPb(d, unmarshaler, v)\n}\n\nfunc decodeJSONPb(d *json.Decoder, unmarshaler protojson.UnmarshalOptions, v interface{}) error {\n\tp, ok := v.(proto.Message)\n\tif !ok {\n\t\treturn decodeNonProtoField(d, unmarshaler, v)\n\t}\n\n\t// Decode into bytes for marshalling\n\tvar b json.RawMessage\n\tif err := d.Decode(&b); err != nil {\n\t\treturn err\n\t}\n\n\treturn unmarshaler.Unmarshal([]byte(b), p)\n}\n\nfunc decodeNonProtoField(d *json.Decoder, unmarshaler protojson.UnmarshalOptions, v interface{}) error {\n\trv := reflect.ValueOf(v)\n\tif rv.Kind() != reflect.Ptr {\n\t\treturn fmt.Errorf(\"%T is not a pointer\", v)\n\t}\n\tfor rv.Kind() == reflect.Ptr {\n\t\tif rv.IsNil() {\n\t\t\trv.Set(reflect.New(rv.Type().Elem()))\n\t\t}\n\t\tif rv.Type().ConvertibleTo(typeProtoMessage) {\n\t\t\t// Decode into bytes for marshalling\n\t\t\tvar b json.RawMessage\n\t\t\tif err := d.Decode(&b); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn unmarshaler.Unmarshal([]byte(b), rv.Interface().(proto.Message))\n\t\t}\n\t\trv = rv.Elem()\n\t}\n\tif rv.Kind() == reflect.Map {\n\t\tif rv.IsNil() {\n\t\t\trv.Set(reflect.MakeMap(rv.Type()))\n\t\t}\n\t\tconv, ok := convFromType[rv.Type().Key().Kind()]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unsupported type of map field key: %v\", rv.Type().Key())\n\t\t}\n\n\t\tm := make(map[string]*json.RawMessage)\n\t\tif err := d.Decode(&m); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor k, v := range m {\n\t\t\tresult := conv.Call([]reflect.Value{reflect.ValueOf(k)})\n\t\t\tif err := result[1].Interface(); err != nil {\n\t\t\t\treturn err.(error)\n\t\t\t}\n\t\t\tbk := result[0]\n\t\t\tbv := reflect.New(rv.Type().Elem())\n\t\t\tif v == nil {\n\t\t\t\tnull := json.RawMessage(\"null\")\n\t\t\t\tv = &null\n\t\t\t}\n\t\t\tif err := unmarshalJSONPb([]byte(*v), unmarshaler, bv.Interface()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\trv.SetMapIndex(bk, bv.Elem())\n\t\t}\n\t\treturn nil\n\t}\n\tif rv.Kind() == reflect.Slice {\n\t\tif rv.Type().Elem().Kind() == reflect.Uint8 {\n\t\t\tvar sl []byte\n\t\t\tif err := d.Decode(&sl); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif sl != nil {\n\t\t\t\trv.SetBytes(sl)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tvar sl []json.RawMessage\n\t\tif err := d.Decode(&sl); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif sl != nil {\n\t\t\trv.Set(reflect.MakeSlice(rv.Type(), 0, 0))\n\t\t}\n\t\tfor _, item := range sl {\n\t\t\tbv := reflect.New(rv.Type().Elem())\n\t\t\tif err := unmarshalJSONPb([]byte(item), unmarshaler, bv.Interface()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\trv.Set(reflect.Append(rv, bv.Elem()))\n\t\t}\n\t\treturn nil\n\t}\n\tif _, ok := rv.Interface().(protoEnum); ok {\n\t\tvar repr interface{}\n\t\tif err := d.Decode(&repr); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch v := repr.(type) {\n\t\tcase string:\n\t\t\t// TODO(yugui) Should use proto.StructProperties?\n\t\t\treturn fmt.Errorf(\"unmarshaling of symbolic enum %q not supported: %T\", repr, rv.Interface())\n\t\tcase float64:\n\t\t\trv.Set(reflect.ValueOf(int32(v)).Convert(rv.Type()))\n\t\t\treturn nil\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"cannot assign %#v into Go type %T\", repr, rv.Interface())\n\t\t}\n\t}\n\treturn d.Decode(v)\n}\n\ntype protoEnum interface {\n\tfmt.Stringer\n\tEnumDescriptor() ([]byte, []int)\n}\n\nvar typeProtoEnum = reflect.TypeFor[protoEnum]()\n\nvar typeProtoMessage = reflect.TypeFor[proto.Message]()\n\n// Delimiter for newline encoded JSON streams.\nfunc (j *JSONPb) Delimiter() []byte {\n\treturn []byte(\"\\n\")\n}\n\nvar (\n\tconvFromType = map[reflect.Kind]reflect.Value{\n\t\treflect.String:  reflect.ValueOf(String),\n\t\treflect.Bool:    reflect.ValueOf(Bool),\n\t\treflect.Float64: reflect.ValueOf(Float64),\n\t\treflect.Float32: reflect.ValueOf(Float32),\n\t\treflect.Int64:   reflect.ValueOf(Int64),\n\t\treflect.Int32:   reflect.ValueOf(Int32),\n\t\treflect.Uint64:  reflect.ValueOf(Uint64),\n\t\treflect.Uint32:  reflect.ValueOf(Uint32),\n\t\treflect.Slice:   reflect.ValueOf(Bytes),\n\t}\n)\n"
  },
  {
    "path": "runtime/marshal_jsonpb_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"bytes\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/testing/protocmp\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n\t\"google.golang.org/protobuf/types/known/emptypb\"\n\t\"google.golang.org/protobuf/types/known/structpb\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\nfunc TestJSONPbMarshal(t *testing.T) {\n\tmsg := examplepb.ABitOfEverything{\n\t\tSingleNested:        &examplepb.ABitOfEverything_Nested{},\n\t\tRepeatedStringValue: []string{},\n\t\tMappedStringValue:   map[string]string{},\n\t\tMappedNestedValue:   map[string]*examplepb.ABitOfEverything_Nested{},\n\t\tRepeatedEnumValue:   []examplepb.NumericEnum{},\n\t\tTimestampValue:      &timestamppb.Timestamp{},\n\t\tUuid:                \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\tNested: []*examplepb.ABitOfEverything_Nested{\n\t\t\t{\n\t\t\t\tName:   \"foo\",\n\t\t\t\tAmount: 12345,\n\t\t\t},\n\t\t},\n\t\tUint64Value: 0xFFFFFFFFFFFFFFFF,\n\t\tEnumValue:   examplepb.NumericEnum_ONE,\n\t\tOneofValue: &examplepb.ABitOfEverything_OneofString{\n\t\t\tOneofString: \"bar\",\n\t\t},\n\t\tMapValue: map[string]examplepb.NumericEnum{\n\t\t\t\"a\": examplepb.NumericEnum_ONE,\n\t\t\t\"b\": examplepb.NumericEnum_ZERO,\n\t\t},\n\t\tRepeatedEnumAnnotation:   []examplepb.NumericEnum{},\n\t\tEnumValueAnnotation:      examplepb.NumericEnum_ONE,\n\t\tRepeatedStringAnnotation: []string{},\n\t\tRepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{},\n\t\tNestedAnnotation:         &examplepb.ABitOfEverything_Nested{},\n\t}\n\n\tfor i, spec := range []struct {\n\t\tuseEnumNumbers, emitUnpopulated bool\n\t\tindent                          string\n\t\tuseProtoNames                   bool\n\t\tverifier                        func(json string)\n\t}{\n\t\t{\n\t\t\tverifier: func(json string) {\n\t\t\t\tif !strings.Contains(json, \"ONE\") {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, \"ONE\") = false; want true`, json)\n\t\t\t\t}\n\t\t\t\tif want := \"uint64Value\"; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tuseEnumNumbers: true,\n\t\t\tverifier: func(json string) {\n\t\t\t\tif strings.Contains(json, \"ONE\") {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, \"ONE\") = true; want false`, json)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\temitUnpopulated: true,\n\t\t\tverifier: func(json string) {\n\t\t\t\tif want := `\"sfixed32Value\"`; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tindent: \"\\t\\t\",\n\t\t\tverifier: func(json string) {\n\t\t\t\tif want := \"\\t\\t\\\"amount\\\":\"; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tuseProtoNames: true,\n\t\t\tverifier: func(json string) {\n\t\t\t\tif want := \"uint64_value\"; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t} {\n\t\tt.Run(strconv.Itoa(i), func(t *testing.T) {\n\t\t\tm := runtime.JSONPb{\n\t\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\t\tEmitUnpopulated: spec.emitUnpopulated,\n\t\t\t\t\tIndent:          spec.indent,\n\t\t\t\t\tUseProtoNames:   spec.useProtoNames,\n\t\t\t\t\tUseEnumNumbers:  spec.useEnumNumbers,\n\t\t\t\t},\n\t\t\t}\n\t\t\tbuf, err := m.Marshal(&msg)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"m.Marshal(%v) failed with %v; want success; spec=%v\", &msg, err, spec)\n\t\t\t}\n\n\t\t\tvar got examplepb.ABitOfEverything\n\t\t\tunmarshaler := &protojson.UnmarshalOptions{}\n\t\t\tif err = unmarshaler.Unmarshal(buf, &got); err != nil {\n\t\t\t\tt.Errorf(\"jsonpb.UnmarshalString(%q, &got) failed with %v; want success; spec=%v\", string(buf), err, spec)\n\t\t\t}\n\t\t\tif diff := cmp.Diff(&got, &msg, protocmp.Transform()); diff != \"\" {\n\t\t\t\tt.Errorf(\"case %d: spec=%v; %s\", i, spec, diff)\n\t\t\t}\n\t\t\tif spec.verifier != nil {\n\t\t\t\tspec.verifier(string(buf))\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestJSONPbMarshalFields(t *testing.T) {\n\tvar m runtime.JSONPb\n\tm.UseEnumNumbers = true // builtin fixtures include an enum, expected to be marshaled as int\n\n\tfor _, spec := range builtinFieldFixtures {\n\t\tm.Indent = spec.indent\n\n\t\tbuf, err := m.Marshal(spec.data)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"m.Marshal(%#v) failed with %v; want success\", spec.data, err)\n\t\t}\n\n\t\tif got, want := string(buf), spec.json; got != want {\n\t\t\tt.Errorf(\"m.Marshal(%#v) = %q; want %q\", spec.data, got, want)\n\t\t}\n\t}\n\n\t// Reset m.Indent to ensure no unintended indentation settings carry over to subsequent tests\n\tm.Indent = \"\"\n\n\tnums := []examplepb.NumericEnum{examplepb.NumericEnum_ZERO, examplepb.NumericEnum_ONE}\n\n\tbuf, err := m.Marshal(nums)\n\tif err != nil {\n\t\tt.Errorf(\"m.Marshal(%#v) failed with %v; want success\", nums, err)\n\t}\n\tif got, want := string(buf), `[0,1]`; got != want {\n\t\tt.Errorf(\"m.Marshal(%#v) = %q; want %q\", nums, got, want)\n\t}\n\n\tm.UseEnumNumbers = false\n\tbuf, err = m.Marshal(examplepb.NumericEnum_ONE)\n\tif err != nil {\n\t\tt.Errorf(\"m.Marshal(%#v) failed with %v; want success\", examplepb.NumericEnum_ONE, err)\n\t}\n\tif got, want := string(buf), `\"ONE\"`; got != want {\n\t\tt.Errorf(\"m.Marshal(%#v) = %q; want %q\", examplepb.NumericEnum_ONE, got, want)\n\t}\n\n\tbuf, err = m.Marshal(nums)\n\tif err != nil {\n\t\tt.Errorf(\"m.Marshal(%#v) failed with %v; want success\", nums, err)\n\t}\n\tif got, want := string(buf), `[\"ZERO\",\"ONE\"]`; got != want {\n\t\tt.Errorf(\"m.Marshal(%#v) = %q; want %q\", nums, got, want)\n\t}\n}\n\nfunc TestJSONPbUnmarshal(t *testing.T) {\n\tvar (\n\t\tm   runtime.JSONPb\n\t\tgot examplepb.ABitOfEverything\n\t)\n\tfor i, data := range []string{\n\t\t`{\n\t\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\t\"nested\": [\n\t\t\t\t{\"name\": \"foo\", \"amount\": 12345}\n\t\t\t],\n\t\t\t\"uint64Value\": 18446744073709551615,\n\t\t\t\"enumValue\": \"ONE\",\n\t\t\t\"oneofString\": \"bar\",\n\t\t\t\"mapValue\": {\n\t\t\t\t\"a\": 1,\n\t\t\t\t\"b\": 0\n\t\t\t}\n\t\t}`,\n\t\t`{\n\t\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\t\"nested\": [\n\t\t\t\t{\"name\": \"foo\", \"amount\": 12345}\n\t\t\t],\n\t\t\t\"uint64Value\": \"18446744073709551615\",\n\t\t\t\"enumValue\": \"ONE\",\n\t\t\t\"oneofString\": \"bar\",\n\t\t\t\"mapValue\": {\n\t\t\t\t\"a\": 1,\n\t\t\t\t\"b\": 0\n\t\t\t}\n\t\t}`,\n\t\t`{\n\t\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\t\"nested\": [\n\t\t\t\t{\"name\": \"foo\", \"amount\": 12345}\n\t\t\t],\n\t\t\t\"uint64Value\": 18446744073709551615,\n\t\t\t\"enumValue\": 1,\n\t\t\t\"oneofString\": \"bar\",\n\t\t\t\"mapValue\": {\n\t\t\t\t\"a\": 1,\n\t\t\t\t\"b\": 0\n\t\t\t}\n\t\t}`,\n\t} {\n\t\tif err := m.Unmarshal([]byte(data), &got); err != nil {\n\t\t\tt.Errorf(\"case %d: m.Unmarshal(%q, &got) failed with %v; want success\", i, data, err)\n\t\t}\n\n\t\twant := examplepb.ABitOfEverything{\n\t\t\tUuid: \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\tNested: []*examplepb.ABitOfEverything_Nested{\n\t\t\t\t{\n\t\t\t\t\tName:   \"foo\",\n\t\t\t\t\tAmount: 12345,\n\t\t\t\t},\n\t\t\t},\n\t\t\tUint64Value: 0xFFFFFFFFFFFFFFFF,\n\t\t\tEnumValue:   examplepb.NumericEnum_ONE,\n\t\t\tOneofValue: &examplepb.ABitOfEverything_OneofString{\n\t\t\t\tOneofString: \"bar\",\n\t\t\t},\n\t\t\tMapValue: map[string]examplepb.NumericEnum{\n\t\t\t\t\"a\": examplepb.NumericEnum_ONE,\n\t\t\t\t\"b\": examplepb.NumericEnum_ZERO,\n\t\t\t},\n\t\t}\n\n\t\tif diff := cmp.Diff(&got, &want, protocmp.Transform()); diff != \"\" {\n\t\t\tt.Errorf(\"case %d: %s\", i, diff)\n\t\t}\n\t}\n}\n\nfunc TestJSONPbUnmarshalFields(t *testing.T) {\n\tvar m runtime.JSONPb\n\tfor _, fixt := range fieldFixtures {\n\t\tif fixt.skipUnmarshal {\n\t\t\tcontinue\n\t\t}\n\n\t\tdest := reflect.New(reflect.TypeOf(fixt.data))\n\t\tif err := m.Unmarshal([]byte(fixt.json), dest.Interface()); err != nil {\n\t\t\tt.Errorf(\"m.Unmarshal(%q, %T) failed with %v; want success\", fixt.json, dest.Interface(), err)\n\t\t}\n\t\tif diff := cmp.Diff(dest.Elem().Interface(), fixt.data, protocmp.Transform()); diff != \"\" {\n\t\t\tt.Errorf(\"dest = %#v; want %#v; input = %v\", dest.Elem().Interface(), fixt.data, fixt.json)\n\t\t}\n\t}\n}\n\nfunc TestJSONPbEncoder(t *testing.T) {\n\tmsg := examplepb.ABitOfEverything{\n\t\tSingleNested:        &examplepb.ABitOfEverything_Nested{},\n\t\tRepeatedStringValue: []string{},\n\t\tMappedStringValue:   map[string]string{},\n\t\tMappedNestedValue:   map[string]*examplepb.ABitOfEverything_Nested{},\n\t\tRepeatedEnumValue:   []examplepb.NumericEnum{},\n\t\tTimestampValue:      &timestamppb.Timestamp{},\n\t\tUuid:                \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\tNested: []*examplepb.ABitOfEverything_Nested{\n\t\t\t{\n\t\t\t\tName:   \"foo\",\n\t\t\t\tAmount: 12345,\n\t\t\t},\n\t\t},\n\t\tUint64Value: 0xFFFFFFFFFFFFFFFF,\n\t\tOneofValue: &examplepb.ABitOfEverything_OneofString{\n\t\t\tOneofString: \"bar\",\n\t\t},\n\t\tMapValue: map[string]examplepb.NumericEnum{\n\t\t\t\"a\": examplepb.NumericEnum_ONE,\n\t\t\t\"b\": examplepb.NumericEnum_ZERO,\n\t\t},\n\t\tRepeatedEnumAnnotation:   []examplepb.NumericEnum{},\n\t\tEnumValueAnnotation:      examplepb.NumericEnum_ONE,\n\t\tRepeatedStringAnnotation: []string{},\n\t\tRepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{},\n\t\tNestedAnnotation:         &examplepb.ABitOfEverything_Nested{},\n\t}\n\n\tfor i, spec := range []struct {\n\t\tuseEnumNumbers, emitUnpopulated bool\n\t\tindent                          string\n\t\tuseProtoNames                   bool\n\t\tverifier                        func(json string)\n\t}{\n\t\t{\n\t\t\tverifier: func(json string) {\n\t\t\t\tif !strings.Contains(json, \"ONE\") {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, \"ONE\") = false; want true`, json)\n\t\t\t\t}\n\t\t\t\tif want := \"uint64Value\"; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tuseEnumNumbers: true,\n\t\t\tverifier: func(json string) {\n\t\t\t\tif strings.Contains(json, \"ONE\") {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, \"ONE\") = true; want false`, json)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\temitUnpopulated: true,\n\t\t\tverifier: func(json string) {\n\t\t\t\tif want := `\"sfixed32Value\"`; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tindent: \"\\t\\t\",\n\t\t\tverifier: func(json string) {\n\t\t\t\tif want := \"\\t\\t\\\"amount\\\":\"; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tuseProtoNames: true,\n\t\t\tverifier: func(json string) {\n\t\t\t\tif want := \"uint64_value\"; !strings.Contains(json, want) {\n\t\t\t\t\tt.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t} {\n\t\tm := runtime.JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tEmitUnpopulated: spec.emitUnpopulated,\n\t\t\t\tIndent:          spec.indent,\n\t\t\t\tUseProtoNames:   spec.useProtoNames,\n\t\t\t\tUseEnumNumbers:  spec.useEnumNumbers,\n\t\t\t},\n\t\t}\n\n\t\tvar buf bytes.Buffer\n\t\tenc := m.NewEncoder(&buf)\n\t\tif err := enc.Encode(&msg); err != nil {\n\t\t\tt.Errorf(\"enc.Encode(%v) failed with %v; want success; spec=%v\", &msg, err, spec)\n\t\t}\n\n\t\tvar got examplepb.ABitOfEverything\n\t\tunmarshaler := &protojson.UnmarshalOptions{}\n\t\tif err := unmarshaler.Unmarshal(buf.Bytes(), &got); err != nil {\n\t\t\tt.Errorf(\"jsonpb.UnmarshalString(%q, &got) failed with %v; want success; spec=%v\", buf.String(), err, spec)\n\t\t}\n\t\tif diff := cmp.Diff(&got, &msg, protocmp.Transform()); diff != \"\" {\n\t\t\tt.Errorf(\"case %d: %s\", i, diff)\n\t\t}\n\t\tif spec.verifier != nil {\n\t\t\tspec.verifier(buf.String())\n\t\t}\n\t}\n}\n\nfunc TestJSONPbEncoderFields(t *testing.T) {\n\tvar m runtime.JSONPb\n\tfor _, fixt := range fieldFixtures {\n\t\tvar buf bytes.Buffer\n\t\tenc := m.NewEncoder(&buf)\n\t\tif err := enc.Encode(fixt.data); err != nil {\n\t\t\tt.Errorf(\"enc.Encode(%#v) failed with %v; want success\", fixt.data, err)\n\t\t}\n\t\tif got, want := buf.String(), fixt.json+string(m.Delimiter()); got != want {\n\t\t\tt.Errorf(\"enc.Encode(%#v) = %q; want %q\", fixt.data, got, want)\n\t\t}\n\t}\n\n\tm.UseEnumNumbers = true\n\tbuf, err := m.Marshal(examplepb.NumericEnum_ONE)\n\tif err != nil {\n\t\tt.Errorf(\"m.Marshal(%#v) failed with %v; want success\", examplepb.NumericEnum_ONE, err)\n\t}\n\tif got, want := string(buf), \"1\"; got != want {\n\t\tt.Errorf(\"m.Marshal(%#v) = %q; want %q\", examplepb.NumericEnum_ONE, got, want)\n\t}\n}\n\nfunc TestJSONPbDecoder(t *testing.T) {\n\tvar (\n\t\tm   runtime.JSONPb\n\t\tgot examplepb.ABitOfEverything\n\t)\n\tfor _, data := range []string{\n\t\t`{\n\t\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\t\"nested\": [\n\t\t\t\t{\"name\": \"foo\", \"amount\": 12345}\n\t\t\t],\n\t\t\t\"uint64Value\": 18446744073709551615,\n\t\t\t\"enumValue\": \"ONE\",\n\t\t\t\"oneofString\": \"bar\",\n\t\t\t\"mapValue\": {\n\t\t\t\t\"a\": 1,\n\t\t\t\t\"b\": 0\n\t\t\t}\n\t\t}`,\n\t\t`{\n\t\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\t\"nested\": [\n\t\t\t\t{\"name\": \"foo\", \"amount\": 12345}\n\t\t\t],\n\t\t\t\"uint64Value\": \"18446744073709551615\",\n\t\t\t\"enumValue\": \"ONE\",\n\t\t\t\"oneofString\": \"bar\",\n\t\t\t\"mapValue\": {\n\t\t\t\t\"a\": 1,\n\t\t\t\t\"b\": 0\n\t\t\t}\n\t\t}`,\n\t\t`{\n\t\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\t\"nested\": [\n\t\t\t\t{\"name\": \"foo\", \"amount\": 12345}\n\t\t\t],\n\t\t\t\"uint64Value\": 18446744073709551615,\n\t\t\t\"enumValue\": 1,\n\t\t\t\"oneofString\": \"bar\",\n\t\t\t\"mapValue\": {\n\t\t\t\t\"a\": 1,\n\t\t\t\t\"b\": 0\n\t\t\t}\n\t\t}`,\n\t} {\n\t\tr := strings.NewReader(data)\n\t\tdec := m.NewDecoder(r)\n\t\tif err := dec.Decode(&got); err != nil {\n\t\t\tt.Errorf(\"m.Unmarshal(&got) failed with %v; want success; data=%q\", err, data)\n\t\t}\n\n\t\twant := examplepb.ABitOfEverything{\n\t\t\tUuid: \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\tNested: []*examplepb.ABitOfEverything_Nested{\n\t\t\t\t{\n\t\t\t\t\tName:   \"foo\",\n\t\t\t\t\tAmount: 12345,\n\t\t\t\t},\n\t\t\t},\n\t\t\tUint64Value: 0xFFFFFFFFFFFFFFFF,\n\t\t\tEnumValue:   examplepb.NumericEnum_ONE,\n\t\t\tOneofValue: &examplepb.ABitOfEverything_OneofString{\n\t\t\t\tOneofString: \"bar\",\n\t\t\t},\n\t\t\tMapValue: map[string]examplepb.NumericEnum{\n\t\t\t\t\"a\": examplepb.NumericEnum_ONE,\n\t\t\t\t\"b\": examplepb.NumericEnum_ZERO,\n\t\t\t},\n\t\t}\n\t\tif diff := cmp.Diff(&got, &want, protocmp.Transform()); diff != \"\" {\n\t\t\tt.Errorf(\"data %q: %s\", data, diff)\n\t\t}\n\t}\n}\n\nfunc TestJSONPbDecoderFields(t *testing.T) {\n\tvar m runtime.JSONPb\n\tfor _, fixt := range fieldFixtures {\n\t\tif fixt.skipUnmarshal {\n\t\t\tcontinue\n\t\t}\n\n\t\tdest := reflect.New(reflect.TypeOf(fixt.data))\n\t\tdec := m.NewDecoder(strings.NewReader(fixt.json))\n\t\tif err := dec.Decode(dest.Interface()); err != nil {\n\t\t\tt.Errorf(\"dec.Decode(%T) failed with %v; want success; input = %q\", dest.Interface(), err, fixt.json)\n\t\t}\n\t\tif got, want := dest.Elem().Interface(), fixt.data; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"dest = %#v; want %#v; input = %v\", got, want, fixt.json)\n\t\t}\n\t}\n}\n\nfunc TestJSONPbDecoderUnknownField(t *testing.T) {\n\tvar (\n\t\tm = runtime.JSONPb{\n\t\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\t\tDiscardUnknown: false,\n\t\t\t},\n\t\t}\n\t\tgot examplepb.ABitOfEverything\n\t)\n\tdata := `{\n\t\t\"uuid\": \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\t\t\"unknownField\": \"111\"\n\t}`\n\n\tr := strings.NewReader(data)\n\tdec := m.NewDecoder(r)\n\tif err := dec.Decode(&got); err == nil {\n\t\tt.Errorf(\"m.Unmarshal(&got) not failed; want `unknown field` error; data=%q\", data)\n\t}\n}\n\nvar (\n\tfieldFixtures = []struct {\n\t\tdata          interface{}\n\t\tjson          string\n\t\tskipUnmarshal bool\n\t}{\n\t\t{data: int32(1), json: \"1\"},\n\t\t{data: proto.Int32(1), json: \"1\"},\n\t\t{data: int64(1), json: \"1\"},\n\t\t{data: proto.Int64(1), json: \"1\"},\n\t\t{data: uint32(1), json: \"1\"},\n\t\t{data: proto.Uint32(1), json: \"1\"},\n\t\t{data: uint64(1), json: \"1\"},\n\t\t{data: proto.Uint64(1), json: \"1\"},\n\t\t{data: \"abc\", json: `\"abc\"`},\n\t\t{data: []byte(\"abc\"), json: `\"YWJj\"`},\n\t\t{data: []byte{}, json: `\"\"`},\n\t\t{data: proto.String(\"abc\"), json: `\"abc\"`},\n\t\t{data: float32(1.5), json: \"1.5\"},\n\t\t{data: proto.Float32(1.5), json: \"1.5\"},\n\t\t{data: float64(1.5), json: \"1.5\"},\n\t\t{data: proto.Float64(1.5), json: \"1.5\"},\n\t\t{data: true, json: \"true\"},\n\t\t{data: false, json: \"false\"},\n\t\t{data: (*string)(nil), json: \"null\"},\n\t\t{\n\t\t\tdata: examplepb.NumericEnum_ONE,\n\t\t\tjson: `\"ONE\"`,\n\t\t\t// TODO(yugui) support unmarshaling of symbolic enum\n\t\t\tskipUnmarshal: true,\n\t\t},\n\t\t{\n\t\t\tdata: (*examplepb.NumericEnum)(proto.Int32(int32(examplepb.NumericEnum_ONE))),\n\t\t\tjson: `\"ONE\"`,\n\t\t\t// TODO(yugui) support unmarshaling of symbolic enum\n\t\t\tskipUnmarshal: true,\n\t\t},\n\n\t\t{\n\t\t\tdata: map[string]int32{\n\t\t\t\t\"foo\": 1,\n\t\t\t},\n\t\t\tjson: `{\"foo\":1}`,\n\t\t},\n\t\t{\n\t\t\tdata: map[string]*examplepb.SimpleMessage{\n\t\t\t\t\"foo\": {Id: \"bar\"},\n\t\t\t},\n\t\t\tjson: `{\"foo\":{\"id\":\"bar\"}}`,\n\t\t},\n\t\t{\n\t\t\tdata: map[int32]*examplepb.SimpleMessage{\n\t\t\t\t1: {Id: \"foo\"},\n\t\t\t},\n\t\t\tjson: `{\"1\":{\"id\":\"foo\"}}`,\n\t\t},\n\t\t{\n\t\t\tdata: map[bool]*examplepb.SimpleMessage{\n\t\t\t\ttrue: {Id: \"foo\"},\n\t\t\t},\n\t\t\tjson: `{\"true\":{\"id\":\"foo\"}}`,\n\t\t},\n\t\t{\n\t\t\tdata: &durationpb.Duration{\n\t\t\t\tSeconds: 123,\n\t\t\t\tNanos:   456000000,\n\t\t\t},\n\t\t\tjson: `\"123.456s\"`,\n\t\t},\n\t\t{\n\t\t\tdata: &timestamppb.Timestamp{\n\t\t\t\tSeconds: 1462875553,\n\t\t\t\tNanos:   123000000,\n\t\t\t},\n\t\t\tjson: `\"2016-05-10T10:19:13.123Z\"`,\n\t\t},\n\t\t{\n\t\t\tdata: new(emptypb.Empty),\n\t\t\tjson: \"{}\",\n\t\t},\n\t\t{\n\t\t\tdata: &structpb.Value{\n\t\t\t\tKind: new(structpb.Value_NullValue),\n\t\t\t},\n\t\t\tjson:          \"null\",\n\t\t\tskipUnmarshal: true,\n\t\t},\n\t\t{\n\t\t\tdata: &structpb.Value{\n\t\t\t\tKind: &structpb.Value_NumberValue{\n\t\t\t\t\tNumberValue: 123.4,\n\t\t\t\t},\n\t\t\t},\n\t\t\tjson:          \"123.4\",\n\t\t\tskipUnmarshal: true,\n\t\t},\n\t\t{\n\t\t\tdata: &structpb.Value{\n\t\t\t\tKind: &structpb.Value_StringValue{\n\t\t\t\t\tStringValue: \"abc\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tjson:          `\"abc\"`,\n\t\t\tskipUnmarshal: true,\n\t\t},\n\t\t{\n\t\t\tdata: &structpb.Value{\n\t\t\t\tKind: &structpb.Value_BoolValue{\n\t\t\t\t\tBoolValue: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\tjson:          \"true\",\n\t\t\tskipUnmarshal: true,\n\t\t},\n\t\t{\n\t\t\tdata: &structpb.Struct{\n\t\t\t\tFields: map[string]*structpb.Value{\n\t\t\t\t\t\"foo_bar\": {\n\t\t\t\t\t\tKind: &structpb.Value_BoolValue{\n\t\t\t\t\t\t\tBoolValue: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tjson:          `{\"foo_bar\":true}`,\n\t\t\tskipUnmarshal: true,\n\t\t},\n\n\t\t{\n\t\t\tdata: wrapperspb.Bool(true),\n\t\t\tjson: \"true\",\n\t\t},\n\t\t{\n\t\t\tdata: wrapperspb.Double(123.456),\n\t\t\tjson: \"123.456\",\n\t\t},\n\t\t{\n\t\t\tdata: wrapperspb.Float(123.456),\n\t\t\tjson: \"123.456\",\n\t\t},\n\t\t{\n\t\t\tdata: wrapperspb.Int32(-123),\n\t\t\tjson: \"-123\",\n\t\t},\n\t\t{\n\t\t\tdata: wrapperspb.Int64(-123),\n\t\t\tjson: `\"-123\"`,\n\t\t},\n\t\t{\n\t\t\tdata: wrapperspb.UInt32(123),\n\t\t\tjson: \"123\",\n\t\t},\n\t\t{\n\t\t\tdata: wrapperspb.UInt64(123),\n\t\t\tjson: `\"123\"`,\n\t\t},\n\t\t// TODO(yugui) Add other well-known types once jsonpb supports them\n\t}\n)\n\nfunc TestJSONPbUnmarshalNullField(t *testing.T) {\n\tvar out map[string]interface{}\n\n\tconst json = `{\"foo\": null}`\n\tmarshaler := &runtime.JSONPb{}\n\tif err := marshaler.Unmarshal([]byte(json), &out); err != nil {\n\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t}\n\n\tvalue, hasKey := out[\"foo\"]\n\tif !hasKey {\n\t\tt.Fatalf(\"unmarshaled map did not have key 'foo'\")\n\t}\n\tif value != nil {\n\t\tt.Fatalf(\"unexpected value: %v\", value)\n\t}\n}\n\nfunc TestJSONPbMarshalResponseBodies(t *testing.T) {\n\tmarshaler := &runtime.JSONPb{}\n\tfor i, spec := range []struct {\n\t\tinput           interface{}\n\t\temitUnpopulated bool\n\t\tverifier        func(*testing.T, interface{}, []byte)\n\t}{\n\t\t{\n\t\t\tinput: &examplepb.ResponseBodyOut{\n\t\t\t\tResponse: &examplepb.ResponseBodyOut_Response{Data: \"abcdef\"},\n\t\t\t},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out examplepb.ResponseBodyOut\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, &out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\temitUnpopulated: true,\n\t\t\tinput:           &examplepb.ResponseBodyOut{},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out examplepb.ResponseBodyOut\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, &out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tinput: &examplepb.RepeatedResponseBodyOut_Response{},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out examplepb.RepeatedResponseBodyOut_Response\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, &out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\temitUnpopulated: true,\n\t\t\tinput:           &examplepb.RepeatedResponseBodyOut_Response{},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out examplepb.RepeatedResponseBodyOut_Response\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, &out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tinput: ([]*examplepb.RepeatedResponseBodyOut_Response)(nil),\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out []*examplepb.RepeatedResponseBodyOut_Response\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\temitUnpopulated: true,\n\t\t\tinput:           ([]*examplepb.RepeatedResponseBodyOut_Response)(nil),\n\t\t\tverifier: func(t *testing.T, _ interface{}, json []byte) {\n\t\t\t\tvar out []*examplepb.RepeatedResponseBodyOut_Response\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff([]*examplepb.RepeatedResponseBodyOut_Response{}, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tinput: []*examplepb.RepeatedResponseBodyOut_Response{},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out []*examplepb.RepeatedResponseBodyOut_Response\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tinput: []string{\"something\"},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out []string\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tinput: []string{},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out []string\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tinput: ([]string)(nil),\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out []string\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\temitUnpopulated: true,\n\t\t\tinput:           ([]string)(nil),\n\t\t\tverifier: func(t *testing.T, _ interface{}, json []byte) {\n\t\t\t\tvar out []string\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff([]string{}, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tinput: []*examplepb.RepeatedResponseBodyOut_Response{\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tData: \"abc\",\n\t\t\t\t\tType: examplepb.RepeatedResponseBodyOut_Response_A,\n\t\t\t\t},\n\t\t\t},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out []*examplepb.RepeatedResponseBodyOut_Response\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\temitUnpopulated: true,\n\t\t\tinput: []*examplepb.RepeatedResponseBodyOut_Response{\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tData: \"abc\",\n\t\t\t\t\tType: examplepb.RepeatedResponseBodyOut_Response_B,\n\t\t\t\t},\n\t\t\t},\n\t\t\tverifier: func(t *testing.T, input interface{}, json []byte) {\n\t\t\t\tvar out []*examplepb.RepeatedResponseBodyOut_Response\n\t\t\t\terr := marshaler.Unmarshal(json, &out)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t\t}\n\t\t\t\tdiff := cmp.Diff(input, out, protocmp.Transform())\n\t\t\t\tif diff != \"\" {\n\t\t\t\t\tt.Errorf(\"json not equal:\\n%s\", diff)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t} {\n\n\t\tt.Run(strconv.Itoa(i), func(t *testing.T) {\n\t\t\tm := runtime.JSONPb{\n\t\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\t\tEmitUnpopulated: spec.emitUnpopulated,\n\t\t\t\t},\n\t\t\t}\n\t\t\tval := spec.input\n\t\t\tbuf, err := m.Marshal(val)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"m.Marshal(%v) failed with %v; want success; spec=%v\", val, err, spec)\n\t\t\t}\n\t\t\tif spec.verifier != nil {\n\t\t\t\tspec.verifier(t, spec.input, buf)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "runtime/marshal_proto.go",
    "content": "package runtime\n\nimport (\n\t\"errors\"\n\t\"io\"\n\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// ProtoMarshaller is a Marshaller which marshals/unmarshals into/from serialize proto bytes\ntype ProtoMarshaller struct{}\n\n// ContentType always returns \"application/octet-stream\".\nfunc (*ProtoMarshaller) ContentType(_ interface{}) string {\n\treturn \"application/octet-stream\"\n}\n\n// Marshal marshals \"value\" into Proto\nfunc (*ProtoMarshaller) Marshal(value interface{}) ([]byte, error) {\n\tmessage, ok := value.(proto.Message)\n\tif !ok {\n\t\treturn nil, errors.New(\"unable to marshal non proto field\")\n\t}\n\treturn proto.Marshal(message)\n}\n\n// Unmarshal unmarshals proto \"data\" into \"value\"\nfunc (*ProtoMarshaller) Unmarshal(data []byte, value interface{}) error {\n\tmessage, ok := value.(proto.Message)\n\tif !ok {\n\t\treturn errors.New(\"unable to unmarshal non proto field\")\n\t}\n\treturn proto.Unmarshal(data, message)\n}\n\n// NewDecoder returns a Decoder which reads proto stream from \"reader\".\nfunc (marshaller *ProtoMarshaller) NewDecoder(reader io.Reader) Decoder {\n\treturn DecoderFunc(func(value interface{}) error {\n\t\tbuffer, err := io.ReadAll(reader)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn marshaller.Unmarshal(buffer, value)\n\t})\n}\n\n// NewEncoder returns an Encoder which writes proto stream into \"writer\".\nfunc (marshaller *ProtoMarshaller) NewEncoder(writer io.Writer) Encoder {\n\treturn EncoderFunc(func(value interface{}) error {\n\t\tbuffer, err := marshaller.Marshal(value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := writer.Write(buffer); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn nil\n\t})\n}\n"
  },
  {
    "path": "runtime/marshal_proto_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n)\n\nvar message = &examplepb.ABitOfEverything{\n\tSingleNested:        &examplepb.ABitOfEverything_Nested{},\n\tRepeatedStringValue: nil,\n\tMappedStringValue:   nil,\n\tMappedNestedValue:   nil,\n\tRepeatedEnumValue:   nil,\n\tTimestampValue:      &timestamppb.Timestamp{},\n\tUuid:                \"6EC2446F-7E89-4127-B3E6-5C05E6BECBA7\",\n\tNested: []*examplepb.ABitOfEverything_Nested{\n\t\t{\n\t\t\tName:   \"foo\",\n\t\t\tAmount: 12345,\n\t\t},\n\t},\n\tUint64Value: 0xFFFFFFFFFFFFFFFF,\n\tEnumValue:   examplepb.NumericEnum_ONE,\n\tOneofValue: &examplepb.ABitOfEverything_OneofString{\n\t\tOneofString: \"bar\",\n\t},\n\tMapValue: map[string]examplepb.NumericEnum{\n\t\t\"a\": examplepb.NumericEnum_ONE,\n\t\t\"b\": examplepb.NumericEnum_ZERO,\n\t},\n}\n\nfunc TestProtoMarshalUnmarshal(t *testing.T) {\n\tmarshaller := runtime.ProtoMarshaller{}\n\n\t// Marshal\n\tbuffer, err := marshaller.Marshal(message)\n\tif err != nil {\n\t\tt.Fatalf(\"Marshalling returned error: %s\", err.Error())\n\t}\n\n\t// Unmarshal\n\tunmarshalled := &examplepb.ABitOfEverything{}\n\terr = marshaller.Unmarshal(buffer, unmarshalled)\n\tif err != nil {\n\t\tt.Fatalf(\"Unmarshalling returned error: %s\", err.Error())\n\t}\n\n\tif !proto.Equal(unmarshalled, message) {\n\t\tt.Errorf(\n\t\t\t\"Unmarshalled didn't match original message: (original = %v) != (unmarshalled = %v)\",\n\t\t\tunmarshalled,\n\t\t\tmessage,\n\t\t)\n\t}\n}\n\nfunc TestProtoEncoderDecodert(t *testing.T) {\n\tmarshaller := runtime.ProtoMarshaller{}\n\n\tvar buf bytes.Buffer\n\n\tencoder := marshaller.NewEncoder(&buf)\n\tdecoder := marshaller.NewDecoder(&buf)\n\n\t// Encode\n\terr := encoder.Encode(message)\n\tif err != nil {\n\t\tt.Fatalf(\"Encoding returned error: %s\", err.Error())\n\t}\n\n\t// Decode\n\tunencoded := &examplepb.ABitOfEverything{}\n\terr = decoder.Decode(unencoded)\n\tif err != nil {\n\t\tt.Fatalf(\"Unmarshalling returned error: %s\", err.Error())\n\t}\n\n\tif !proto.Equal(unencoded, message) {\n\t\tt.Errorf(\n\t\t\t\"Unencoded didn't match original message: (original = %v) != (unencoded = %v)\",\n\t\t\tunencoded,\n\t\t\tmessage,\n\t\t)\n\t}\n}\n"
  },
  {
    "path": "runtime/marshaler.go",
    "content": "package runtime\n\nimport (\n\t\"io\"\n)\n\n// Marshaler defines a conversion between byte sequence and gRPC payloads / fields.\ntype Marshaler interface {\n\t// Marshal marshals \"v\" into byte sequence.\n\tMarshal(v interface{}) ([]byte, error)\n\t// Unmarshal unmarshals \"data\" into \"v\".\n\t// \"v\" must be a pointer value.\n\tUnmarshal(data []byte, v interface{}) error\n\t// NewDecoder returns a Decoder which reads byte sequence from \"r\".\n\tNewDecoder(r io.Reader) Decoder\n\t// NewEncoder returns an Encoder which writes bytes sequence into \"w\".\n\tNewEncoder(w io.Writer) Encoder\n\t// ContentType returns the Content-Type which this marshaler is responsible for.\n\t// The parameter describes the type which is being marshalled, which can sometimes\n\t// affect the content type returned.\n\tContentType(v interface{}) string\n}\n\n// Decoder decodes a byte sequence\ntype Decoder interface {\n\tDecode(v interface{}) error\n}\n\n// Encoder encodes gRPC payloads / fields into byte sequence.\ntype Encoder interface {\n\tEncode(v interface{}) error\n}\n\n// DecoderFunc adapts an decoder function into Decoder.\ntype DecoderFunc func(v interface{}) error\n\n// Decode delegates invocations to the underlying function itself.\nfunc (f DecoderFunc) Decode(v interface{}) error { return f(v) }\n\n// EncoderFunc adapts an encoder function into Encoder\ntype EncoderFunc func(v interface{}) error\n\n// Encode delegates invocations to the underlying function itself.\nfunc (f EncoderFunc) Encode(v interface{}) error { return f(v) }\n\n// Delimited defines the streaming delimiter.\ntype Delimited interface {\n\t// Delimiter returns the record separator for the stream.\n\tDelimiter() []byte\n}\n\n// StreamContentType defines the streaming content type.\ntype StreamContentType interface {\n\t// StreamContentType returns the content type for a stream. This shares the\n\t// same behaviour as for `Marshaler.ContentType`, but is called, if present,\n\t// in the case of a streamed response.\n\tStreamContentType(v interface{}) string\n}\n"
  },
  {
    "path": "runtime/marshaler_registry.go",
    "content": "package runtime\n\nimport (\n\t\"errors\"\n\t\"mime\"\n\t\"net/http\"\n\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n)\n\n// MIMEWildcard is the fallback MIME type used for requests which do not match\n// a registered MIME type.\nconst MIMEWildcard = \"*\"\n\nvar (\n\tacceptHeader      = http.CanonicalHeaderKey(\"Accept\")\n\tcontentTypeHeader = http.CanonicalHeaderKey(\"Content-Type\")\n\n\tdefaultMarshaler = &HTTPBodyMarshaler{\n\t\tMarshaler: &JSONPb{\n\t\t\tMarshalOptions: protojson.MarshalOptions{\n\t\t\t\tEmitUnpopulated: true,\n\t\t\t},\n\t\t\tUnmarshalOptions: protojson.UnmarshalOptions{\n\t\t\t\tDiscardUnknown: true,\n\t\t\t},\n\t\t},\n\t}\n)\n\n// MarshalerForRequest returns the inbound/outbound marshalers for this request.\n// It checks the registry on the ServeMux for the MIME type set by the Content-Type header.\n// If it isn't set (or the request Content-Type is empty), checks for \"*\".\n// If there are multiple Content-Type headers set, choose the first one that it can\n// exactly match in the registry.\n// Otherwise, it follows the above logic for \"*\"/InboundMarshaler/OutboundMarshaler.\nfunc MarshalerForRequest(mux *ServeMux, r *http.Request) (inbound Marshaler, outbound Marshaler) {\n\tfor _, acceptVal := range r.Header[acceptHeader] {\n\t\tif m, ok := mux.marshalers.mimeMap[acceptVal]; ok {\n\t\t\toutbound = m\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfor _, contentTypeVal := range r.Header[contentTypeHeader] {\n\t\tcontentType, _, err := mime.ParseMediaType(contentTypeVal)\n\t\tif err != nil {\n\t\t\tgrpclog.Errorf(\"Failed to parse Content-Type %s: %v\", contentTypeVal, err)\n\t\t\tcontinue\n\t\t}\n\t\tif m, ok := mux.marshalers.mimeMap[contentType]; ok {\n\t\t\tinbound = m\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif inbound == nil {\n\t\tinbound = mux.marshalers.mimeMap[MIMEWildcard]\n\t}\n\tif outbound == nil {\n\t\toutbound = inbound\n\t}\n\n\treturn inbound, outbound\n}\n\n// marshalerRegistry is a mapping from MIME types to Marshalers.\ntype marshalerRegistry struct {\n\tmimeMap map[string]Marshaler\n}\n\n// add adds a marshaler for a case-sensitive MIME type string (\"*\" to match any\n// MIME type).\nfunc (m marshalerRegistry) add(mime string, marshaler Marshaler) error {\n\tif len(mime) == 0 {\n\t\treturn errors.New(\"empty MIME type\")\n\t}\n\n\tm.mimeMap[mime] = marshaler\n\n\treturn nil\n}\n\n// makeMarshalerMIMERegistry returns a new registry of marshalers.\n// It allows for a mapping of case-sensitive Content-Type MIME type string to runtime.Marshaler interfaces.\n//\n// For example, you could allow the client to specify the use of the runtime.JSONPb marshaler\n// with an \"application/jsonpb\" Content-Type and the use of the runtime.JSONBuiltin marshaler\n// with an \"application/json\" Content-Type.\n// \"*\" can be used to match any Content-Type.\n// This can be attached to a ServerMux with the marshaler option.\nfunc makeMarshalerMIMERegistry() marshalerRegistry {\n\treturn marshalerRegistry{\n\t\tmimeMap: map[string]Marshaler{\n\t\t\tMIMEWildcard: defaultMarshaler,\n\t\t},\n\t}\n}\n\n// WithMarshalerOption returns a ServeMuxOption which associates inbound and outbound\n// Marshalers to a MIME type in mux.\nfunc WithMarshalerOption(mime string, marshaler Marshaler) ServeMuxOption {\n\treturn func(mux *ServeMux) {\n\t\tif err := mux.marshalers.add(mime, marshaler); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "runtime/marshaler_registry_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n)\n\nfunc TestMarshalerForRequest(t *testing.T) {\n\tctx := context.Background()\n\tr, err := http.NewRequestWithContext(ctx, \"GET\", \"http://example.com\", nil)\n\tif err != nil {\n\t\tt.Fatalf(`http.NewRequest(\"GET\", \"http://example.com\", nil) failed with %v; want success`, err)\n\t}\n\n\tmux := runtime.NewServeMux()\n\n\tr.Header.Set(\"Accept\", \"application/x-out\")\n\tr.Header.Set(\"Content-Type\", \"application/x-in\")\n\tin, out := runtime.MarshalerForRequest(mux, r)\n\tif _, ok := in.(*runtime.HTTPBodyMarshaler); !ok {\n\t\tt.Errorf(\"in = %#v; want a runtime.HTTPBodyMarshaler\", in)\n\t}\n\tif _, ok := out.(*runtime.HTTPBodyMarshaler); !ok {\n\t\tt.Errorf(\"out = %#v; want a runtime.HTTPBodyMarshaler\", in)\n\t}\n\n\tmarshalers := []dummyMarshaler{0, 1, 2}\n\tspecs := []struct {\n\t\topt runtime.ServeMuxOption\n\n\t\twantIn  runtime.Marshaler\n\t\twantOut runtime.Marshaler\n\t}{\n\t\t// The option with wildcard overwrites the default configuration\n\t\t{\n\t\t\topt:     runtime.WithMarshalerOption(runtime.MIMEWildcard, &marshalers[0]),\n\t\t\twantIn:  &marshalers[0],\n\t\t\twantOut: &marshalers[0],\n\t\t},\n\t\t// You can specify a marshaler for a specific MIME type.\n\t\t// The output marshaler follows the input one unless specified.\n\t\t{\n\t\t\topt:     runtime.WithMarshalerOption(\"application/x-in\", &marshalers[1]),\n\t\t\twantIn:  &marshalers[1],\n\t\t\twantOut: &marshalers[1],\n\t\t},\n\t\t// You can also separately specify an output marshaler\n\t\t{\n\t\t\topt:     runtime.WithMarshalerOption(\"application/x-out\", &marshalers[2]),\n\t\t\twantIn:  &marshalers[1],\n\t\t\twantOut: &marshalers[2],\n\t\t},\n\t}\n\tfor i, spec := range specs {\n\t\tvar opts []runtime.ServeMuxOption\n\t\tfor _, s := range specs[:i+1] {\n\t\t\topts = append(opts, s.opt)\n\t\t}\n\t\tmux = runtime.NewServeMux(opts...)\n\n\t\tin, out = runtime.MarshalerForRequest(mux, r)\n\t\tif got, want := in, spec.wantIn; got != want {\n\t\t\tt.Errorf(\"in = %#v; want %#v\", got, want)\n\t\t}\n\t\tif got, want := out, spec.wantOut; got != want {\n\t\t\tt.Errorf(\"out = %#v; want %#v\", got, want)\n\t\t}\n\t}\n\n\tr.Header.Set(\"Content-Type\", \"application/x-in; charset=UTF-8\")\n\tin, out = runtime.MarshalerForRequest(mux, r)\n\tif got, want := in, &marshalers[1]; got != want {\n\t\tt.Errorf(\"in = %#v; want %#v\", got, want)\n\t}\n\tif got, want := out, &marshalers[2]; got != want {\n\t\tt.Errorf(\"out = %#v; want %#v\", got, want)\n\t}\n\n\tr.Header.Set(\"Content-Type\", \"application/x-another\")\n\tr.Header.Set(\"Accept\", \"application/x-another\")\n\tin, out = runtime.MarshalerForRequest(mux, r)\n\tif got, want := in, &marshalers[0]; got != want {\n\t\tt.Errorf(\"in = %#v; want %#v\", got, want)\n\t}\n\tif got, want := out, &marshalers[0]; got != want {\n\t\tt.Errorf(\"out = %#v; want %#v\", got, want)\n\t}\n}\n\ntype dummyMarshaler int\n\nfunc (dummyMarshaler) ContentType(_ interface{}) string { return \"\" }\nfunc (dummyMarshaler) Marshal(interface{}) ([]byte, error) {\n\treturn nil, errors.New(\"not implemented\")\n}\n\nfunc (dummyMarshaler) Unmarshal([]byte, interface{}) error {\n\treturn errors.New(\"not implemented\")\n}\n\nfunc (dummyMarshaler) NewDecoder(r io.Reader) runtime.Decoder {\n\treturn dummyDecoder{}\n}\nfunc (dummyMarshaler) NewEncoder(w io.Writer) runtime.Encoder {\n\treturn dummyEncoder{}\n}\n\nfunc (m dummyMarshaler) GoString() string {\n\treturn fmt.Sprintf(\"dummyMarshaler(%d)\", m)\n}\n\ntype dummyDecoder struct{}\n\nfunc (dummyDecoder) Decode(interface{}) error {\n\treturn errors.New(\"not implemented\")\n}\n\ntype dummyEncoder struct{}\n\nfunc (dummyEncoder) Encode(interface{}) error {\n\treturn errors.New(\"not implemented\")\n}\n"
  },
  {
    "path": "runtime/mux.go",
    "content": "package runtime\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/health/grpc_health_v1\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// UnescapingMode defines the behavior of ServeMux when unescaping path parameters.\ntype UnescapingMode int\n\nconst (\n\t// UnescapingModeLegacy is the default V2 behavior, which escapes the entire\n\t// path string before doing any routing.\n\tUnescapingModeLegacy UnescapingMode = iota\n\n\t// UnescapingModeAllExceptReserved unescapes all path parameters except RFC 6570\n\t// reserved characters.\n\tUnescapingModeAllExceptReserved\n\n\t// UnescapingModeAllExceptSlash unescapes URL path parameters except path\n\t// separators, which will be left as \"%2F\".\n\tUnescapingModeAllExceptSlash\n\n\t// UnescapingModeAllCharacters unescapes all URL path parameters.\n\tUnescapingModeAllCharacters\n\n\t// UnescapingModeDefault is the default escaping type.\n\t// TODO(v3): default this to UnescapingModeAllExceptReserved per grpc-httpjson-transcoding's\n\t// reference implementation\n\tUnescapingModeDefault = UnescapingModeLegacy\n)\n\nvar encodedPathSplitter = regexp.MustCompile(\"(/|%2F)\")\n\n// A HandlerFunc handles a specific pair of path pattern and HTTP method.\ntype HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string)\n\n// A Middleware handler wraps another HandlerFunc to do some pre- and/or post-processing of the request. This is used as an alternative to gRPC interceptors when using the direct-to-implementation\n// registration methods. It is generally recommended to use gRPC client or server interceptors instead\n// where possible.\ntype Middleware func(HandlerFunc) HandlerFunc\n\n// ServeMux is a request multiplexer for grpc-gateway.\n// It matches http requests to patterns and invokes the corresponding handler.\ntype ServeMux struct {\n\t// handlers maps HTTP method to a list of handlers.\n\thandlers                  map[string][]handler\n\tmiddlewares               []Middleware\n\tforwardResponseOptions    []func(context.Context, http.ResponseWriter, proto.Message) error\n\tforwardResponseRewriter   ForwardResponseRewriter\n\tmarshalers                marshalerRegistry\n\tincomingHeaderMatcher     HeaderMatcherFunc\n\toutgoingHeaderMatcher     HeaderMatcherFunc\n\toutgoingTrailerMatcher    HeaderMatcherFunc\n\tmetadataAnnotators        []func(context.Context, *http.Request) metadata.MD\n\terrorHandler              ErrorHandlerFunc\n\tstreamErrorHandler        StreamErrorHandlerFunc\n\troutingErrorHandler       RoutingErrorHandlerFunc\n\tdisablePathLengthFallback bool\n\tdisableHTTPMethodOverride bool\n\tunescapingMode            UnescapingMode\n\twriteContentLength        bool\n\tdisableChunkedEncoding    bool\n}\n\n// ServeMuxOption is an option that can be given to a ServeMux on construction.\ntype ServeMuxOption func(*ServeMux)\n\n// ForwardResponseRewriter is the signature of a function that is capable of rewriting messages\n// before they are forwarded in a unary, stream, or error response.\ntype ForwardResponseRewriter func(ctx context.Context, response proto.Message) (any, error)\n\n// WithForwardResponseRewriter returns a ServeMuxOption that allows for implementers to insert logic\n// that can rewrite the final response before it is forwarded.\n//\n// The response rewriter function is called during unary message forwarding, stream message\n// forwarding and when errors are being forwarded.\n//\n// NOTE: Using this option will likely make what is generated by `protoc-gen-openapiv2` incorrect.\n// Since this option involves making runtime changes to the response shape or type.\nfunc WithForwardResponseRewriter(fwdResponseRewriter ForwardResponseRewriter) ServeMuxOption {\n\treturn func(sm *ServeMux) {\n\t\tsm.forwardResponseRewriter = fwdResponseRewriter\n\t}\n}\n\n// WithForwardResponseOption returns a ServeMuxOption representing the forwardResponseOption.\n//\n// forwardResponseOption is an option that will be called on the relevant context.Context,\n// http.ResponseWriter, and proto.Message before every forwarded response.\n//\n// The message may be nil in the case where just a header is being sent.\nfunc WithForwardResponseOption(forwardResponseOption func(context.Context, http.ResponseWriter, proto.Message) error) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.forwardResponseOptions = append(serveMux.forwardResponseOptions, forwardResponseOption)\n\t}\n}\n\n// WithUnescapingMode sets the escaping type. See the definitions of UnescapingMode\n// for more information.\nfunc WithUnescapingMode(mode UnescapingMode) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.unescapingMode = mode\n\t}\n}\n\n// WithMiddlewares sets server middleware for all handlers. This is useful as an alternative to gRPC\n// interceptors when using the direct-to-implementation registration methods and cannot rely\n// on gRPC interceptors. It's recommended to use gRPC interceptors instead if possible.\nfunc WithMiddlewares(middlewares ...Middleware) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.middlewares = append(serveMux.middlewares, middlewares...)\n\t}\n}\n\n// WithDisableChunkedEncoding disables the Transfer-Encoding: chunked header\n// for streaming responses. This is useful for streaming implementations that use\n// Content-Length, which is mutually exclusive with Transfer-Encoding:chunked.\n// Note that this option will not automatically add Content-Length headers, so it should be used with caution.\nfunc WithDisableChunkedEncoding() ServeMuxOption {\n\treturn func(mux *ServeMux) {\n\t\tmux.disableChunkedEncoding = true\n\t}\n}\n\n// SetQueryParameterParser sets the query parameter parser, used to populate message from query parameters.\n// Configuring this will mean the generated OpenAPI output is no longer correct, and it should be\n// done with careful consideration.\nfunc SetQueryParameterParser(queryParameterParser QueryParameterParser) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tcurrentQueryParser = queryParameterParser\n\t}\n}\n\n// HeaderMatcherFunc checks whether a header key should be forwarded to/from gRPC context.\ntype HeaderMatcherFunc func(string) (string, bool)\n\n// DefaultHeaderMatcher is used to pass http request headers to/from gRPC context. This adds permanent HTTP header\n// keys (as specified by the IANA, e.g: Accept, Cookie, Host) to the gRPC metadata with the grpcgateway- prefix. If you want to know which headers are considered permanent, you can view the isPermanentHTTPHeader function.\n// HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata after removing the prefix 'Grpc-Metadata-'.\n// Other headers are not added to the gRPC metadata.\nfunc DefaultHeaderMatcher(key string) (string, bool) {\n\tswitch key = textproto.CanonicalMIMEHeaderKey(key); {\n\tcase isPermanentHTTPHeader(key):\n\t\treturn MetadataPrefix + key, true\n\tcase strings.HasPrefix(key, MetadataHeaderPrefix):\n\t\treturn key[len(MetadataHeaderPrefix):], true\n\t}\n\treturn \"\", false\n}\n\nfunc defaultOutgoingHeaderMatcher(key string) (string, bool) {\n\treturn fmt.Sprintf(\"%s%s\", MetadataHeaderPrefix, key), true\n}\n\nfunc defaultOutgoingTrailerMatcher(key string) (string, bool) {\n\treturn fmt.Sprintf(\"%s%s\", MetadataTrailerPrefix, key), true\n}\n\n// WithIncomingHeaderMatcher returns a ServeMuxOption representing a headerMatcher for incoming request to gateway.\n//\n// This matcher will be called with each header in http.Request. If matcher returns true, that header will be\n// passed to gRPC context. To transform the header before passing to gRPC context, matcher should return the modified header.\nfunc WithIncomingHeaderMatcher(fn HeaderMatcherFunc) ServeMuxOption {\n\tfor _, header := range fn.matchedMalformedHeaders() {\n\t\tgrpclog.Warningf(\"The configured forwarding filter would allow %q to be sent to the gRPC server, which will likely cause errors. See https://github.com/grpc/grpc-go/pull/4803#issuecomment-986093310 for more information.\", header)\n\t}\n\n\treturn func(mux *ServeMux) {\n\t\tmux.incomingHeaderMatcher = fn\n\t}\n}\n\n// matchedMalformedHeaders returns the malformed headers that would be forwarded to gRPC server.\nfunc (fn HeaderMatcherFunc) matchedMalformedHeaders() []string {\n\tif fn == nil {\n\t\treturn nil\n\t}\n\theaders := make([]string, 0)\n\tfor header := range malformedHTTPHeaders {\n\t\tout, accept := fn(header)\n\t\tif accept && isMalformedHTTPHeader(out) {\n\t\t\theaders = append(headers, out)\n\t\t}\n\t}\n\treturn headers\n}\n\n// WithOutgoingHeaderMatcher returns a ServeMuxOption representing a headerMatcher for outgoing response from gateway.\n//\n// This matcher will be called with each header in response header metadata. If matcher returns true, that header will be\n// passed to http response returned from gateway. To transform the header before passing to response,\n// matcher should return the modified header.\nfunc WithOutgoingHeaderMatcher(fn HeaderMatcherFunc) ServeMuxOption {\n\treturn func(mux *ServeMux) {\n\t\tmux.outgoingHeaderMatcher = fn\n\t}\n}\n\n// WithOutgoingTrailerMatcher returns a ServeMuxOption representing a headerMatcher for outgoing response from gateway.\n//\n// This matcher will be called with each header in response trailer metadata. If matcher returns true, that header will be\n// passed to http response returned from gateway. To transform the header before passing to response,\n// matcher should return the modified header.\nfunc WithOutgoingTrailerMatcher(fn HeaderMatcherFunc) ServeMuxOption {\n\treturn func(mux *ServeMux) {\n\t\tmux.outgoingTrailerMatcher = fn\n\t}\n}\n\n// WithMetadata returns a ServeMuxOption for passing metadata to a gRPC context.\n//\n// This can be used by services that need to read from http.Request and modify gRPC context. A common use case\n// is reading token from cookie and adding it in gRPC context.\nfunc WithMetadata(annotator func(context.Context, *http.Request) metadata.MD) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.metadataAnnotators = append(serveMux.metadataAnnotators, annotator)\n\t}\n}\n\n// WithErrorHandler returns a ServeMuxOption for configuring a custom error handler.\n//\n// This can be used to configure a custom error response.\nfunc WithErrorHandler(fn ErrorHandlerFunc) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.errorHandler = fn\n\t}\n}\n\n// WithStreamErrorHandler returns a ServeMuxOption that will use the given custom stream\n// error handler, which allows for customizing the error trailer for server-streaming\n// calls.\n//\n// For stream errors that occur before any response has been written, the mux's\n// ErrorHandler will be invoked. However, once data has been written, the errors must\n// be handled differently: they must be included in the response body. The response body's\n// final message will include the error details returned by the stream error handler.\nfunc WithStreamErrorHandler(fn StreamErrorHandlerFunc) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.streamErrorHandler = fn\n\t}\n}\n\n// WithRoutingErrorHandler returns a ServeMuxOption for configuring a custom error handler to  handle http routing errors.\n//\n// Method called for errors which can happen before gRPC route selected or executed.\n// The following error codes: StatusMethodNotAllowed StatusNotFound StatusBadRequest\nfunc WithRoutingErrorHandler(fn RoutingErrorHandlerFunc) ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.routingErrorHandler = fn\n\t}\n}\n\n// WithDisablePathLengthFallback returns a ServeMuxOption for disable path length fallback.\nfunc WithDisablePathLengthFallback() ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.disablePathLengthFallback = true\n\t}\n}\n\n// WithDisableHTTPMethodOverride returns a ServeMuxOption that disables the\n// X-HTTP-Method-Override header handling.\n//\n// When this option is used, the mux will no longer allow POST requests with\n// the X-HTTP-Method-Override header to override the HTTP method. The path\n// length fallback (POST with application/x-www-form-urlencoded falling back\n// to a matching GET handler) is not affected by this option.\nfunc WithDisableHTTPMethodOverride() ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.disableHTTPMethodOverride = true\n\t}\n}\n\n// WithWriteContentLength returns a ServeMuxOption to enable writing content length on non-streaming responses\nfunc WithWriteContentLength() ServeMuxOption {\n\treturn func(serveMux *ServeMux) {\n\t\tserveMux.writeContentLength = true\n\t}\n}\n\n// WithHealthEndpointAt returns a ServeMuxOption that will add an endpoint to the created ServeMux at the path specified by endpointPath.\n// When called the handler will forward the request to the upstream grpc service health check (defined in the\n// gRPC Health Checking Protocol).\n//\n// See here https://grpc-ecosystem.github.io/grpc-gateway/docs/operations/health_check/ for more information on how\n// to setup the protocol in the grpc server.\n//\n// If you define a service as query parameter, this will also be forwarded as service in the HealthCheckRequest.\nfunc WithHealthEndpointAt(healthCheckClient grpc_health_v1.HealthClient, endpointPath string) ServeMuxOption {\n\treturn func(s *ServeMux) {\n\t\t// error can be ignored since pattern is definitely valid\n\t\t_ = s.HandlePath(\n\t\t\thttp.MethodGet, endpointPath, func(w http.ResponseWriter, r *http.Request, _ map[string]string,\n\t\t\t) {\n\t\t\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\t\t\tannotatedContext, err := AnnotateContext(r.Context(), s, r, grpc_health_v1.Health_Check_FullMethodName, WithHTTPPathPattern(endpointPath))\n\t\t\t\tif err != nil {\n\t\t\t\t\ts.errorHandler(r.Context(), s, outboundMarshaler, w, r, err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tvar md ServerMetadata\n\t\t\t\tresp, err := healthCheckClient.Check(annotatedContext, &grpc_health_v1.HealthCheckRequest{\n\t\t\t\t\tService: r.URL.Query().Get(\"service\"),\n\t\t\t\t}, grpc.Header(&md.HeaderMD), grpc.Trailer(&md.TrailerMD))\n\t\t\t\tannotatedContext = NewServerMetadataContext(annotatedContext, md)\n\t\t\t\tif err != nil {\n\t\t\t\t\ts.errorHandler(annotatedContext, s, outboundMarshaler, w, r, err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\t\t\t\tif resp.GetStatus() != grpc_health_v1.HealthCheckResponse_SERVING {\n\t\t\t\t\tswitch resp.GetStatus() {\n\t\t\t\t\tcase grpc_health_v1.HealthCheckResponse_NOT_SERVING, grpc_health_v1.HealthCheckResponse_UNKNOWN:\n\t\t\t\t\t\terr = status.Error(codes.Unavailable, resp.String())\n\t\t\t\t\tcase grpc_health_v1.HealthCheckResponse_SERVICE_UNKNOWN:\n\t\t\t\t\t\terr = status.Error(codes.NotFound, resp.String())\n\t\t\t\t\t}\n\n\t\t\t\t\ts.errorHandler(annotatedContext, s, outboundMarshaler, w, r, err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t_ = outboundMarshaler.NewEncoder(w).Encode(resp)\n\t\t\t})\n\t}\n}\n\n// WithHealthzEndpoint returns a ServeMuxOption that will add a /healthz endpoint to the created ServeMux.\n//\n// See WithHealthEndpointAt for the general implementation.\nfunc WithHealthzEndpoint(healthCheckClient grpc_health_v1.HealthClient) ServeMuxOption {\n\treturn WithHealthEndpointAt(healthCheckClient, \"/healthz\")\n}\n\n// NewServeMux returns a new ServeMux whose internal mapping is empty.\nfunc NewServeMux(opts ...ServeMuxOption) *ServeMux {\n\tserveMux := &ServeMux{\n\t\thandlers:                make(map[string][]handler),\n\t\tforwardResponseOptions:  make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0),\n\t\tforwardResponseRewriter: func(ctx context.Context, response proto.Message) (any, error) { return response, nil },\n\t\tmarshalers:              makeMarshalerMIMERegistry(),\n\t\terrorHandler:            DefaultHTTPErrorHandler,\n\t\tstreamErrorHandler:      DefaultStreamErrorHandler,\n\t\troutingErrorHandler:     DefaultRoutingErrorHandler,\n\t\tunescapingMode:          UnescapingModeDefault,\n\t}\n\n\tfor _, opt := range opts {\n\t\topt(serveMux)\n\t}\n\n\tif serveMux.incomingHeaderMatcher == nil {\n\t\tserveMux.incomingHeaderMatcher = DefaultHeaderMatcher\n\t}\n\tif serveMux.outgoingHeaderMatcher == nil {\n\t\tserveMux.outgoingHeaderMatcher = defaultOutgoingHeaderMatcher\n\t}\n\tif serveMux.outgoingTrailerMatcher == nil {\n\t\tserveMux.outgoingTrailerMatcher = defaultOutgoingTrailerMatcher\n\t}\n\n\treturn serveMux\n}\n\n// Handle associates \"h\" to the pair of HTTP method and path pattern.\nfunc (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) {\n\tif len(s.middlewares) > 0 {\n\t\th = chainMiddlewares(s.middlewares)(h)\n\t}\n\ts.handlers[meth] = append([]handler{{pat: pat, h: h}}, s.handlers[meth]...)\n}\n\n// HandlePath allows users to configure custom path handlers.\n// refer: https://grpc-ecosystem.github.io/grpc-gateway/docs/operations/inject_router/\nfunc (s *ServeMux) HandlePath(meth string, pathPattern string, h HandlerFunc) error {\n\tcompiler, err := httprule.Parse(pathPattern)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"parsing path pattern: %w\", err)\n\t}\n\ttp := compiler.Compile()\n\tpattern, err := NewPattern(tp.Version, tp.OpCodes, tp.Pool, tp.Verb)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"creating new pattern: %w\", err)\n\t}\n\ts.Handle(meth, pattern, h)\n\treturn nil\n}\n\n// ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.URL.Path.\nfunc (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tctx := r.Context()\n\n\tpath := r.URL.Path\n\tif !strings.HasPrefix(path, \"/\") {\n\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\ts.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// TODO(v3): remove UnescapingModeLegacy\n\tif s.unescapingMode != UnescapingModeLegacy && r.URL.RawPath != \"\" {\n\t\tpath = r.URL.RawPath\n\t}\n\n\tif override := r.Header.Get(\"X-HTTP-Method-Override\"); override != \"\" && !s.disableHTTPMethodOverride && s.isPathLengthFallback(r) {\n\t\tif err := r.ParseForm(); err != nil {\n\t\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\t\tsterr := status.Error(codes.InvalidArgument, err.Error())\n\t\t\ts.errorHandler(ctx, s, outboundMarshaler, w, r, sterr)\n\t\t\treturn\n\t\t}\n\t\tr.Method = strings.ToUpper(override)\n\t}\n\n\tvar pathComponents []string\n\t// since in UnescapeModeLegacy, the URL will already have been fully unescaped, if we also split on \"%2F\"\n\t// in this escaping mode we would be double unescaping but in UnescapingModeAllCharacters, we still do as the\n\t// path is the RawPath (i.e. unescaped). That does mean that the behavior of this function will change its default\n\t// behavior when the UnescapingModeDefault gets changed from UnescapingModeLegacy to UnescapingModeAllExceptReserved\n\tif s.unescapingMode == UnescapingModeAllCharacters {\n\t\tpathComponents = encodedPathSplitter.Split(path[1:], -1)\n\t} else {\n\t\tpathComponents = strings.Split(path[1:], \"/\")\n\t}\n\n\tlastPathComponent := pathComponents[len(pathComponents)-1]\n\n\tfor _, h := range s.handlers[r.Method] {\n\t\t// If the pattern has a verb, explicitly look for a suffix in the last\n\t\t// component that matches a colon plus the verb. This allows us to\n\t\t// handle some cases that otherwise can't be correctly handled by the\n\t\t// former LastIndex case, such as when the verb literal itself contains\n\t\t// a colon. This should work for all cases that have run through the\n\t\t// parser because we know what verb we're looking for, however, there\n\t\t// are still some cases that the parser itself cannot disambiguate. See\n\t\t// the comment there if interested.\n\n\t\tvar verb string\n\t\tpatVerb := h.pat.Verb()\n\n\t\tidx := -1\n\t\tif patVerb != \"\" && strings.HasSuffix(lastPathComponent, \":\"+patVerb) {\n\t\t\tidx = len(lastPathComponent) - len(patVerb) - 1\n\t\t}\n\t\tif idx == 0 {\n\t\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\t\ts.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusNotFound)\n\t\t\treturn\n\t\t}\n\n\t\tcomps := make([]string, len(pathComponents))\n\t\tcopy(comps, pathComponents)\n\n\t\tif idx > 0 {\n\t\t\tcomps[len(comps)-1], verb = lastPathComponent[:idx], lastPathComponent[idx+1:]\n\t\t}\n\n\t\tpathParams, err := h.pat.MatchAndEscape(comps, verb, s.unescapingMode)\n\t\tif err != nil {\n\t\t\tvar mse MalformedSequenceError\n\t\t\tif ok := errors.As(err, &mse); ok {\n\t\t\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\t\t\ts.errorHandler(ctx, s, outboundMarshaler, w, r, &HTTPStatusError{\n\t\t\t\t\tHTTPStatus: http.StatusBadRequest,\n\t\t\t\t\tErr:        mse,\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\ts.handleHandler(h, w, r, pathParams)\n\t\treturn\n\t}\n\n\t// if no handler has found for the request, lookup for other methods\n\t// to handle POST -> GET fallback if the request is subject to path\n\t// length fallback.\n\t// Note we are not eagerly checking the request here as we want to return the\n\t// right HTTP status code, and we need to process the fallback candidates in\n\t// order to do that.\n\tfor m, handlers := range s.handlers {\n\t\tif m == r.Method {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, h := range handlers {\n\t\t\tvar verb string\n\t\t\tpatVerb := h.pat.Verb()\n\n\t\t\tidx := -1\n\t\t\tif patVerb != \"\" && strings.HasSuffix(lastPathComponent, \":\"+patVerb) {\n\t\t\t\tidx = len(lastPathComponent) - len(patVerb) - 1\n\t\t\t}\n\n\t\t\tcomps := make([]string, len(pathComponents))\n\t\t\tcopy(comps, pathComponents)\n\n\t\t\tif idx > 0 {\n\t\t\t\tcomps[len(comps)-1], verb = lastPathComponent[:idx], lastPathComponent[idx+1:]\n\t\t\t}\n\n\t\t\tpathParams, err := h.pat.MatchAndEscape(comps, verb, s.unescapingMode)\n\t\t\tif err != nil {\n\t\t\t\tvar mse MalformedSequenceError\n\t\t\t\tif ok := errors.As(err, &mse); ok {\n\t\t\t\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\t\t\t\ts.errorHandler(ctx, s, outboundMarshaler, w, r, &HTTPStatusError{\n\t\t\t\t\t\tHTTPStatus: http.StatusBadRequest,\n\t\t\t\t\t\tErr:        mse,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// X-HTTP-Method-Override is optional. Always allow fallback to POST.\n\t\t\t// Also, only consider POST -> GET fallbacks, and avoid falling back to\n\t\t\t// potentially dangerous operations like DELETE.\n\t\t\tif s.isPathLengthFallback(r) && m == http.MethodGet {\n\t\t\t\tif err := r.ParseForm(); err != nil {\n\t\t\t\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\t\t\t\tsterr := status.Error(codes.InvalidArgument, err.Error())\n\t\t\t\t\ts.errorHandler(ctx, s, outboundMarshaler, w, r, sterr)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ts.handleHandler(h, w, r, pathParams)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\t\t\ts.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusMethodNotAllowed)\n\t\t\treturn\n\t\t}\n\t}\n\n\t_, outboundMarshaler := MarshalerForRequest(s, r)\n\ts.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusNotFound)\n}\n\n// GetForwardResponseOptions returns the ForwardResponseOptions associated with this ServeMux.\nfunc (s *ServeMux) GetForwardResponseOptions() []func(context.Context, http.ResponseWriter, proto.Message) error {\n\treturn s.forwardResponseOptions\n}\n\nfunc (s *ServeMux) isPathLengthFallback(r *http.Request) bool {\n\treturn !s.disablePathLengthFallback && r.Method == \"POST\" && r.Header.Get(\"Content-Type\") == \"application/x-www-form-urlencoded\"\n}\n\ntype handler struct {\n\tpat Pattern\n\th   HandlerFunc\n}\n\nfunc (s *ServeMux) handleHandler(h handler, w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\th.h(w, r.WithContext(withHTTPPattern(r.Context(), h.pat)), pathParams)\n}\n\nfunc chainMiddlewares(mws []Middleware) Middleware {\n\treturn func(next HandlerFunc) HandlerFunc {\n\t\tfor i := len(mws); i > 0; i-- {\n\t\t\tnext = mws[i-1](next)\n\t\t}\n\t\treturn next\n\t}\n}\n"
  },
  {
    "path": "runtime/mux_internal_test.go",
    "content": "package runtime\n\nimport (\n\t\"sort\"\n\t\"testing\"\n)\n\nfunc TestWithIncomingHeaderMatcher_matchedMalformedHeaders(t *testing.T) {\n\ttests := []struct {\n\t\tname    string\n\t\tmatcher HeaderMatcherFunc\n\t\twant    []string\n\t}{\n\t\t{\n\t\t\t\"nil matcher returns nothing\",\n\t\t\tnil,\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"default matcher returns nothing\",\n\t\t\tDefaultHeaderMatcher,\n\t\t\tnil,\n\t\t},\n\t\t{\n\t\t\t\"passthrough matcher returns all malformed headers\",\n\t\t\tfunc(s string) (string, bool) {\n\t\t\t\treturn s, true\n\t\t\t},\n\t\t\t[]string{\"connection\"},\n\t\t},\n\t}\n\n\tsliceEqual := func(a, b []string) bool {\n\t\tif len(a) != len(b) {\n\t\t\treturn false\n\t\t}\n\t\tsort.Slice(a, func(i, j int) bool {\n\t\t\treturn a[i] < a[j]\n\t\t})\n\t\tsort.Slice(b, func(i, j int) bool {\n\t\t\treturn a[i] < a[j]\n\t\t})\n\t\tfor idx := range a {\n\t\t\tif a[idx] != b[idx] {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\n\tfor _, tt := range tests {\n\t\tout := tt.matcher.matchedMalformedHeaders()\n\t\tif !sliceEqual(tt.want, out) {\n\t\t\tt.Errorf(\"matchedMalformedHeaders not match; Want %v; got %v\",\n\t\t\t\ttt.want, out)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "runtime/mux_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/health/grpc_health_v1\"\n\t\"google.golang.org/grpc/status\"\n)\n\nfunc TestMuxServeHTTP(t *testing.T) {\n\ttype stubPattern struct {\n\t\tmethod string\n\t\tops    []int\n\t\tpool   []string\n\t\tverb   string\n\t}\n\tfor i, spec := range []struct {\n\t\tpatterns []stubPattern\n\n\t\treqMethod string\n\t\treqPath   string\n\t\theaders   map[string]string\n\n\t\trespStatus  int\n\t\trespContent string\n\n\t\tdisablePathLengthFallback bool\n\t\tunescapingMode            runtime.UnescapingMode\n\t}{\n\t\t{\n\t\t\tpatterns:   nil,\n\t\t\treqMethod:  \"GET\",\n\t\t\treqPath:    \"/\",\n\t\t\trespStatus: http.StatusNotFound,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod:   \"GET\",\n\t\t\treqPath:     \"/foo\",\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod:  \"GET\",\n\t\t\treqPath:    \"/bar\",\n\t\t\trespStatus: http.StatusNotFound,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpPush), 0},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod:   \"GET\",\n\t\t\treqPath:     \"/foo\",\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod:   \"POST\",\n\t\t\treqPath:     \"/foo\",\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"POST /foo\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod:  \"DELETE\",\n\t\t\treqPath:    \"/foo\",\n\t\t\trespStatus: http.StatusNotImplemented,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t\tverb:   \"archive\",\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod:  \"DELETE\",\n\t\t\treqPath:    \"/foo/bar:archive\",\n\t\t\trespStatus: http.StatusNotImplemented,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t},\n\t\t\trespStatus:                http.StatusNotImplemented,\n\t\t\tdisablePathLengthFallback: true,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t},\n\t\t\trespStatus:                http.StatusOK,\n\t\t\trespContent:               \"POST /foo\",\n\t\t\tdisablePathLengthFallback: true,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\":           \"application/x-www-form-urlencoded\",\n\t\t\t\t\"X-HTTP-Method-Override\": \"GET\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"DELETE\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"PUT\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"PATCH\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t},\n\t\t\trespStatus: http.StatusNotImplemented,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus: http.StatusNotImplemented,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t\tverb:   \"bar\",\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo:bar\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"POST /foo:bar\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t\tverb:   \"verb\",\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"GET\",\n\t\t\treqPath:   \"/foo/bar:verb\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo/{id=*}:verb\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"GET\",\n\t\t\treqPath:   \"/foo/bar\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo/{id=*}\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"GET\",\n\t\t\treqPath:   \"/foo/bar:123\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"GET /foo/{id=*}\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t\tverb:   \"verb\",\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo/bar:verb\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"POST /foo/{id=*}:verb\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0},\n\t\t\t\t\tpool:   []string{\"foo\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"foo\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus: http.StatusBadRequest,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\"},\n\t\t\t\t\tverb:   \"verb:subverb\",\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo/bar:verb:subverb\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:  http.StatusOK,\n\t\t\trespContent: \"POST /foo/{id=*}:verb:subverb\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops:    []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 1, int(utilities.OpCapture), 1, int(utilities.OpLitPush), 2},\n\t\t\t\t\tpool:   []string{\"foo\", \"id\", \"bar\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/foo/404%2fwith%2Fspace/bar\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:     http.StatusNotFound,\n\t\t\tunescapingMode: runtime.UnescapingModeLegacy,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpPush), 0,\n\t\t\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\t\t\tint(utilities.OpCapture), 1,\n\t\t\t\t\t\tint(utilities.OpLitPush), 2},\n\t\t\t\t\tpool: []string{\"foo\", \"id\", \"bar\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"GET\",\n\t\t\treqPath:   \"/foo/success%2fwith%2Fspace/bar\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:     http.StatusOK,\n\t\t\tunescapingMode: runtime.UnescapingModeAllExceptReserved,\n\t\t\trespContent:    \"GET /foo/{id=*}/bar\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpPush), 0,\n\t\t\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\t\t\tint(utilities.OpCapture), 1,\n\t\t\t\t\t\tint(utilities.OpLitPush), 2},\n\t\t\t\t\tpool: []string{\"foo\", \"id\", \"bar\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"GET\",\n\t\t\treqPath:   \"/foo/success%2fwith%2Fspace/bar\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:     http.StatusNotFound,\n\t\t\tunescapingMode: runtime.UnescapingModeAllCharacters,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpPush), 0,\n\t\t\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\t\t\tint(utilities.OpCapture), 1,\n\t\t\t\t\t\tint(utilities.OpLitPush), 2},\n\t\t\t\t\tpool: []string{\"foo\", \"id\", \"bar\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"GET\",\n\t\t\treqPath:   \"/foo/success%2fwith%2Fspace/bar\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:     http.StatusNotFound,\n\t\t\tunescapingMode: runtime.UnescapingModeLegacy,\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpPushM), 0,\n\t\t\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\t\t\tint(utilities.OpCapture), 1,\n\t\t\t\t\t},\n\t\t\t\t\tpool: []string{\"foo\", \"id\", \"bar\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"GET\",\n\t\t\treqPath:   \"/foo/success%2fwith%2Fspace\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:     http.StatusOK,\n\t\t\tunescapingMode: runtime.UnescapingModeAllExceptReserved,\n\t\t\trespContent:    \"GET /foo/{id=**}\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t\t\t\tint(utilities.OpPush), 0,\n\t\t\t\t\t\tint(utilities.OpConcatN), 2,\n\t\t\t\t\t\tint(utilities.OpCapture), 3,\n\t\t\t\t\t},\n\t\t\t\t\tpool: []string{\"api\", \"v1\", \"organizations\", \"name\"},\n\t\t\t\t\tverb: \"action\",\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/api/v1/\" + url.QueryEscape(\"organizations/foo\") + \":action\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:     http.StatusOK,\n\t\t\tunescapingMode: runtime.UnescapingModeAllCharacters,\n\t\t\trespContent:    \"POST /api/v1/{name=organizations/*}:action\",\n\t\t},\n\t\t{\n\t\t\tpatterns: []stubPattern{\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t\t\t},\n\t\t\t\t\tpool: []string{\"api\", \"v1\", \"organizations\"},\n\t\t\t\t\tverb: \"verb\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t\t\t},\n\t\t\t\t\tpool: []string{\"api\", \"v1\", \"organizations\"},\n\t\t\t\t\tverb: \"\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tops: []int{\n\t\t\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t\t\t},\n\t\t\t\t\tpool: []string{\"api\", \"v1\", \"dummies\"},\n\t\t\t\t\tverb: \"verb\",\n\t\t\t\t},\n\t\t\t},\n\t\t\treqMethod: \"POST\",\n\t\t\treqPath:   \"/api/v1/organizations:verb\",\n\t\t\theaders: map[string]string{\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\trespStatus:     http.StatusOK,\n\t\t\tunescapingMode: runtime.UnescapingModeAllCharacters,\n\t\t\trespContent:    \"POST /api/v1/organizations:verb\",\n\t\t},\n\t} {\n\t\tt.Run(strconv.Itoa(i), func(t *testing.T) {\n\t\t\tvar opts []runtime.ServeMuxOption\n\t\t\topts = append(opts, runtime.WithUnescapingMode(spec.unescapingMode))\n\t\t\tif spec.disablePathLengthFallback {\n\t\t\t\topts = append(opts,\n\t\t\t\t\truntime.WithDisablePathLengthFallback(),\n\t\t\t\t)\n\t\t\t}\n\t\t\tmux := runtime.NewServeMux(opts...)\n\t\t\tfor _, p := range spec.patterns {\n\t\t\t\tfunc(p stubPattern) {\n\t\t\t\t\tpat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatalf(\"runtime.NewPattern(1, %#v, %#v, %q) failed with %v; want success\", p.ops, p.pool, p.verb, err)\n\t\t\t\t\t}\n\t\t\t\t\tmux.Handle(p.method, pat, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\t\t\t\t\t_, _ = fmt.Fprintf(w, \"%s %s\", p.method, pat.String())\n\t\t\t\t\t})\n\t\t\t\t}(p)\n\t\t\t}\n\n\t\t\treqUrl := fmt.Sprintf(\"https://host.example%s\", spec.reqPath)\n\t\t\tctx := context.Background()\n\t\t\tr, err := http.NewRequestWithContext(ctx, spec.reqMethod, reqUrl, bytes.NewReader(nil))\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"http.NewRequest(%q, %q, nil) failed with %v; want success\", spec.reqMethod, reqUrl, err)\n\t\t\t}\n\t\t\tfor name, value := range spec.headers {\n\t\t\t\tr.Header.Set(name, value)\n\t\t\t}\n\t\t\tw := httptest.NewRecorder()\n\t\t\tmux.ServeHTTP(w, r)\n\n\t\t\tif got, want := w.Code, spec.respStatus; got != want {\n\t\t\t\tt.Errorf(\"w.Code = %d; want %d; patterns=%v; req=%v\", got, want, spec.patterns, r)\n\t\t\t}\n\t\t\tif spec.respContent != \"\" {\n\t\t\t\tif got, want := w.Body.String(), spec.respContent; got != want {\n\t\t\t\t\tt.Errorf(\"w.Body = %q; want %q; patterns=%v; req=%v\", got, want, spec.patterns, r)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestServeHTTP_WithMethodOverrideAndFormParsing(t *testing.T) {\n\tr := httptest.NewRequest(\"POST\", \"/foo\", strings.NewReader(\"bar=hoge\"))\n\tr.Header.Set(\"Content-Type\", \"application/x-www-form-urlencoded\")\n\tr.Header.Set(\"X-HTTP-Method-Override\", \"GET\")\n\tw := httptest.NewRecorder()\n\n\truntime.NewServeMux().ServeHTTP(w, r)\n\n\tif r.FormValue(\"bar\") != \"hoge\" {\n\t\tt.Error(\"form is not parsed\")\n\t}\n}\n\nvar defaultHeaderMatcherTests = []struct {\n\tname     string\n\tin       string\n\toutValue string\n\toutValid bool\n}{\n\t{\n\t\t\"permanent HTTP header should return prefixed\",\n\t\t\"Accept\",\n\t\t\"grpcgateway-Accept\",\n\t\ttrue,\n\t},\n\t{\n\t\t\"key prefixed with MetadataHeaderPrefix should return without the prefix\",\n\t\t\"Grpc-Metadata-Custom-Header\",\n\t\t\"Custom-Header\",\n\t\ttrue,\n\t},\n\t{\n\t\t\"non-permanent HTTP header key without prefix should not return\",\n\t\t\"Custom-Header\",\n\t\t\"\",\n\t\tfalse,\n\t},\n}\n\nfunc TestDefaultHeaderMatcher(t *testing.T) {\n\tfor _, tt := range defaultHeaderMatcherTests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tout, valid := runtime.DefaultHeaderMatcher(tt.in)\n\t\t\tif out != tt.outValue {\n\t\t\t\tt.Errorf(\"got %v, want %v\", out, tt.outValue)\n\t\t\t}\n\t\t\tif valid != tt.outValid {\n\t\t\t\tt.Errorf(\"got %v, want %v\", valid, tt.outValid)\n\t\t\t}\n\t\t})\n\t}\n}\n\nvar defaultRouteMatcherTests = []struct {\n\tname   string\n\tmethod string\n\tpath   string\n\tvalid  bool\n}{\n\t{\n\t\t\"Test route /\",\n\t\t\"GET\",\n\t\t\"/\",\n\t\ttrue,\n\t},\n\t{\n\t\t\"Simple Endpoint\",\n\t\t\"GET\",\n\t\t\"/v1/{bucket}/do:action\",\n\t\ttrue,\n\t},\n\t{\n\t\t\"Complex Endpoint\",\n\t\t\"POST\",\n\t\t\"/v1/b/{bucket_name=buckets/*}/o/{name}\",\n\t\ttrue,\n\t},\n\t{\n\t\t\"Wildcard Endpoint\",\n\t\t\"GET\",\n\t\t\"/v1/endpoint/*\",\n\t\ttrue,\n\t},\n\t{\n\t\t\"Invalid Endpoint\",\n\t\t\"POST\",\n\t\t\"v1/b/:name/do\",\n\t\tfalse,\n\t},\n}\n\nfunc TestServeMux_HandlePath(t *testing.T) {\n\tmux := runtime.NewServeMux()\n\ttestFn := func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t}\n\tfor _, tt := range defaultRouteMatcherTests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\terr := mux.HandlePath(tt.method, tt.path, testFn)\n\t\t\tif tt.valid && err != nil {\n\t\t\t\tt.Errorf(\"The route %v with method %v and path %v invalid, got %v\", tt.name, tt.method, tt.path, err)\n\t\t\t}\n\t\t\tif !tt.valid && err == nil {\n\t\t\t\tt.Errorf(\"The route %v with method %v and path %v should be invalid\", tt.name, tt.method, tt.path)\n\t\t\t}\n\t\t})\n\t}\n}\n\nvar healthCheckTests = []struct {\n\tname           string\n\tcode           codes.Code\n\tstatus         grpc_health_v1.HealthCheckResponse_ServingStatus\n\thttpStatusCode int\n}{\n\t{\n\t\t\"Test grpc error code\",\n\t\tcodes.NotFound,\n\t\tgrpc_health_v1.HealthCheckResponse_UNKNOWN,\n\t\thttp.StatusNotFound,\n\t},\n\t{\n\t\t\"Test HealthCheckResponse_SERVING\",\n\t\tcodes.OK,\n\t\tgrpc_health_v1.HealthCheckResponse_SERVING,\n\t\thttp.StatusOK,\n\t},\n\t{\n\t\t\"Test HealthCheckResponse_NOT_SERVING\",\n\t\tcodes.OK,\n\t\tgrpc_health_v1.HealthCheckResponse_NOT_SERVING,\n\t\thttp.StatusServiceUnavailable,\n\t},\n\t{\n\t\t\"Test HealthCheckResponse_UNKNOWN\",\n\t\tcodes.OK,\n\t\tgrpc_health_v1.HealthCheckResponse_UNKNOWN,\n\t\thttp.StatusServiceUnavailable,\n\t},\n\t{\n\t\t\"Test HealthCheckResponse_SERVICE_UNKNOWN\",\n\t\tcodes.OK,\n\t\tgrpc_health_v1.HealthCheckResponse_SERVICE_UNKNOWN,\n\t\thttp.StatusNotFound,\n\t},\n}\n\nfunc TestWithHealthzEndpoint_codes(t *testing.T) {\n\tfor _, tt := range healthCheckTests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tmux := runtime.NewServeMux(runtime.WithHealthzEndpoint(&dummyHealthCheckClient{status: tt.status, code: tt.code}))\n\n\t\t\tr := httptest.NewRequest(http.MethodGet, \"/healthz\", nil)\n\t\t\trr := httptest.NewRecorder()\n\n\t\t\tmux.ServeHTTP(rr, r)\n\n\t\t\tif rr.Code != tt.httpStatusCode {\n\t\t\t\tt.Errorf(\n\t\t\t\t\t\"result http status code for grpc code %q and status %q should be %d, got %d\",\n\t\t\t\t\ttt.code, tt.status, tt.httpStatusCode, rr.Code,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestWithHealthEndpointAt_consistentWithHealthz(t *testing.T) {\n\tconst endpointPath = \"/healthz\"\n\n\tr := httptest.NewRequest(http.MethodGet, endpointPath, nil)\n\n\tfor _, tt := range healthCheckTests {\n\t\ttt := tt\n\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tclient := &dummyHealthCheckClient{\n\t\t\t\tstatus: tt.status,\n\t\t\t\tcode:   tt.code,\n\t\t\t}\n\n\t\t\tw := httptest.NewRecorder()\n\n\t\t\truntime.NewServeMux(\n\t\t\t\truntime.WithHealthEndpointAt(client, endpointPath),\n\t\t\t).ServeHTTP(w, r)\n\n\t\t\trefW := httptest.NewRecorder()\n\n\t\t\truntime.NewServeMux(\n\t\t\t\truntime.WithHealthzEndpoint(client),\n\t\t\t).ServeHTTP(refW, r)\n\n\t\t\tif w.Code != refW.Code {\n\t\t\t\tt.Errorf(\n\t\t\t\t\t\"result http status code for grpc code %q and status %q should be equal to %d, but got %d\",\n\t\t\t\t\ttt.code, tt.status, refW.Code, w.Code,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestWithHealthzEndpoint_serviceParam(t *testing.T) {\n\tservice := \"test\"\n\n\t// trigger error to output service in body\n\tdummyClient := dummyHealthCheckClient{status: grpc_health_v1.HealthCheckResponse_UNKNOWN, code: codes.Unknown}\n\tmux := runtime.NewServeMux(runtime.WithHealthzEndpoint(&dummyClient))\n\n\tr := httptest.NewRequest(http.MethodGet, \"/healthz?service=\"+service, nil)\n\trr := httptest.NewRecorder()\n\n\tmux.ServeHTTP(rr, r)\n\n\tif !strings.Contains(rr.Body.String(), service) {\n\t\tt.Errorf(\n\t\t\t\"service query parameter should be translated to HealthCheckRequest: expected %s to contain %s\",\n\t\t\trr.Body.String(), service,\n\t\t)\n\t}\n}\n\nfunc TestWithHealthzEndpoint_header(t *testing.T) {\n\tfor _, tt := range healthCheckTests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tmux := runtime.NewServeMux(runtime.WithHealthzEndpoint(&dummyHealthCheckClient{status: tt.status, code: tt.code}))\n\n\t\t\tr := httptest.NewRequest(http.MethodGet, \"/healthz\", nil)\n\t\t\trr := httptest.NewRecorder()\n\n\t\t\tmux.ServeHTTP(rr, r)\n\n\t\t\tif actualHeader := rr.Header().Get(\"Content-Type\"); actualHeader != \"application/json\" {\n\t\t\t\tt.Errorf(\n\t\t\t\t\t\"result http header Content-Type for grpc code %q and status %q should be application/json, got %s\",\n\t\t\t\t\ttt.code, tt.status, actualHeader,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n}\n\nvar _ grpc_health_v1.HealthClient = (*dummyHealthCheckClient)(nil)\n\ntype dummyHealthCheckClient struct {\n\tstatus grpc_health_v1.HealthCheckResponse_ServingStatus\n\tcode   codes.Code\n}\n\nfunc (g *dummyHealthCheckClient) Check(ctx context.Context, r *grpc_health_v1.HealthCheckRequest, opts ...grpc.CallOption) (*grpc_health_v1.HealthCheckResponse, error) {\n\tif g.code != codes.OK {\n\t\treturn nil, status.Error(g.code, r.GetService())\n\t}\n\n\treturn &grpc_health_v1.HealthCheckResponse{Status: g.status}, nil\n}\n\nfunc (g *dummyHealthCheckClient) Watch(ctx context.Context, r *grpc_health_v1.HealthCheckRequest, opts ...grpc.CallOption) (grpc_health_v1.Health_WatchClient, error) {\n\treturn nil, status.Error(codes.Unimplemented, \"unimplemented\")\n}\nfunc (g *dummyHealthCheckClient) List(ctx context.Context, r *grpc_health_v1.HealthListRequest, opts ...grpc.CallOption) (*grpc_health_v1.HealthListResponse, error) {\n\treturn nil, status.Error(codes.Unimplemented, \"unimplemented\")\n}\n\nfunc TestServeMux_HandleMiddlewares(t *testing.T) {\n\tvar mws []int\n\tmux := runtime.NewServeMux(runtime.WithMiddlewares(\n\t\tfunc(next runtime.HandlerFunc) runtime.HandlerFunc {\n\t\t\treturn func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\t\t\tmws = append(mws, 1)\n\t\t\t\tnext(w, r, pathParams)\n\t\t\t}\n\t\t},\n\t\tfunc(next runtime.HandlerFunc) runtime.HandlerFunc {\n\t\t\treturn func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\t\t\tmws = append(mws, 2)\n\t\t\t\tnext(w, r, pathParams)\n\t\t\t}\n\t\t},\n\t))\n\terr := mux.HandlePath(\"GET\", \"/test\", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\tif len(mws) == 0 {\n\t\t\tt.Errorf(\"middlewares not called\")\n\t\t} else if mws[0] != 1 {\n\t\t\tt.Errorf(\"first middleware is not called first\")\n\t\t} else if mws[1] != 2 {\n\t\t\tt.Errorf(\"second middleware is not called the second\")\n\t\t}\n\t})\n\tif err != nil {\n\t\tt.Errorf(\"The route test with method GET and path /test invalid, got %v\", err)\n\t}\n\n\tr := httptest.NewRequest(\"GET\", \"/test\", nil)\n\tw := httptest.NewRecorder()\n\tmux.ServeHTTP(w, r)\n\tif w.Code != 200 {\n\t\tt.Errorf(\"request not processed\")\n\t}\n}\n\nfunc TestServeMux_InjectPattern(t *testing.T) {\n\tmux := runtime.NewServeMux()\n\terr := mux.HandlePath(\"GET\", \"/test\", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\tp, ok := runtime.HTTPPattern(r.Context())\n\t\tif !ok {\n\t\t\tt.Errorf(\"pattern is not injected\")\n\t\t}\n\t\tif p.String() != \"/test\" {\n\t\t\tt.Errorf(\"pattern not /test\")\n\t\t}\n\t})\n\tif err != nil {\n\t\tt.Errorf(\"The route test with method GET and path /test invalid, got %v\", err)\n\t}\n\n\tr := httptest.NewRequest(\"GET\", \"/test\", nil)\n\tw := httptest.NewRecorder()\n\tmux.ServeHTTP(w, r)\n\tif w.Code != 200 {\n\t\tt.Errorf(\"request not processed\")\n\t}\n}\n\nfunc TestServeHTTP_WithDisableHTTPMethodOverride(t *testing.T) {\n\t// When WithDisableHTTPMethodOverride is set, X-HTTP-Method-Override\n\t// header should be ignored and the request should match the POST\n\t// handler directly.\n\tmux := runtime.NewServeMux(runtime.WithDisableHTTPMethodOverride())\n\n\tpat, err := runtime.NewPattern(1, []int{int(utilities.OpLitPush), 0}, []string{\"foo\"}, \"\")\n\tif err != nil {\n\t\tt.Fatalf(\"runtime.NewPattern failed: %v\", err)\n\t}\n\tmux.Handle(\"GET\", pat, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\t_, _ = fmt.Fprintf(w, \"GET /foo\")\n\t})\n\n\tpostPat, err := runtime.NewPattern(1, []int{int(utilities.OpLitPush), 0}, []string{\"foo\"}, \"\")\n\tif err != nil {\n\t\tt.Fatalf(\"runtime.NewPattern failed: %v\", err)\n\t}\n\tmux.Handle(\"POST\", postPat, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {\n\t\t_, _ = fmt.Fprintf(w, \"POST /foo\")\n\t})\n\n\tr := httptest.NewRequest(\"POST\", \"https://host.example/foo\", bytes.NewReader(nil))\n\tr.Header.Set(\"Content-Type\", \"application/x-www-form-urlencoded\")\n\tr.Header.Set(\"X-HTTP-Method-Override\", \"GET\")\n\tw := httptest.NewRecorder()\n\tmux.ServeHTTP(w, r)\n\n\tif got, want := w.Code, http.StatusOK; got != want {\n\t\tt.Errorf(\"w.Code = %d; want %d\", got, want)\n\t}\n\tif got, want := w.Body.String(), \"POST /foo\"; got != want {\n\t\tt.Errorf(\"w.Body = %q; want %q\", got, want)\n\t}\n}\n"
  },
  {
    "path": "runtime/pattern.go",
    "content": "package runtime\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nvar (\n\t// ErrNotMatch indicates that the given HTTP request path does not match to the pattern.\n\tErrNotMatch = errors.New(\"not match to the path pattern\")\n\t// ErrInvalidPattern indicates that the given definition of Pattern is not valid.\n\tErrInvalidPattern = errors.New(\"invalid pattern\")\n)\n\ntype MalformedSequenceError string\n\nfunc (e MalformedSequenceError) Error() string {\n\treturn \"malformed path escape \" + strconv.Quote(string(e))\n}\n\ntype op struct {\n\tcode    utilities.OpCode\n\toperand int\n}\n\n// Pattern is a template pattern of http request paths defined in\n// https://github.com/googleapis/googleapis/blob/master/google/api/http.proto\ntype Pattern struct {\n\t// ops is a list of operations\n\tops []op\n\t// pool is a constant pool indexed by the operands or vars.\n\tpool []string\n\t// vars is a list of variables names to be bound by this pattern\n\tvars []string\n\t// stacksize is the max depth of the stack\n\tstacksize int\n\t// tailLen is the length of the fixed-size segments after a deep wildcard\n\ttailLen int\n\t// verb is the VERB part of the path pattern. It is empty if the pattern does not have VERB part.\n\tverb string\n}\n\n// NewPattern returns a new Pattern from the given definition values.\n// \"ops\" is a sequence of op codes. \"pool\" is a constant pool.\n// \"verb\" is the verb part of the pattern. It is empty if the pattern does not have the part.\n// \"version\" must be 1 for now.\n// It returns an error if the given definition is invalid.\nfunc NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error) {\n\tif version != 1 {\n\t\tgrpclog.Errorf(\"unsupported version: %d\", version)\n\t\treturn Pattern{}, ErrInvalidPattern\n\t}\n\n\tl := len(ops)\n\tif l%2 != 0 {\n\t\tgrpclog.Errorf(\"odd number of ops codes: %d\", l)\n\t\treturn Pattern{}, ErrInvalidPattern\n\t}\n\n\tvar (\n\t\ttypedOps        []op\n\t\tstack, maxstack int\n\t\ttailLen         int\n\t\tpushMSeen       bool\n\t\tvars            []string\n\t)\n\tfor i := 0; i < l; i += 2 {\n\t\top := op{code: utilities.OpCode(ops[i]), operand: ops[i+1]}\n\t\tswitch op.code {\n\t\tcase utilities.OpNop:\n\t\t\tcontinue\n\t\tcase utilities.OpPush:\n\t\t\tif pushMSeen {\n\t\t\t\ttailLen++\n\t\t\t}\n\t\t\tstack++\n\t\tcase utilities.OpPushM:\n\t\t\tif pushMSeen {\n\t\t\t\tgrpclog.Error(\"pushM appears twice\")\n\t\t\t\treturn Pattern{}, ErrInvalidPattern\n\t\t\t}\n\t\t\tpushMSeen = true\n\t\t\tstack++\n\t\tcase utilities.OpLitPush:\n\t\t\tif op.operand < 0 || len(pool) <= op.operand {\n\t\t\t\tgrpclog.Errorf(\"negative literal index: %d\", op.operand)\n\t\t\t\treturn Pattern{}, ErrInvalidPattern\n\t\t\t}\n\t\t\tif pushMSeen {\n\t\t\t\ttailLen++\n\t\t\t}\n\t\t\tstack++\n\t\tcase utilities.OpConcatN:\n\t\t\tif op.operand <= 0 {\n\t\t\t\tgrpclog.Errorf(\"negative concat size: %d\", op.operand)\n\t\t\t\treturn Pattern{}, ErrInvalidPattern\n\t\t\t}\n\t\t\tstack -= op.operand\n\t\t\tif stack < 0 {\n\t\t\t\tgrpclog.Error(\"stack underflow\")\n\t\t\t\treturn Pattern{}, ErrInvalidPattern\n\t\t\t}\n\t\t\tstack++\n\t\tcase utilities.OpCapture:\n\t\t\tif op.operand < 0 || len(pool) <= op.operand {\n\t\t\t\tgrpclog.Errorf(\"variable name index out of bound: %d\", op.operand)\n\t\t\t\treturn Pattern{}, ErrInvalidPattern\n\t\t\t}\n\t\t\tv := pool[op.operand]\n\t\t\top.operand = len(vars)\n\t\t\tvars = append(vars, v)\n\t\t\tstack--\n\t\t\tif stack < 0 {\n\t\t\t\tgrpclog.Error(\"stack underflow\")\n\t\t\t\treturn Pattern{}, ErrInvalidPattern\n\t\t\t}\n\t\tdefault:\n\t\t\tgrpclog.Errorf(\"invalid opcode: %d\", op.code)\n\t\t\treturn Pattern{}, ErrInvalidPattern\n\t\t}\n\n\t\tif maxstack < stack {\n\t\t\tmaxstack = stack\n\t\t}\n\t\ttypedOps = append(typedOps, op)\n\t}\n\treturn Pattern{\n\t\tops:       typedOps,\n\t\tpool:      pool,\n\t\tvars:      vars,\n\t\tstacksize: maxstack,\n\t\ttailLen:   tailLen,\n\t\tverb:      verb,\n\t}, nil\n}\n\n// MustPattern is a helper function which makes it easier to call NewPattern in variable initialization.\nfunc MustPattern(p Pattern, err error) Pattern {\n\tif err != nil {\n\t\tgrpclog.Fatalf(\"Pattern initialization failed: %v\", err)\n\t}\n\treturn p\n}\n\n// MatchAndEscape examines components to determine if they match to a Pattern.\n// MatchAndEscape will return an error if no Patterns matched or if a pattern\n// matched but contained malformed escape sequences. If successful, the function\n// returns a mapping from field paths to their captured values.\nfunc (p Pattern) MatchAndEscape(components []string, verb string, unescapingMode UnescapingMode) (map[string]string, error) {\n\tif p.verb != verb {\n\t\tif p.verb != \"\" {\n\t\t\treturn nil, ErrNotMatch\n\t\t}\n\t\tif len(components) == 0 {\n\t\t\tcomponents = []string{\":\" + verb}\n\t\t} else {\n\t\t\tcomponents = append([]string{}, components...)\n\t\t\tcomponents[len(components)-1] += \":\" + verb\n\t\t}\n\t}\n\n\tvar pos int\n\tstack := make([]string, 0, p.stacksize)\n\tcaptured := make([]string, len(p.vars))\n\tl := len(components)\n\tfor _, op := range p.ops {\n\t\tvar err error\n\n\t\tswitch op.code {\n\t\tcase utilities.OpNop:\n\t\t\tcontinue\n\t\tcase utilities.OpPush, utilities.OpLitPush:\n\t\t\tif pos >= l {\n\t\t\t\treturn nil, ErrNotMatch\n\t\t\t}\n\t\t\tc := components[pos]\n\t\t\tif op.code == utilities.OpLitPush {\n\t\t\t\tif lit := p.pool[op.operand]; c != lit {\n\t\t\t\t\treturn nil, ErrNotMatch\n\t\t\t\t}\n\t\t\t} else if op.code == utilities.OpPush {\n\t\t\t\tif c, err = unescape(c, unescapingMode, false); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tstack = append(stack, c)\n\t\t\tpos++\n\t\tcase utilities.OpPushM:\n\t\t\tend := len(components)\n\t\t\tif end < pos+p.tailLen {\n\t\t\t\treturn nil, ErrNotMatch\n\t\t\t}\n\t\t\tend -= p.tailLen\n\t\t\tc := strings.Join(components[pos:end], \"/\")\n\t\t\tif c, err = unescape(c, unescapingMode, true); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tstack = append(stack, c)\n\t\t\tpos = end\n\t\tcase utilities.OpConcatN:\n\t\t\tn := op.operand\n\t\t\tl := len(stack) - n\n\t\t\tstack = append(stack[:l], strings.Join(stack[l:], \"/\"))\n\t\tcase utilities.OpCapture:\n\t\t\tn := len(stack) - 1\n\t\t\tcaptured[op.operand] = stack[n]\n\t\t\tstack = stack[:n]\n\t\t}\n\t}\n\tif pos < l {\n\t\treturn nil, ErrNotMatch\n\t}\n\tbindings := make(map[string]string)\n\tfor i, val := range captured {\n\t\tbindings[p.vars[i]] = val\n\t}\n\treturn bindings, nil\n}\n\n// MatchAndEscape examines components to determine if they match to a Pattern.\n// It will never perform per-component unescaping (see: UnescapingModeLegacy).\n// MatchAndEscape will return an error if no Patterns matched. If successful,\n// the function returns a mapping from field paths to their captured values.\n//\n// Deprecated: Use MatchAndEscape.\nfunc (p Pattern) Match(components []string, verb string) (map[string]string, error) {\n\treturn p.MatchAndEscape(components, verb, UnescapingModeDefault)\n}\n\n// Verb returns the verb part of the Pattern.\nfunc (p Pattern) Verb() string { return p.verb }\n\nfunc (p Pattern) String() string {\n\tvar stack []string\n\tfor _, op := range p.ops {\n\t\tswitch op.code {\n\t\tcase utilities.OpNop:\n\t\t\tcontinue\n\t\tcase utilities.OpPush:\n\t\t\tstack = append(stack, \"*\")\n\t\tcase utilities.OpLitPush:\n\t\t\tstack = append(stack, p.pool[op.operand])\n\t\tcase utilities.OpPushM:\n\t\t\tstack = append(stack, \"**\")\n\t\tcase utilities.OpConcatN:\n\t\t\tn := op.operand\n\t\t\tl := len(stack) - n\n\t\t\tstack = append(stack[:l], strings.Join(stack[l:], \"/\"))\n\t\tcase utilities.OpCapture:\n\t\t\tn := len(stack) - 1\n\t\t\tstack[n] = fmt.Sprintf(\"{%s=%s}\", p.vars[op.operand], stack[n])\n\t\t}\n\t}\n\tsegs := strings.Join(stack, \"/\")\n\tif p.verb != \"\" {\n\t\treturn fmt.Sprintf(\"/%s:%s\", segs, p.verb)\n\t}\n\treturn \"/\" + segs\n}\n\n/*\n * The following code is adopted and modified from Go's standard library\n * and carries the attached license.\n *\n *     Copyright 2009 The Go Authors. All rights reserved.\n *     Use of this source code is governed by a BSD-style\n *     license that can be found in the LICENSE file.\n */\n\n// ishex returns whether or not the given byte is a valid hex character\nfunc ishex(c byte) bool {\n\tswitch {\n\tcase '0' <= c && c <= '9':\n\t\treturn true\n\tcase 'a' <= c && c <= 'f':\n\t\treturn true\n\tcase 'A' <= c && c <= 'F':\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isRFC6570Reserved(c byte) bool {\n\tswitch c {\n\tcase '!', '#', '$', '&', '\\'', '(', ')', '*',\n\t\t'+', ',', '/', ':', ';', '=', '?', '@', '[', ']':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// unhex converts a hex point to the bit representation\nfunc unhex(c byte) byte {\n\tswitch {\n\tcase '0' <= c && c <= '9':\n\t\treturn c - '0'\n\tcase 'a' <= c && c <= 'f':\n\t\treturn c - 'a' + 10\n\tcase 'A' <= c && c <= 'F':\n\t\treturn c - 'A' + 10\n\t}\n\treturn 0\n}\n\n// shouldUnescapeWithMode returns true if the character is escapable with the\n// given mode\nfunc shouldUnescapeWithMode(c byte, mode UnescapingMode) bool {\n\tswitch mode {\n\tcase UnescapingModeAllExceptReserved:\n\t\tif isRFC6570Reserved(c) {\n\t\t\treturn false\n\t\t}\n\tcase UnescapingModeAllExceptSlash:\n\t\tif c == '/' {\n\t\t\treturn false\n\t\t}\n\tcase UnescapingModeAllCharacters:\n\t\treturn true\n\t}\n\treturn true\n}\n\n// unescape unescapes a path string using the provided mode\nfunc unescape(s string, mode UnescapingMode, multisegment bool) (string, error) {\n\t// TODO(v3): remove UnescapingModeLegacy\n\tif mode == UnescapingModeLegacy {\n\t\treturn s, nil\n\t}\n\n\tif !multisegment {\n\t\tmode = UnescapingModeAllCharacters\n\t}\n\n\t// Count %, check that they're well-formed.\n\tn := 0\n\tfor i := 0; i < len(s); {\n\t\tif s[i] == '%' {\n\t\t\tn++\n\t\t\tif i+2 >= len(s) || !ishex(s[i+1]) || !ishex(s[i+2]) {\n\t\t\t\ts = s[i:]\n\t\t\t\tif len(s) > 3 {\n\t\t\t\t\ts = s[:3]\n\t\t\t\t}\n\n\t\t\t\treturn \"\", MalformedSequenceError(s)\n\t\t\t}\n\t\t\ti += 3\n\t\t} else {\n\t\t\ti++\n\t\t}\n\t}\n\n\tif n == 0 {\n\t\treturn s, nil\n\t}\n\n\tvar t strings.Builder\n\tt.Grow(len(s))\n\tfor i := 0; i < len(s); i++ {\n\t\tswitch s[i] {\n\t\tcase '%':\n\t\t\tc := unhex(s[i+1])<<4 | unhex(s[i+2])\n\t\t\tif shouldUnescapeWithMode(c, mode) {\n\t\t\t\tt.WriteByte(c)\n\t\t\t\ti += 2\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfallthrough\n\t\tdefault:\n\t\t\tt.WriteByte(s[i])\n\t\t}\n\t}\n\n\treturn t.String(), nil\n}\n"
  },
  {
    "path": "runtime/pattern_test.go",
    "content": "package runtime\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n)\n\nconst (\n\tvalidVersion = 1\n\tanything     = 0\n)\n\nfunc TestNewPattern(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tops  []int\n\t\tpool []string\n\t\tverb string\n\n\t\tstackSizeWant, tailLenWant int\n\t}{\n\t\t{},\n\t\t{\n\t\t\tops:           []int{int(utilities.OpNop), anything},\n\t\t\tstackSizeWant: 0,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t\t{\n\t\t\tops:           []int{int(utilities.OpPush), anything},\n\t\t\tstackSizeWant: 1,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t\t{\n\t\t\tops:           []int{int(utilities.OpLitPush), 0},\n\t\t\tpool:          []string{\"abc\"},\n\t\t\tstackSizeWant: 1,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t\t{\n\t\t\tops:           []int{int(utilities.OpPushM), anything},\n\t\t\tstackSizeWant: 1,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t},\n\t\t\tstackSizeWant: 1,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 0,\n\t\t\t},\n\t\t\tpool:          []string{\"abc\"},\n\t\t\tstackSizeWant: 1,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpConcatN), 2,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t},\n\t\t\tpool:          []string{\"lit1\", \"lit2\", \"var1\"},\n\t\t\tstackSizeWant: 4,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t},\n\t\t\tpool:          []string{\"lit1\", \"lit2\", \"var1\"},\n\t\t\tstackSizeWant: 2,\n\t\t\ttailLenWant:   2,\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t\tint(utilities.OpConcatN), 3,\n\t\t\t\tint(utilities.OpLitPush), 3,\n\t\t\t\tint(utilities.OpCapture), 4,\n\t\t\t},\n\t\t\tpool:          []string{\"lit1\", \"lit2\", \"lit3\", \"lit4\", \"var1\"},\n\t\t\tstackSizeWant: 4,\n\t\t\ttailLenWant:   2,\n\t\t},\n\t\t{\n\t\t\tops:           []int{int(utilities.OpLitPush), 0},\n\t\t\tpool:          []string{\"abc\"},\n\t\t\tverb:          \"LOCK\",\n\t\t\tstackSizeWant: 1,\n\t\t\ttailLenWant:   0,\n\t\t},\n\t} {\n\t\tpat, err := NewPattern(validVersion, spec.ops, spec.pool, spec.verb)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) failed with %v; want success\", validVersion, spec.ops, spec.pool, spec.verb, err)\n\t\t\tcontinue\n\t\t}\n\t\tif got, want := pat.stacksize, spec.stackSizeWant; got != want {\n\t\t\tt.Errorf(\"pat.stacksize = %d; want %d\", got, want)\n\t\t}\n\t\tif got, want := pat.tailLen, spec.tailLenWant; got != want {\n\t\t\tt.Errorf(\"pat.stacksize = %d; want %d\", got, want)\n\t\t}\n\t}\n}\n\nfunc TestNewPatternWithWrongOp(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tops  []int\n\t\tpool []string\n\t\tverb string\n\t}{\n\t\t{\n\t\t\t// op code out of bound\n\t\t\tops: []int{-1, anything},\n\t\t},\n\t\t{\n\t\t\t// op code out of bound\n\t\t\tops: []int{int(utilities.OpEnd), 0},\n\t\t},\n\t\t{\n\t\t\t// odd number of items\n\t\t\tops: []int{int(utilities.OpPush)},\n\t\t},\n\t\t{\n\t\t\t// negative index\n\t\t\tops:  []int{int(utilities.OpLitPush), -1},\n\t\t\tpool: []string{\"abc\"},\n\t\t},\n\t\t{\n\t\t\t// index out of bound\n\t\t\tops:  []int{int(utilities.OpLitPush), 1},\n\t\t\tpool: []string{\"abc\"},\n\t\t},\n\t\t{\n\t\t\t// negative # of segments\n\t\t\tops:  []int{int(utilities.OpConcatN), -1},\n\t\t\tpool: []string{\"abc\"},\n\t\t},\n\t\t{\n\t\t\t// negative index\n\t\t\tops:  []int{int(utilities.OpCapture), -1},\n\t\t\tpool: []string{\"abc\"},\n\t\t},\n\t\t{\n\t\t\t// index out of bound\n\t\t\tops:  []int{int(utilities.OpCapture), 1},\n\t\t\tpool: []string{\"abc\"},\n\t\t},\n\t\t{\n\t\t\t// pushM appears twice\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t},\n\t\t\tpool: []string{\"abc\"},\n\t\t},\n\t} {\n\t\t_, err := NewPattern(validVersion, spec.ops, spec.pool, spec.verb)\n\t\tif err == nil {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) succeeded; want failure with %v\", validVersion, spec.ops, spec.pool, spec.verb, ErrInvalidPattern)\n\t\t\tcontinue\n\t\t}\n\t\tif !errors.Is(err, ErrInvalidPattern) {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) failed with %v; want failure with %v\", validVersion, spec.ops, spec.pool, spec.verb, err, ErrInvalidPattern)\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nfunc TestNewPatternWithStackUnderflow(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tops  []int\n\t\tpool []string\n\t\tverb string\n\t}{\n\t\t{\n\t\t\tops: []int{int(utilities.OpConcatN), 1},\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpCapture), 0},\n\t\t\tpool: []string{\"abc\"},\n\t\t},\n\t} {\n\t\t_, err := NewPattern(validVersion, spec.ops, spec.pool, spec.verb)\n\t\tif err == nil {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) succeeded; want failure with %v\", validVersion, spec.ops, spec.pool, spec.verb, ErrInvalidPattern)\n\t\t\tcontinue\n\t\t}\n\t\tif !errors.Is(err, ErrInvalidPattern) {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) failed with %v; want failure with %v\", validVersion, spec.ops, spec.pool, spec.verb, err, ErrInvalidPattern)\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nfunc TestMatch(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tops  []int\n\t\tpool []string\n\t\tverb string\n\n\t\tmatch    []string\n\t\tnotMatch []string\n\t}{\n\t\t{\n\t\t\tmatch:    []string{\"\"},\n\t\t\tnotMatch: []string{\"example\"},\n\t\t},\n\t\t{\n\t\t\tops:      []int{int(utilities.OpNop), anything},\n\t\t\tmatch:    []string{\"\"},\n\t\t\tnotMatch: []string{\"example\", \"path/to/example\"},\n\t\t},\n\t\t{\n\t\t\tops:      []int{int(utilities.OpPush), anything},\n\t\t\tmatch:    []string{\"abc\", \"def\"},\n\t\t\tnotMatch: []string{\"\", \"abc/def\"},\n\t\t},\n\t\t{\n\t\t\tops:      []int{int(utilities.OpLitPush), 0},\n\t\t\tpool:     []string{\"v1\"},\n\t\t\tmatch:    []string{\"v1\"},\n\t\t\tnotMatch: []string{\"\", \"v2\"},\n\t\t},\n\t\t{\n\t\t\tops:   []int{int(utilities.OpPushM), anything},\n\t\t\tmatch: []string{\"\", \"abc\", \"abc/def\", \"abc/def/ghi\"},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t},\n\t\t\tpool:  []string{\"tail\"},\n\t\t\tmatch: []string{\"tail\", \"abc/tail\", \"abc/def/tail\"},\n\t\t\tnotMatch: []string{\n\t\t\t\t\"\", \"abc\", \"abc/def\",\n\t\t\t\t\"tail/extra\", \"abc/tail/extra\", \"abc/def/tail/extra\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t},\n\t\t\tpool:  []string{\"v1\", \"bucket\", \"name\"},\n\t\t\tmatch: []string{\"v1/bucket/my-bucket\", \"v1/bucket/our-bucket\"},\n\t\t\tnotMatch: []string{\n\t\t\t\t\"\",\n\t\t\t\t\"v1\",\n\t\t\t\t\"v1/bucket\",\n\t\t\t\t\"v2/bucket/my-bucket\",\n\t\t\t\t\"v1/pubsub/my-topic\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpConcatN), 2,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t},\n\t\t\tpool: []string{\"v1\", \"o\", \"name\"},\n\t\t\tmatch: []string{\n\t\t\t\t\"v1/o\",\n\t\t\t\t\"v1/o/my-bucket\",\n\t\t\t\t\"v1/o/our-bucket\",\n\t\t\t\t\"v1/o/my-bucket/dir\",\n\t\t\t\t\"v1/o/my-bucket/dir/dir2\",\n\t\t\t\t\"v1/o/my-bucket/dir/dir2/obj\",\n\t\t\t},\n\t\t\tnotMatch: []string{\n\t\t\t\t\"\",\n\t\t\t\t\"v1\",\n\t\t\t\t\"v2/o/my-bucket\",\n\t\t\t\t\"v1/b/my-bucket\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 2,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t\tint(utilities.OpLitPush), 3,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 4,\n\t\t\t},\n\t\t\tpool: []string{\"v2\", \"b\", \"name\", \"o\", \"oname\"},\n\t\t\tmatch: []string{\n\t\t\t\t\"v2/b/my-bucket/o/obj\",\n\t\t\t\t\"v2/b/our-bucket/o/obj\",\n\t\t\t\t\"v2/b/my-bucket/o/dir\",\n\t\t\t},\n\t\t\tnotMatch: []string{\n\t\t\t\t\"\",\n\t\t\t\t\"v2\",\n\t\t\t\t\"v2/b\",\n\t\t\t\t\"v2/b/my-bucket\",\n\t\t\t\t\"v2/b/my-bucket/o\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops:      []int{int(utilities.OpLitPush), 0},\n\t\t\tpool:     []string{\"v1\"},\n\t\t\tverb:     \"LOCK\",\n\t\t\tmatch:    []string{\"v1:LOCK\"},\n\t\t\tnotMatch: []string{\"v1\", \"LOCK\"},\n\t\t},\n\t} {\n\t\tpat, err := NewPattern(validVersion, spec.ops, spec.pool, spec.verb)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) failed with %v; want success\", validVersion, spec.ops, spec.pool, spec.verb, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, path := range spec.match {\n\t\t\t_, err = pat.Match(segments(path))\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"pat.Match(%q) failed with %v; want success; pattern = (%v, %q)\", path, err, spec.ops, spec.pool)\n\t\t\t}\n\t\t}\n\n\t\tfor _, path := range spec.notMatch {\n\t\t\t_, err = pat.Match(segments(path))\n\t\t\tif err == nil {\n\t\t\t\tt.Errorf(\"pat.Match(%q) succeeded; want failure with %v; pattern = (%v, %q)\", path, ErrNotMatch, spec.ops, spec.pool)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !errors.Is(err, ErrNotMatch) {\n\t\t\t\tt.Errorf(\"pat.Match(%q) failed with %v; want failure with %v; pattern = (%v, %q)\", spec.notMatch, err, ErrNotMatch, spec.ops, spec.pool)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestMatchWithBinding(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tops  []int\n\t\tpool []string\n\t\tpath string\n\t\tverb string\n\t\tmode UnescapingMode\n\n\t\twant map[string]string\n\t}{\n\t\t{\n\t\t\twant: make(map[string]string),\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpNop), anything},\n\t\t\twant: make(map[string]string),\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpPush), anything},\n\t\t\tpath: \"abc\",\n\t\t\twant: make(map[string]string),\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpPush), anything},\n\t\t\tverb: \"LOCK\",\n\t\t\tpath: \"abc:LOCK\",\n\t\t\twant: make(map[string]string),\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpLitPush), 0},\n\t\t\tpool: []string{\"endpoint\"},\n\t\t\tpath: \"endpoint\",\n\t\t\twant: make(map[string]string),\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpPushM), anything},\n\t\t\tpath: \"abc/def/ghi\",\n\t\t\twant: make(map[string]string),\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t},\n\t\t\tpool: []string{\"v1\", \"bucket\", \"name\"},\n\t\t\tpath: \"v1/bucket/my-bucket\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"name\": \"my-bucket\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t},\n\t\t\tpool: []string{\"v1\", \"bucket\", \"name\"},\n\t\t\tverb: \"LOCK\",\n\t\t\tpath: \"v1/bucket/my-bucket:LOCK\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"name\": \"my-bucket\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpConcatN), 2,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t},\n\t\t\tpool: []string{\"v1\", \"o\", \"name\"},\n\t\t\tpath: \"v1/o/my-bucket/dir/dir2/obj\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"name\": \"o/my-bucket/dir/dir2/obj\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t\tint(utilities.OpConcatN), 3,\n\t\t\t\tint(utilities.OpCapture), 4,\n\t\t\t\tint(utilities.OpLitPush), 3,\n\t\t\t},\n\t\t\tpool: []string{\"v1\", \"o\", \".ext\", \"tail\", \"name\"},\n\t\t\tpath: \"v1/o/my-bucket/dir/dir2/obj/.ext/tail\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"name\": \"o/my-bucket/dir/dir2/obj/.ext\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 2,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t\tint(utilities.OpLitPush), 3,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 4,\n\t\t\t},\n\t\t\tpool: []string{\"v2\", \"b\", \"name\", \"o\", \"oname\"},\n\t\t\tpath: \"v2/b/my-bucket/o/obj\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"name\":  \"b/my-bucket\",\n\t\t\t\t\"oname\": \"obj\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpPush), 0,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 1,\n\t\t\t\tint(utilities.OpLitPush), 2,\n\t\t\t},\n\t\t\tpool: []string{\"foo\", \"id\", \"bar\"},\n\t\t\tpath: \"foo/part1%2Fpart2/bar\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"id\": \"part1/part2\",\n\t\t\t},\n\t\t\tmode: UnescapingModeAllExceptReserved,\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpPushM), 0,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 1,\n\t\t\t},\n\t\t\tpool: []string{\"foo\", \"id\"},\n\t\t\tpath: \"foo/test%2Fbar\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"id\": \"test%2Fbar\",\n\t\t\t},\n\t\t\tmode: UnescapingModeAllExceptReserved,\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpPushM), 0,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 1,\n\t\t\t},\n\t\t\tpool: []string{\"foo\", \"id\"},\n\t\t\tpath: \"foo/test%2Fbar\",\n\t\t\twant: map[string]string{\n\t\t\t\t\"id\": \"test/bar\",\n\t\t\t},\n\t\t\tmode: UnescapingModeAllCharacters,\n\t\t},\n\t} {\n\t\tpat, err := NewPattern(validVersion, spec.ops, spec.pool, spec.verb)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) failed with %v; want success\", validVersion, spec.ops, spec.pool, spec.verb, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tcomponents, verb := segments(spec.path)\n\t\tgot, err := pat.MatchAndEscape(components, verb, spec.mode)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"pat.Match(%q) failed with %v; want success; pattern = (%v, %q)\", spec.path, err, spec.ops, spec.pool)\n\t\t}\n\t\tif !reflect.DeepEqual(got, spec.want) {\n\t\t\tt.Errorf(\"pat.Match(%q) = %q; want %q; pattern = (%v, %q)\", spec.path, got, spec.want, spec.ops, spec.pool)\n\t\t}\n\t}\n}\n\nfunc segments(path string) (components []string, verb string) {\n\tif path == \"\" {\n\t\treturn nil, \"\"\n\t}\n\tcomponents = strings.Split(path, \"/\")\n\tl := len(components)\n\tc := components[l-1]\n\tif idx := strings.LastIndex(c, \":\"); idx >= 0 {\n\t\tcomponents[l-1], verb = c[:idx], c[idx+1:]\n\t}\n\treturn components, verb\n}\n\nfunc TestPatternString(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tops  []int\n\t\tpool []string\n\n\t\twant string\n\t}{\n\t\t{\n\t\t\twant: \"/\",\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpNop), anything},\n\t\t\twant: \"/\",\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpPush), anything},\n\t\t\twant: \"/*\",\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpLitPush), 0},\n\t\t\tpool: []string{\"endpoint\"},\n\t\t\twant: \"/endpoint\",\n\t\t},\n\t\t{\n\t\t\tops:  []int{int(utilities.OpPushM), anything},\n\t\t\twant: \"/**\",\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t},\n\t\t\twant: \"/*\",\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 1,\n\t\t\t\tint(utilities.OpCapture), 0,\n\t\t\t},\n\t\t\tpool: []string{\"name\"},\n\t\t\twant: \"/{name=*}\",\n\t\t},\n\t\t{\n\t\t\tops: []int{\n\t\t\t\tint(utilities.OpLitPush), 0,\n\t\t\t\tint(utilities.OpLitPush), 1,\n\t\t\t\tint(utilities.OpPush), anything,\n\t\t\t\tint(utilities.OpConcatN), 2,\n\t\t\t\tint(utilities.OpCapture), 2,\n\t\t\t\tint(utilities.OpLitPush), 3,\n\t\t\t\tint(utilities.OpPushM), anything,\n\t\t\t\tint(utilities.OpLitPush), 4,\n\t\t\t\tint(utilities.OpConcatN), 3,\n\t\t\t\tint(utilities.OpCapture), 6,\n\t\t\t\tint(utilities.OpLitPush), 5,\n\t\t\t},\n\t\t\tpool: []string{\"v1\", \"buckets\", \"bucket_name\", \"objects\", \".ext\", \"tail\", \"name\"},\n\t\t\twant: \"/v1/{bucket_name=buckets/*}/{name=objects/**/.ext}/tail\",\n\t\t},\n\t} {\n\t\tp, err := NewPattern(validVersion, spec.ops, spec.pool, \"\")\n\t\tif err != nil {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) failed with %v; want success\", validVersion, spec.ops, spec.pool, \"\", err)\n\t\t\tcontinue\n\t\t}\n\t\tif got, want := p.String(), spec.want; got != want {\n\t\t\tt.Errorf(\"%#v.String() = %q; want %q\", p, got, want)\n\t\t}\n\n\t\tverb := \"LOCK\"\n\t\tp, err = NewPattern(validVersion, spec.ops, spec.pool, verb)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"NewPattern(%d, %v, %q, %q) failed with %v; want success\", validVersion, spec.ops, spec.pool, verb, err)\n\t\t\tcontinue\n\t\t}\n\t\tif got, want := p.String(), fmt.Sprintf(\"%s:%s\", spec.want, verb); got != want {\n\t\t\tt.Errorf(\"%#v.String() = %q; want %q\", p, got, want)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "runtime/proto2_convert.go",
    "content": "package runtime\n\nimport (\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// StringP returns a pointer to a string whose pointee is same as the given string value.\nfunc StringP(val string) (*string, error) {\n\treturn proto.String(val), nil\n}\n\n// BoolP parses the given string representation of a boolean value,\n// and returns a pointer to a bool whose value is same as the parsed value.\nfunc BoolP(val string) (*bool, error) {\n\tb, err := Bool(val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto.Bool(b), nil\n}\n\n// Float64P parses the given string representation of a floating point number,\n// and returns a pointer to a float64 whose value is same as the parsed number.\nfunc Float64P(val string) (*float64, error) {\n\tf, err := Float64(val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto.Float64(f), nil\n}\n\n// Float32P parses the given string representation of a floating point number,\n// and returns a pointer to a float32 whose value is same as the parsed number.\nfunc Float32P(val string) (*float32, error) {\n\tf, err := Float32(val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto.Float32(f), nil\n}\n\n// Int64P parses the given string representation of an integer\n// and returns a pointer to an int64 whose value is same as the parsed integer.\nfunc Int64P(val string) (*int64, error) {\n\ti, err := Int64(val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto.Int64(i), nil\n}\n\n// Int32P parses the given string representation of an integer\n// and returns a pointer to an int32 whose value is same as the parsed integer.\nfunc Int32P(val string) (*int32, error) {\n\ti, err := Int32(val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto.Int32(i), err\n}\n\n// Uint64P parses the given string representation of an integer\n// and returns a pointer to a uint64 whose value is same as the parsed integer.\nfunc Uint64P(val string) (*uint64, error) {\n\ti, err := Uint64(val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto.Uint64(i), err\n}\n\n// Uint32P parses the given string representation of an integer\n// and returns a pointer to a uint32 whose value is same as the parsed integer.\nfunc Uint32P(val string) (*uint32, error) {\n\ti, err := Uint32(val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto.Uint32(i), err\n}\n"
  },
  {
    "path": "runtime/query.go",
    "content": "package runtime\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/protobuf/encoding/protojson\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n\tfield_mask \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\t\"google.golang.org/protobuf/types/known/structpb\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\nvar valuesKeyRegexp = regexp.MustCompile(`^(.*)\\[(.*)\\]$`)\n\nvar currentQueryParser QueryParameterParser = &DefaultQueryParser{}\n\n// QueryParameterParser defines interface for all query parameter parsers\ntype QueryParameterParser interface {\n\tParse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error\n}\n\n// PopulateQueryParameters parses query parameters\n// into \"msg\" using current query parser\nfunc PopulateQueryParameters(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error {\n\treturn currentQueryParser.Parse(msg, values, filter)\n}\n\n// DefaultQueryParser is a QueryParameterParser which implements the default\n// query parameters parsing behavior.\n//\n// See https://github.com/grpc-ecosystem/grpc-gateway/issues/2632 for more context.\ntype DefaultQueryParser struct{}\n\n// Parse populates \"values\" into \"msg\".\n// A value is ignored if its key starts with one of the elements in \"filter\".\nfunc (*DefaultQueryParser) Parse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error {\n\tfor key, values := range values {\n\t\tif match := valuesKeyRegexp.FindStringSubmatch(key); len(match) == 3 {\n\t\t\tkey = match[1]\n\t\t\tvalues = append([]string{match[2]}, values...)\n\t\t}\n\n\t\tmsgValue := msg.ProtoReflect()\n\t\tfieldPath := normalizeFieldPath(msgValue, strings.Split(key, \".\"))\n\t\tif filter.HasCommonPrefix(fieldPath) {\n\t\t\tcontinue\n\t\t}\n\t\tif err := populateFieldValueFromPath(msgValue, fieldPath, values); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// PopulateFieldFromPath sets a value in a nested Protobuf structure.\nfunc PopulateFieldFromPath(msg proto.Message, fieldPathString string, value string) error {\n\tfieldPath := strings.Split(fieldPathString, \".\")\n\treturn populateFieldValueFromPath(msg.ProtoReflect(), fieldPath, []string{value})\n}\n\nfunc normalizeFieldPath(msgValue protoreflect.Message, fieldPath []string) []string {\n\tnewFieldPath := make([]string, 0, len(fieldPath))\n\tfor i, fieldName := range fieldPath {\n\t\tfields := msgValue.Descriptor().Fields()\n\t\tfieldDesc := fields.ByTextName(fieldName)\n\t\tif fieldDesc == nil {\n\t\t\tfieldDesc = fields.ByJSONName(fieldName)\n\t\t}\n\t\tif fieldDesc == nil {\n\t\t\t// return initial field path values if no matching  message field was found\n\t\t\treturn fieldPath\n\t\t}\n\n\t\tnewFieldPath = append(newFieldPath, string(fieldDesc.Name()))\n\n\t\t// If this is the last element, we're done\n\t\tif i == len(fieldPath)-1 {\n\t\t\tbreak\n\t\t}\n\n\t\t// Only singular message fields are allowed\n\t\tif fieldDesc.Message() == nil || fieldDesc.Cardinality() == protoreflect.Repeated {\n\t\t\treturn fieldPath\n\t\t}\n\n\t\t// Get the nested message\n\t\tmsgValue = msgValue.Get(fieldDesc).Message()\n\t}\n\n\treturn newFieldPath\n}\n\nfunc populateFieldValueFromPath(msgValue protoreflect.Message, fieldPath []string, values []string) error {\n\tif len(fieldPath) < 1 {\n\t\treturn errors.New(\"no field path\")\n\t}\n\tif len(values) < 1 {\n\t\treturn errors.New(\"no value provided\")\n\t}\n\n\tvar fieldDescriptor protoreflect.FieldDescriptor\n\tfor i, fieldName := range fieldPath {\n\t\tfields := msgValue.Descriptor().Fields()\n\n\t\t// Get field by name\n\t\tfieldDescriptor = fields.ByName(protoreflect.Name(fieldName))\n\t\tif fieldDescriptor == nil {\n\t\t\tfieldDescriptor = fields.ByJSONName(fieldName)\n\t\t\tif fieldDescriptor == nil {\n\t\t\t\t// We're not returning an error here because this could just be\n\t\t\t\t// an extra query parameter that isn't part of the request.\n\t\t\t\tgrpclog.Infof(\"field not found in %q: %q\", msgValue.Descriptor().FullName(), strings.Join(fieldPath, \".\"))\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\t// Check if oneof already set\n\t\tif of := fieldDescriptor.ContainingOneof(); of != nil && !of.IsSynthetic() {\n\t\t\tif f := msgValue.WhichOneof(of); f != nil {\n\t\t\t\tif fieldDescriptor.Message() == nil || fieldDescriptor.FullName() != f.FullName() {\n\t\t\t\t\treturn fmt.Errorf(\"field already set for oneof %q\", of.FullName().Name())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If this is the last element, we're done\n\t\tif i == len(fieldPath)-1 {\n\t\t\tbreak\n\t\t}\n\n\t\t// Only singular message fields are allowed\n\t\tif fieldDescriptor.Message() == nil || fieldDescriptor.Cardinality() == protoreflect.Repeated {\n\t\t\treturn fmt.Errorf(\"invalid path: %q is not a message\", fieldName)\n\t\t}\n\n\t\t// Get the nested message\n\t\tmsgValue = msgValue.Mutable(fieldDescriptor).Message()\n\t}\n\n\tswitch {\n\tcase fieldDescriptor.IsList():\n\t\treturn populateRepeatedField(fieldDescriptor, msgValue.Mutable(fieldDescriptor).List(), values)\n\tcase fieldDescriptor.IsMap():\n\t\treturn populateMapField(fieldDescriptor, msgValue.Mutable(fieldDescriptor).Map(), values)\n\t}\n\n\tif len(values) > 1 {\n\t\treturn fmt.Errorf(\"too many values for field %q: %s\", fieldDescriptor.FullName().Name(), strings.Join(values, \", \"))\n\t}\n\n\treturn populateField(fieldDescriptor, msgValue, values[0])\n}\n\nfunc populateField(fieldDescriptor protoreflect.FieldDescriptor, msgValue protoreflect.Message, value string) error {\n\tv, err := parseField(fieldDescriptor, value)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"parsing field %q: %w\", fieldDescriptor.FullName().Name(), err)\n\t}\n\n\tmsgValue.Set(fieldDescriptor, v)\n\treturn nil\n}\n\nfunc populateRepeatedField(fieldDescriptor protoreflect.FieldDescriptor, list protoreflect.List, values []string) error {\n\tfor _, value := range values {\n\t\tv, err := parseField(fieldDescriptor, value)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parsing list %q: %w\", fieldDescriptor.FullName().Name(), err)\n\t\t}\n\t\tlist.Append(v)\n\t}\n\n\treturn nil\n}\n\nfunc populateMapField(fieldDescriptor protoreflect.FieldDescriptor, mp protoreflect.Map, values []string) error {\n\tif len(values) != 2 {\n\t\treturn fmt.Errorf(\"more than one value provided for key %q in map %q\", values[0], fieldDescriptor.FullName())\n\t}\n\n\tkey, err := parseField(fieldDescriptor.MapKey(), values[0])\n\tif err != nil {\n\t\treturn fmt.Errorf(\"parsing map key %q: %w\", fieldDescriptor.FullName().Name(), err)\n\t}\n\n\tvalue, err := parseField(fieldDescriptor.MapValue(), values[1])\n\tif err != nil {\n\t\treturn fmt.Errorf(\"parsing map value %q: %w\", fieldDescriptor.FullName().Name(), err)\n\t}\n\n\tmp.Set(key.MapKey(), value)\n\n\treturn nil\n}\n\nfunc parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (protoreflect.Value, error) {\n\tswitch fieldDescriptor.Kind() {\n\tcase protoreflect.BoolKind:\n\t\tv, err := strconv.ParseBool(value)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfBool(v), nil\n\tcase protoreflect.EnumKind:\n\t\tenum, err := protoregistry.GlobalTypes.FindEnumByName(fieldDescriptor.Enum().FullName())\n\t\tif err != nil {\n\t\t\tif errors.Is(err, protoregistry.NotFound) {\n\t\t\t\treturn protoreflect.Value{}, fmt.Errorf(\"enum %q is not registered\", fieldDescriptor.Enum().FullName())\n\t\t\t}\n\t\t\treturn protoreflect.Value{}, fmt.Errorf(\"failed to look up enum: %w\", err)\n\t\t}\n\t\t// Look for enum by name\n\t\tv := enum.Descriptor().Values().ByName(protoreflect.Name(value))\n\t\tif v == nil {\n\t\t\ti, err := strconv.Atoi(value)\n\t\t\tif err != nil {\n\t\t\t\treturn protoreflect.Value{}, fmt.Errorf(\"%q is not a valid value\", value)\n\t\t\t}\n\t\t\t// Look for enum by number\n\t\t\tif v = enum.Descriptor().Values().ByNumber(protoreflect.EnumNumber(i)); v == nil {\n\t\t\t\treturn protoreflect.Value{}, fmt.Errorf(\"%q is not a valid value\", value)\n\t\t\t}\n\t\t}\n\t\treturn protoreflect.ValueOfEnum(v.Number()), nil\n\tcase protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:\n\t\tv, err := strconv.ParseInt(value, 10, 32)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfInt32(int32(v)), nil\n\tcase protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:\n\t\tv, err := strconv.ParseInt(value, 10, 64)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfInt64(v), nil\n\tcase protoreflect.Uint32Kind, protoreflect.Fixed32Kind:\n\t\tv, err := strconv.ParseUint(value, 10, 32)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfUint32(uint32(v)), nil\n\tcase protoreflect.Uint64Kind, protoreflect.Fixed64Kind:\n\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfUint64(v), nil\n\tcase protoreflect.FloatKind:\n\t\tv, err := strconv.ParseFloat(value, 32)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfFloat32(float32(v)), nil\n\tcase protoreflect.DoubleKind:\n\t\tv, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfFloat64(v), nil\n\tcase protoreflect.StringKind:\n\t\treturn protoreflect.ValueOfString(value), nil\n\tcase protoreflect.BytesKind:\n\t\tv, err := Bytes(value)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\treturn protoreflect.ValueOfBytes(v), nil\n\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\treturn parseMessage(fieldDescriptor.Message(), value)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown field kind: %v\", fieldDescriptor.Kind()))\n\t}\n}\n\nfunc parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (protoreflect.Value, error) {\n\tvar msg proto.Message\n\tswitch msgDescriptor.FullName() {\n\tcase \"google.protobuf.Timestamp\":\n\t\tt, err := time.Parse(time.RFC3339Nano, value)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\ttimestamp := timestamppb.New(t)\n\t\tif ok := timestamp.IsValid(); !ok {\n\t\t\treturn protoreflect.Value{}, fmt.Errorf(\"%s before 0001-01-01\", value)\n\t\t}\n\t\tmsg = timestamp\n\tcase \"google.protobuf.Duration\":\n\t\td, err := time.ParseDuration(value)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = durationpb.New(d)\n\tcase \"google.protobuf.DoubleValue\":\n\t\tv, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.Double(v)\n\tcase \"google.protobuf.FloatValue\":\n\t\tv, err := strconv.ParseFloat(value, 32)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.Float(float32(v))\n\tcase \"google.protobuf.Int64Value\":\n\t\tv, err := strconv.ParseInt(value, 10, 64)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.Int64(v)\n\tcase \"google.protobuf.Int32Value\":\n\t\tv, err := strconv.ParseInt(value, 10, 32)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.Int32(int32(v))\n\tcase \"google.protobuf.UInt64Value\":\n\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.UInt64(v)\n\tcase \"google.protobuf.UInt32Value\":\n\t\tv, err := strconv.ParseUint(value, 10, 32)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.UInt32(uint32(v))\n\tcase \"google.protobuf.BoolValue\":\n\t\tv, err := strconv.ParseBool(value)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.Bool(v)\n\tcase \"google.protobuf.StringValue\":\n\t\tmsg = wrapperspb.String(value)\n\tcase \"google.protobuf.BytesValue\":\n\t\tv, err := Bytes(value)\n\t\tif err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = wrapperspb.Bytes(v)\n\tcase \"google.protobuf.FieldMask\":\n\t\tfm := &field_mask.FieldMask{}\n\t\tfm.Paths = append(fm.Paths, strings.Split(value, \",\")...)\n\t\tmsg = fm\n\tcase \"google.protobuf.Value\":\n\t\tvar v structpb.Value\n\t\tif err := protojson.Unmarshal([]byte(value), &v); err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = &v\n\tcase \"google.protobuf.Struct\":\n\t\tvar v structpb.Struct\n\t\tif err := protojson.Unmarshal([]byte(value), &v); err != nil {\n\t\t\treturn protoreflect.Value{}, err\n\t\t}\n\t\tmsg = &v\n\tdefault:\n\t\treturn protoreflect.Value{}, fmt.Errorf(\"unsupported message type: %q\", string(msgDescriptor.FullName()))\n\t}\n\n\treturn protoreflect.ValueOfMessage(msg.ProtoReflect()), nil\n}\n"
  },
  {
    "path": "runtime/query_fuzz_test.go",
    "content": "//go:build go1.18\n// +build go1.18\n\npackage runtime_test\n\nimport (\n\t\"net/url\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n)\n\nfunc FuzzPopulateQueryParameters(f *testing.F) {\n\tf.Add(\"bool_value=true&bytes_value=YWJjMTIzIT8kKiYoKSctPUB-&double_value=2.5&duration_value=13h0m0s&enum_value=1&fieldmask_value=float_value%2Cdouble_value&float_value=1.5&int32_value=-2&int64_value=-1&map_value10%5Bkey%5D=1.5&map_value11%5B1.5%5D=value&map_value12%5Bkey%5D=2.5&map_value13%5B2.5%5D=value&map_value14%5Bkey%5D=true&map_value15%5Btrue%5D=value&map_value16%5Bkey%5D=2&map_value2%5Bkey%5D=-2&map_value3%5B-2%5D=value&map_value4%5Bkey%5D=-1&map_value5%5B-1%5D=value&map_value6%5Bkey%5D=3&map_value7%5B3%5D=value&map_value8%5Bkey%5D=4&map_value9%5B4%5D=value&map_value%5Bfourth%5D=&map_value%5Bkey%5D=value&map_value%5Bsecond%5D=bar&map_value%5Bthird%5D=zzz&map_value%5B~%21%40%23%24%25%5E%26%2A%28%29%5D=value&repeated_enum=1&repeated_enum=2&repeated_enum=0&repeated_message=1&repeated_message=2&repeated_message=3&repeated_value=a&repeated_value=b&repeated_value=c&string_value=str&struct_value=%7B%22a%22%3A%7B%22b%22%3A1%7D%7D&struct_value_value=%7B%22a%22%3A%7B%22b%22%3A1%7D%7D&timestamp_value=2016-12-15T12%3A23%3A32.000000049Z&uint32_value=4&uint64_value=3&wrapper_bool_value=true&wrapper_bytes_value=YWJjMTIzIT8kKiYoKSctPUB-&wrapper_double_value=2.5&wrapper_float_value=1.5&wrapper_int32_value=-2&wrapper_int64_value=-1&wrapper_string_value=str&wrapper_u_int32_value=4&wrapper_u_int64_value=3\")\n\tf.Add(\"boolValue=true&bytesValue=Ynl0ZXM%3D&doubleValue=2.5&durationValue=13h0m0s&enumValue=1&fieldmaskValue=float_value%2Cdouble_value&floatValue=1.5&int32Value=-2&int64Value=-1&repeatedEnum=1&repeatedEnum=2&repeatedEnum=0&repeatedValue=a&repeatedValue=b&repeatedValue=c&stringValue=str&struct_value=%7B%7D&struct_value_value=%22%22&timestampValue=2016-12-15T12%3A23%3A32.000000049Z&uint32Value=4&uint64Value=3&wrapperBoolValue=true&wrapperBytesValue=Ynl0ZXM%3D&wrapperDoubleValue=2.5&wrapperFloatValue=1.5&wrapperInt32Value=-2&wrapperInt64Value=-1&wrapperStringValue=str&wrapperUInt32Value=4&wrapperUInt64Value=3\")\n\tf.Add(\"enum_value=Z&repeated_enum=X&repeated_enum=2&repeated_enum=0&struct_value=%7B%22c%22%3A%5B1%2C2%5D%2C%22d%22%3A%5B%7B%22e%22%3A1%2C%22f%22%3A%7B%7D%7D%5D%7D&struct_value_value=%7B%7D\")\n\tf.Add(\"struct_value_value=%5B%5D\")\n\tf.Add(\"bool_value=true&double_value=2.5&float_value=1.5&int32_value=-2&int64_value=-1&repeated_value=a&repeated_value=b&repeated_value=c&string_value=str&uint32_value=4&uint64_value=3\")\n\tf.Add(\"boolValue=true&doubleValue=2.5&floatValue=1.5&int32Value=-2&int64Value=-1&repeatedValue=a&repeatedValue=b&repeatedValue=c&stringValue=str&uint32Value=4&uint64Value=\")\n\tf.Add(\"nested.nested.map_value%5Bfirst%5D=foo&nested.nested.map_value%5Bsecond%5D=bar&nested.nested.nested.repeated_value=a&nested.nested.nested.repeated_value=b&nested.nested.nested.repeated_value=c&nested.nested.nested.string_value=s&nested.nested.string_value=t&nested.string_value=u\")\n\tf.Add(\"oneof_string_value=foobar\")\n\tf.Add(\"nested_oneof_value_one.int64Value=-1&nested_oneof_value_one.string_value=foo\")\n\tf.Fuzz(func(t *testing.T, query string) {\n\t\tin := &examplepb.ABitOfEverything{}\n\t\tvalues, err := url.ParseQuery(query)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\terr = runtime.PopulateQueryParameters(in, values, utilities.NewDoubleArray(nil))\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "runtime/query_test.go",
    "content": "package runtime_test\n\nimport (\n\t\"errors\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/testing/protocmp\"\n\t\"google.golang.org/protobuf/types/known/durationpb\"\n\tfield_mask \"google.golang.org/protobuf/types/known/fieldmaskpb\"\n\t\"google.golang.org/protobuf/types/known/structpb\"\n\t\"google.golang.org/protobuf/types/known/timestamppb\"\n\t\"google.golang.org/protobuf/types/known/wrapperspb\"\n)\n\nfunc BenchmarkPopulateQueryParameters(b *testing.B) {\n\ttimeT := time.Date(2016, time.December, 15, 12, 23, 32, 49, time.UTC)\n\ttimeStr := timeT.Format(time.RFC3339Nano)\n\n\tdurationT := 13 * time.Hour\n\tdurationStr := durationT.String()\n\n\tfieldmaskStr := \"float_value,double_value\"\n\n\tmsg := &examplepb.Proto3Message{}\n\tvalues := url.Values{\n\t\t\"float_value\":            {\"1.5\"},\n\t\t\"double_value\":           {\"2.5\"},\n\t\t\"int64_value\":            {\"-1\"},\n\t\t\"int32_value\":            {\"-2\"},\n\t\t\"uint64_value\":           {\"3\"},\n\t\t\"uint32_value\":           {\"4\"},\n\t\t\"bool_value\":             {\"true\"},\n\t\t\"string_value\":           {\"str\"},\n\t\t\"bytes_value\":            {\"Ynl0ZXM=\"},\n\t\t\"repeated_value\":         {\"a\", \"b\", \"c\"},\n\t\t\"enum_value\":             {\"1\"},\n\t\t\"repeated_enum\":          {\"1\", \"2\", \"0\"},\n\t\t\"timestamp_value\":        {timeStr},\n\t\t\"duration_value\":         {durationStr},\n\t\t\"fieldmask_value\":        {fieldmaskStr},\n\t\t\"optional_string_value\":  {\"optional-str\"},\n\t\t\"wrapper_float_value\":    {\"1.5\"},\n\t\t\"wrapper_double_value\":   {\"2.5\"},\n\t\t\"wrapper_int64_value\":    {\"-1\"},\n\t\t\"wrapper_int32_value\":    {\"-2\"},\n\t\t\"wrapper_u_int64_value\":  {\"3\"},\n\t\t\"wrapper_u_int32_value\":  {\"4\"},\n\t\t\"wrapper_bool_value\":     {\"true\"},\n\t\t\"wrapper_string_value\":   {\"str\"},\n\t\t\"wrapper_bytes_value\":    {\"Ynl0ZXM=\"},\n\t\t\"map_value[key]\":         {\"value\"},\n\t\t\"map_value[second]\":      {\"bar\"},\n\t\t\"map_value[third]\":       {\"zzz\"},\n\t\t\"map_value[fourth]\":      {\"\"},\n\t\t`map_value[~!@#$%^&*()]`: {\"value\"},\n\t\t\"map_value2[key]\":        {\"-2\"},\n\t\t\"map_value3[-2]\":         {\"value\"},\n\t\t\"map_value4[key]\":        {\"-1\"},\n\t\t\"map_value5[-1]\":         {\"value\"},\n\t\t\"map_value6[key]\":        {\"3\"},\n\t\t\"map_value7[3]\":          {\"value\"},\n\t\t\"map_value8[key]\":        {\"4\"},\n\t\t\"map_value9[4]\":          {\"value\"},\n\t\t\"map_value10[key]\":       {\"1.5\"},\n\t\t\"map_value11[1.5]\":       {\"value\"},\n\t\t\"map_value12[key]\":       {\"2.5\"},\n\t\t\"map_value13[2.5]\":       {\"value\"},\n\t\t\"map_value14[key]\":       {\"true\"},\n\t\t\"map_value15[true]\":      {\"value\"},\n\t}\n\tfilter := utilities.NewDoubleArray([][]string{\n\t\t{\"bool_value\"}, {\"repeated_value\"},\n\t})\n\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = runtime.PopulateQueryParameters(msg, values, filter)\n\t}\n}\n\nfunc TestPopulateParameters(t *testing.T) {\n\ttimeT := time.Date(2016, time.December, 15, 12, 23, 32, 49, time.UTC)\n\ttimeStr := timeT.Format(time.RFC3339Nano)\n\ttimePb := timestamppb.New(timeT)\n\n\tdurationT := 13 * time.Hour\n\tdurationStr := durationT.String()\n\tdurationPb := durationpb.New(durationT)\n\n\toptionalStr := \"str\"\n\tfieldmaskStr := \"float_value,double_value\"\n\tfieldmaskPb := &field_mask.FieldMask{Paths: []string{\"float_value\", \"double_value\"}}\n\n\tstructValueJsonStrings := []string{`{\"a\":{\"b\":1}}`, `\"\"`, \"{}\", \"[]\", \"true\", \"0\"}\n\tstructValueValues := make([]*structpb.Value, len(structValueJsonStrings))\n\tfor i := range structValueValues {\n\t\tstructValueValues[i] = &structpb.Value{}\n\t\terr := structValueValues[i].UnmarshalJSON([]byte(structValueJsonStrings[i]))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"build struct.Value value failed: %s\", err.Error())\n\t\t}\n\t}\n\tstructJsonStrings := []string{`{\"a\":{\"b\":1}}`, \"{}\", `{\"c\":[1,2],\"d\":[{\"e\":1,\"f\":{}}]}`}\n\tstructValues := make([]*structpb.Struct, len(structJsonStrings))\n\tfor i := range structValues {\n\t\tstructValues[i] = &structpb.Struct{}\n\t\terr := structValues[i].UnmarshalJSON([]byte(structJsonStrings[i]))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"build struct.Struct value failed: %s\", err.Error())\n\t\t}\n\t}\n\n\tfor i, spec := range []struct {\n\t\tvalues  url.Values\n\t\tfilter  *utilities.DoubleArray\n\t\twant    proto.Message\n\t\twanterr error\n\t}{\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"float_value\":            {\"1.5\"},\n\t\t\t\t\"double_value\":           {\"2.5\"},\n\t\t\t\t\"int64_value\":            {\"-1\"},\n\t\t\t\t\"int32_value\":            {\"-2\"},\n\t\t\t\t\"uint64_value\":           {\"3\"},\n\t\t\t\t\"uint32_value\":           {\"4\"},\n\t\t\t\t\"bool_value\":             {\"true\"},\n\t\t\t\t\"string_value\":           {\"str\"},\n\t\t\t\t\"bytes_value\":            {\"YWJjMTIzIT8kKiYoKSctPUB-\"},\n\t\t\t\t\"repeated_value\":         {\"a\", \"b\", \"c\"},\n\t\t\t\t\"optional_value\":         {optionalStr},\n\t\t\t\t\"repeated_message\":       {\"1\", \"2\", \"3\"},\n\t\t\t\t\"enum_value\":             {\"1\"},\n\t\t\t\t\"repeated_enum\":          {\"1\", \"2\", \"0\"},\n\t\t\t\t\"timestamp_value\":        {timeStr},\n\t\t\t\t\"duration_value\":         {durationStr},\n\t\t\t\t\"fieldmask_value\":        {fieldmaskStr},\n\t\t\t\t\"wrapper_float_value\":    {\"1.5\"},\n\t\t\t\t\"wrapper_double_value\":   {\"2.5\"},\n\t\t\t\t\"wrapper_int64_value\":    {\"-1\"},\n\t\t\t\t\"wrapper_int32_value\":    {\"-2\"},\n\t\t\t\t\"wrapper_u_int64_value\":  {\"3\"},\n\t\t\t\t\"wrapper_u_int32_value\":  {\"4\"},\n\t\t\t\t\"wrapper_bool_value\":     {\"true\"},\n\t\t\t\t\"wrapper_string_value\":   {\"str\"},\n\t\t\t\t\"wrapper_bytes_value\":    {\"YWJjMTIzIT8kKiYoKSctPUB-\"},\n\t\t\t\t\"map_value[key]\":         {\"value\"},\n\t\t\t\t\"map_value[second]\":      {\"bar\"},\n\t\t\t\t\"map_value[third]\":       {\"zzz\"},\n\t\t\t\t\"map_value[fourth]\":      {\"\"},\n\t\t\t\t`map_value[~!@#$%^&*()]`: {\"value\"},\n\t\t\t\t\"map_value2[key]\":        {\"-2\"},\n\t\t\t\t\"map_value3[-2]\":         {\"value\"},\n\t\t\t\t\"map_value4[key]\":        {\"-1\"},\n\t\t\t\t\"map_value5[-1]\":         {\"value\"},\n\t\t\t\t\"map_value6[key]\":        {\"3\"},\n\t\t\t\t\"map_value7[3]\":          {\"value\"},\n\t\t\t\t\"map_value8[key]\":        {\"4\"},\n\t\t\t\t\"map_value9[4]\":          {\"value\"},\n\t\t\t\t\"map_value10[key]\":       {\"1.5\"},\n\t\t\t\t\"map_value11[1.5]\":       {\"value\"},\n\t\t\t\t\"map_value12[key]\":       {\"2.5\"},\n\t\t\t\t\"map_value13[2.5]\":       {\"value\"},\n\t\t\t\t\"map_value14[key]\":       {\"true\"},\n\t\t\t\t\"map_value15[true]\":      {\"value\"},\n\t\t\t\t\"map_value16[key]\":       {\"2\"},\n\t\t\t\t\"struct_value_value\":     {structValueJsonStrings[0]},\n\t\t\t\t\"struct_value\":           {structJsonStrings[0]},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tFloatValue:         1.5,\n\t\t\t\tDoubleValue:        2.5,\n\t\t\t\tInt64Value:         -1,\n\t\t\t\tInt32Value:         -2,\n\t\t\t\tUint64Value:        3,\n\t\t\t\tUint32Value:        4,\n\t\t\t\tBoolValue:          true,\n\t\t\t\tStringValue:        \"str\",\n\t\t\t\tBytesValue:         []byte(\"abc123!?$*&()'-=@~\"),\n\t\t\t\tRepeatedValue:      []string{\"a\", \"b\", \"c\"},\n\t\t\t\tOptionalValue:      &optionalStr,\n\t\t\t\tRepeatedMessage:    []*wrapperspb.UInt64Value{{Value: 1}, {Value: 2}, {Value: 3}},\n\t\t\t\tEnumValue:          examplepb.EnumValue_Y,\n\t\t\t\tRepeatedEnum:       []examplepb.EnumValue{examplepb.EnumValue_Y, examplepb.EnumValue_Z, examplepb.EnumValue_X},\n\t\t\t\tTimestampValue:     timePb,\n\t\t\t\tDurationValue:      durationPb,\n\t\t\t\tFieldmaskValue:     fieldmaskPb,\n\t\t\t\tWrapperFloatValue:  wrapperspb.Float(1.5),\n\t\t\t\tWrapperDoubleValue: wrapperspb.Double(2.5),\n\t\t\t\tWrapperInt64Value:  wrapperspb.Int64(-1),\n\t\t\t\tWrapperInt32Value:  wrapperspb.Int32(-2),\n\t\t\t\tWrapperUInt64Value: wrapperspb.UInt64(3),\n\t\t\t\tWrapperUInt32Value: wrapperspb.UInt32(4),\n\t\t\t\tWrapperBoolValue:   wrapperspb.Bool(true),\n\t\t\t\tWrapperStringValue: wrapperspb.String(\"str\"),\n\t\t\t\tWrapperBytesValue:  wrapperspb.Bytes([]byte(\"abc123!?$*&()'-=@~\")),\n\t\t\t\tMapValue: map[string]string{\n\t\t\t\t\t\"key\":         \"value\",\n\t\t\t\t\t\"second\":      \"bar\",\n\t\t\t\t\t\"third\":       \"zzz\",\n\t\t\t\t\t\"fourth\":      \"\",\n\t\t\t\t\t`~!@#$%^&*()`: \"value\",\n\t\t\t\t},\n\t\t\t\tMapValue2:        map[string]int32{\"key\": -2},\n\t\t\t\tMapValue3:        map[int32]string{-2: \"value\"},\n\t\t\t\tMapValue4:        map[string]int64{\"key\": -1},\n\t\t\t\tMapValue5:        map[int64]string{-1: \"value\"},\n\t\t\t\tMapValue6:        map[string]uint32{\"key\": 3},\n\t\t\t\tMapValue7:        map[uint32]string{3: \"value\"},\n\t\t\t\tMapValue8:        map[string]uint64{\"key\": 4},\n\t\t\t\tMapValue9:        map[uint64]string{4: \"value\"},\n\t\t\t\tMapValue10:       map[string]float32{\"key\": 1.5},\n\t\t\t\tMapValue12:       map[string]float64{\"key\": 2.5},\n\t\t\t\tMapValue14:       map[string]bool{\"key\": true},\n\t\t\t\tMapValue15:       map[bool]string{true: \"value\"},\n\t\t\t\tMapValue16:       map[string]*wrapperspb.UInt64Value{\"key\": {Value: 2}},\n\t\t\t\tStructValueValue: structValueValues[0],\n\t\t\t\tStructValue:      structValues[0],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"floatValue\":         {\"1.5\"},\n\t\t\t\t\"doubleValue\":        {\"2.5\"},\n\t\t\t\t\"int64Value\":         {\"-1\"},\n\t\t\t\t\"int32Value\":         {\"-2\"},\n\t\t\t\t\"uint64Value\":        {\"3\"},\n\t\t\t\t\"uint32Value\":        {\"4\"},\n\t\t\t\t\"boolValue\":          {\"true\"},\n\t\t\t\t\"stringValue\":        {\"str\"},\n\t\t\t\t\"bytesValue\":         {\"Ynl0ZXM=\"},\n\t\t\t\t\"repeatedValue\":      {\"a\", \"b\", \"c\"},\n\t\t\t\t\"enumValue\":          {\"1\"},\n\t\t\t\t\"repeatedEnum\":       {\"1\", \"2\", \"0\"},\n\t\t\t\t\"timestampValue\":     {timeStr},\n\t\t\t\t\"durationValue\":      {durationStr},\n\t\t\t\t\"fieldmaskValue\":     {fieldmaskStr},\n\t\t\t\t\"wrapperFloatValue\":  {\"1.5\"},\n\t\t\t\t\"wrapperDoubleValue\": {\"2.5\"},\n\t\t\t\t\"wrapperInt64Value\":  {\"-1\"},\n\t\t\t\t\"wrapperInt32Value\":  {\"-2\"},\n\t\t\t\t\"wrapperUInt64Value\": {\"3\"},\n\t\t\t\t\"wrapperUInt32Value\": {\"4\"},\n\t\t\t\t\"wrapperBoolValue\":   {\"true\"},\n\t\t\t\t\"wrapperStringValue\": {\"str\"},\n\t\t\t\t\"wrapperBytesValue\":  {\"Ynl0ZXM=\"},\n\t\t\t\t\"struct_value_value\": {structValueJsonStrings[1]},\n\t\t\t\t\"struct_value\":       {structJsonStrings[1]},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tFloatValue:         1.5,\n\t\t\t\tDoubleValue:        2.5,\n\t\t\t\tInt64Value:         -1,\n\t\t\t\tInt32Value:         -2,\n\t\t\t\tUint64Value:        3,\n\t\t\t\tUint32Value:        4,\n\t\t\t\tBoolValue:          true,\n\t\t\t\tStringValue:        \"str\",\n\t\t\t\tBytesValue:         []byte(\"bytes\"),\n\t\t\t\tRepeatedValue:      []string{\"a\", \"b\", \"c\"},\n\t\t\t\tEnumValue:          examplepb.EnumValue_Y,\n\t\t\t\tRepeatedEnum:       []examplepb.EnumValue{examplepb.EnumValue_Y, examplepb.EnumValue_Z, examplepb.EnumValue_X},\n\t\t\t\tTimestampValue:     timePb,\n\t\t\t\tDurationValue:      durationPb,\n\t\t\t\tFieldmaskValue:     fieldmaskPb,\n\t\t\t\tWrapperFloatValue:  wrapperspb.Float(1.5),\n\t\t\t\tWrapperDoubleValue: wrapperspb.Double(2.5),\n\t\t\t\tWrapperInt64Value:  wrapperspb.Int64(-1),\n\t\t\t\tWrapperInt32Value:  wrapperspb.Int32(-2),\n\t\t\t\tWrapperUInt64Value: wrapperspb.UInt64(3),\n\t\t\t\tWrapperUInt32Value: wrapperspb.UInt32(4),\n\t\t\t\tWrapperBoolValue:   wrapperspb.Bool(true),\n\t\t\t\tWrapperStringValue: wrapperspb.String(\"str\"),\n\t\t\t\tWrapperBytesValue:  wrapperspb.Bytes([]byte(\"bytes\")),\n\t\t\t\tStructValueValue:   structValueValues[1],\n\t\t\t\tStructValue:        structValues[1],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"enum_value\":         {\"Z\"},\n\t\t\t\t\"repeated_enum\":      {\"X\", \"2\", \"0\"},\n\t\t\t\t\"struct_value_value\": {structValueJsonStrings[2]},\n\t\t\t\t\"struct_value\":       {structJsonStrings[2]},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tEnumValue:        examplepb.EnumValue_Z,\n\t\t\t\tRepeatedEnum:     []examplepb.EnumValue{examplepb.EnumValue_X, examplepb.EnumValue_Z, examplepb.EnumValue_X},\n\t\t\t\tStructValueValue: structValueValues[2],\n\t\t\t\tStructValue:      structValues[2],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"struct_value_value\": {structValueJsonStrings[3]},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tStructValueValue: structValueValues[3],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"struct_value_value\": {structValueJsonStrings[4]},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tStructValueValue: structValueValues[4],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"struct_value_value\": {structValueJsonStrings[5]},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tStructValueValue: structValueValues[5],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"float_value\":    {\"1.5\"},\n\t\t\t\t\"double_value\":   {\"2.5\"},\n\t\t\t\t\"int64_value\":    {\"-1\"},\n\t\t\t\t\"int32_value\":    {\"-2\"},\n\t\t\t\t\"uint64_value\":   {\"3\"},\n\t\t\t\t\"uint32_value\":   {\"4\"},\n\t\t\t\t\"bool_value\":     {\"true\"},\n\t\t\t\t\"string_value\":   {\"str\"},\n\t\t\t\t\"repeated_value\": {\"a\", \"b\", \"c\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto2Message{\n\t\t\t\tFloatValue:    proto.Float32(1.5),\n\t\t\t\tDoubleValue:   proto.Float64(2.5),\n\t\t\t\tInt64Value:    proto.Int64(-1),\n\t\t\t\tInt32Value:    proto.Int32(-2),\n\t\t\t\tUint64Value:   proto.Uint64(3),\n\t\t\t\tUint32Value:   proto.Uint32(4),\n\t\t\t\tBoolValue:     proto.Bool(true),\n\t\t\t\tStringValue:   proto.String(\"str\"),\n\t\t\t\tRepeatedValue: []string{\"a\", \"b\", \"c\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"floatValue\":    {\"1.5\"},\n\t\t\t\t\"doubleValue\":   {\"2.5\"},\n\t\t\t\t\"int64Value\":    {\"-1\"},\n\t\t\t\t\"int32Value\":    {\"-2\"},\n\t\t\t\t\"uint64Value\":   {\"3\"},\n\t\t\t\t\"uint32Value\":   {\"4\"},\n\t\t\t\t\"boolValue\":     {\"true\"},\n\t\t\t\t\"stringValue\":   {\"str\"},\n\t\t\t\t\"repeatedValue\": {\"a\", \"b\", \"c\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto2Message{\n\t\t\t\tFloatValue:    proto.Float32(1.5),\n\t\t\t\tDoubleValue:   proto.Float64(2.5),\n\t\t\t\tInt64Value:    proto.Int64(-1),\n\t\t\t\tInt32Value:    proto.Int32(-2),\n\t\t\t\tUint64Value:   proto.Uint64(3),\n\t\t\t\tUint32Value:   proto.Uint32(4),\n\t\t\t\tBoolValue:     proto.Bool(true),\n\t\t\t\tStringValue:   proto.String(\"str\"),\n\t\t\t\tRepeatedValue: []string{\"a\", \"b\", \"c\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"nested.nested.nested.repeated_value\": {\"a\", \"b\", \"c\"},\n\t\t\t\t\"nested.nested.nested.string_value\":   {\"s\"},\n\t\t\t\t\"nested.nested.string_value\":          {\"t\"},\n\t\t\t\t\"nested.string_value\":                 {\"u\"},\n\t\t\t\t\"nested.nested.map_value[first]\":      {\"foo\"},\n\t\t\t\t\"nested.nested.map_value[second]\":     {\"bar\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tNested: &examplepb.Proto3Message{\n\t\t\t\t\tNested: &examplepb.Proto3Message{\n\t\t\t\t\t\tMapValue: map[string]string{\n\t\t\t\t\t\t\t\"first\":  \"foo\",\n\t\t\t\t\t\t\t\"second\": \"bar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNested: &examplepb.Proto3Message{\n\t\t\t\t\t\t\tRepeatedValue: []string{\"a\", \"b\", \"c\"},\n\t\t\t\t\t\t\tStringValue:   \"s\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStringValue: \"t\",\n\t\t\t\t\t},\n\t\t\t\t\tStringValue: \"u\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"oneof_string_value\": {\"foobar\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tOneofValue: &examplepb.Proto3Message_OneofStringValue{\n\t\t\t\t\tOneofStringValue: \"foobar\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"oneofStringValue\": {\"foobar\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tOneofValue: &examplepb.Proto3Message_OneofStringValue{\n\t\t\t\t\tOneofStringValue: \"foobar\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"oneof_bool_value\": {\"true\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tOneofValue: &examplepb.Proto3Message_OneofBoolValue{\n\t\t\t\t\tOneofBoolValue: true,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"nested_oneof_value_one.int64Value\":   {\"-1\"},\n\t\t\t\t\"nested_oneof_value_one.string_value\": {\"foo\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tNestedOneofValue: &examplepb.Proto3Message_NestedOneofValueOne{\n\t\t\t\t\tNestedOneofValueOne: &examplepb.Proto3Message{\n\t\t\t\t\t\tInt64Value:  -1,\n\t\t\t\t\t\tStringValue: \"foo\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// Error on \"null\"\n\t\t\tvalues: url.Values{\n\t\t\t\t\"timestampValue\": {\"null\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(`parsing field \"timestamp_value\": parsing time \"null\" as \"2006-01-02T15:04:05.999999999Z07:00\": cannot parse \"null\" as \"2006\"`),\n\t\t},\n\t\t{\n\t\t\t// Error on \"null\"\n\t\t\tvalues: url.Values{\n\t\t\t\t\"durationValue\": {\"null\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(`parsing field \"duration_value\": time: invalid duration \"null\"`),\n\t\t},\n\t\t{\n\t\t\t// Don't allow setting a oneof more than once\n\t\t\tvalues: url.Values{\n\t\t\t\t\"oneof_bool_value\":   {\"true\"},\n\t\t\t\t\"oneof_string_value\": {\"foobar\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(\"field already set for oneof \\\"oneof_value\\\"\"),\n\t\t},\n\t\t{\n\t\t\t// Don't allow setting a oneof more than once\n\t\t\tvalues: url.Values{\n\t\t\t\t\"nested_oneof_int32_value\":          {\"10\"},\n\t\t\t\t\"nested_oneof_value_one.int32Value\": {\"-1\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(\"field already set for oneof \\\"nested_oneof_value\\\"\"),\n\t\t},\n\t\t{\n\t\t\t// Don't allow setting a oneof more than once\n\t\t\tvalues: url.Values{\n\t\t\t\t\"nested_oneof_value_one.int32Value\": {\"-1\"},\n\t\t\t\t\"nested_oneof_int32_value\":          {\"10\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(\"field already set for oneof \\\"nested_oneof_value\\\"\"),\n\t\t},\n\t\t{\n\t\t\t// Error when there are too many values\n\t\t\tvalues: url.Values{\n\t\t\t\t\"uint64_value\": {\"1\", \"2\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(\"too many values for field \\\"uint64_value\\\": 1, 2\"),\n\t\t},\n\t\t{\n\t\t\t// Error when dereferencing a list of messages\n\t\t\tvalues: url.Values{\n\t\t\t\t\"repeated_message.value\": {\"1\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(\"invalid path: \\\"repeated_message\\\" is not a message\"),\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"timestampValue\": {\"0000-01-01T00:00:00.00Z\"},\n\t\t\t},\n\t\t\tfilter:  utilities.NewDoubleArray(nil),\n\t\t\twant:    &examplepb.Proto3Message{},\n\t\t\twanterr: errors.New(`parsing field \"timestamp_value\": 0000-01-01T00:00:00.00Z before 0001-01-01`),\n\t\t},\n\t} {\n\t\tt.Run(strconv.Itoa(i), func(t *testing.T) {\n\t\t\tmsg := spec.want.ProtoReflect().New().Interface()\n\t\t\terr := runtime.PopulateQueryParameters(msg, spec.values, spec.filter)\n\t\t\tif spec.wanterr != nil {\n\t\t\t\tif err == nil || err.Error() != spec.wanterr.Error() {\n\t\t\t\t\tt.Errorf(\"runtime.PopulateQueryParameters(msg, %v, %v) failed with %q; want error %q\", spec.values, spec.filter, err, spec.wanterr)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"runtime.PopulateQueryParameters(msg, %v, %v) failed with %v; want success\", spec.values, spec.filter, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif diff := cmp.Diff(spec.want, msg, protocmp.Transform()); diff != \"\" {\n\t\t\t\tt.Errorf(\"runtime.PopulateQueryParameters(msg, %v, %v): %s\", spec.values, spec.filter, diff)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestPopulateParametersWithFilters(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tvalues url.Values\n\t\tfilter *utilities.DoubleArray\n\t\twant   proto.Message\n\t}{\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"bool_value\":     {\"true\"},\n\t\t\t\t\"string_value\":   {\"str\"},\n\t\t\t\t\"repeated_value\": {\"a\", \"b\", \"c\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray([][]string{\n\t\t\t\t{\"bool_value\"}, {\"repeated_value\"},\n\t\t\t}),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tStringValue: \"str\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"nested.nested.bool_value\":   {\"true\"},\n\t\t\t\t\"nested.nested.string_value\": {\"str\"},\n\t\t\t\t\"nested.string_value\":        {\"str\"},\n\t\t\t\t\"string_value\":               {\"str\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray([][]string{\n\t\t\t\t{\"nested\"},\n\t\t\t}),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tStringValue: \"str\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"nested.nested.bool_value\":   {\"true\"},\n\t\t\t\t\"nested.nested.string_value\": {\"str\"},\n\t\t\t\t\"nested.string_value\":        {\"str\"},\n\t\t\t\t\"string_value\":               {\"str\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray([][]string{\n\t\t\t\t{\"nested\", \"nested\"},\n\t\t\t}),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tNested: &examplepb.Proto3Message{\n\t\t\t\t\tStringValue: \"str\",\n\t\t\t\t},\n\t\t\t\tStringValue: \"str\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tvalues: url.Values{\n\t\t\t\t\"nested.nested.bool_value\":   {\"true\"},\n\t\t\t\t\"nested.nested.string_value\": {\"str\"},\n\t\t\t\t\"nested.string_value\":        {\"str\"},\n\t\t\t\t\"string_value\":               {\"str\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray([][]string{\n\t\t\t\t{\"nested\", \"nested\", \"string_value\"},\n\t\t\t}),\n\t\t\twant: &examplepb.Proto3Message{\n\t\t\t\tNested: &examplepb.Proto3Message{\n\t\t\t\t\tStringValue: \"str\",\n\t\t\t\t\tNested: &examplepb.Proto3Message{\n\t\t\t\t\t\tBoolValue: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tStringValue: \"str\",\n\t\t\t},\n\t\t},\n\t} {\n\t\tmsg := spec.want.ProtoReflect().New().Interface()\n\t\terr := runtime.PopulateQueryParameters(msg, spec.values, spec.filter)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"runtime.PoplateQueryParameters(msg, %v, %v) failed with %v; want success\", spec.values, spec.filter, err)\n\t\t\tcontinue\n\t\t}\n\t\tif got, want := msg, spec.want; !proto.Equal(got, want) {\n\t\t\tt.Errorf(\"runtime.PopulateQueryParameters(msg, %v, %v = %v; want %v\", spec.values, spec.filter, got, want)\n\t\t}\n\t}\n}\n\nfunc TestPopulateQueryParametersWithInvalidNestedParameters(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tmsg    proto.Message\n\t\tvalues url.Values\n\t\tfilter *utilities.DoubleArray\n\t}{\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"float_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"double_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"int64_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"int32_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"uint64_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"uint32_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"bool_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"string_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"repeated_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"enum_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"enum_value.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t\t{\n\t\t\tmsg: &examplepb.Proto3Message{},\n\t\t\tvalues: url.Values{\n\t\t\t\t\"repeated_enum.nested\": {\"test\"},\n\t\t\t},\n\t\t\tfilter: utilities.NewDoubleArray(nil),\n\t\t},\n\t} {\n\t\tspec.msg = spec.msg.ProtoReflect().New().Interface()\n\t\terr := runtime.PopulateQueryParameters(spec.msg, spec.values, spec.filter)\n\t\tif err == nil {\n\t\t\tt.Errorf(\"runtime.PopulateQueryParameters(msg, %v, %v) did not fail; want error\", spec.values, spec.filter)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "utilities/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library(\n    name = \"utilities\",\n    srcs = [\n        \"doc.go\",\n        \"pattern.go\",\n        \"readerfactory.go\",\n        \"string_array_flag.go\",\n        \"trie.go\",\n    ],\n    importpath = \"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\",\n)\n\ngo_test(\n    name = \"utilities_test\",\n    size = \"small\",\n    srcs = [\n        \"string_array_flag_test.go\",\n        \"trie_test.go\",\n    ],\n    deps = [\":utilities\"],\n)\n\nalias(\n    name = \"go_default_library\",\n    actual = \":utilities\",\n    visibility = [\"//visibility:public\"],\n)\n"
  },
  {
    "path": "utilities/doc.go",
    "content": "// Package utilities provides members for internal use in grpc-gateway.\npackage utilities\n"
  },
  {
    "path": "utilities/pattern.go",
    "content": "package utilities\n\n// OpCode is an opcode of compiled path patterns.\ntype OpCode int\n\n// These constants are the valid values of OpCode.\nconst (\n\t// OpNop does nothing\n\tOpNop = OpCode(iota)\n\t// OpPush pushes a component to stack\n\tOpPush\n\t// OpLitPush pushes a component to stack if it matches to the literal\n\tOpLitPush\n\t// OpPushM concatenates the remaining components and pushes it to stack\n\tOpPushM\n\t// OpConcatN pops N items from stack, concatenates them and pushes it back to stack\n\tOpConcatN\n\t// OpCapture pops an item and binds it to the variable\n\tOpCapture\n\t// OpEnd is the least positive invalid opcode.\n\tOpEnd\n)\n"
  },
  {
    "path": "utilities/readerfactory.go",
    "content": "package utilities\n\nimport (\n\t\"bytes\"\n\t\"io\"\n)\n\n// IOReaderFactory takes in an io.Reader and returns a function that will allow you to create a new reader that begins\n// at the start of the stream\nfunc IOReaderFactory(r io.Reader) (func() io.Reader, error) {\n\tb, err := io.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn func() io.Reader {\n\t\treturn bytes.NewReader(b)\n\t}, nil\n}\n"
  },
  {
    "path": "utilities/string_array_flag.go",
    "content": "package utilities\n\nimport (\n\t\"flag\"\n\t\"strings\"\n)\n\n// flagInterface is a cut down interface to `flag`\ntype flagInterface interface {\n\tVar(value flag.Value, name string, usage string)\n}\n\n// StringArrayFlag defines a flag with the specified name and usage string.\n// The return value is the address of a `StringArrayFlags` variable that stores the repeated values of the flag.\nfunc StringArrayFlag(f flagInterface, name string, usage string) *StringArrayFlags {\n\tvalue := &StringArrayFlags{}\n\tf.Var(value, name, usage)\n\treturn value\n}\n\n// StringArrayFlags is a wrapper of `[]string` to provider an interface for `flag.Var`\ntype StringArrayFlags []string\n\n// String returns a string representation of `StringArrayFlags`\nfunc (i *StringArrayFlags) String() string {\n\treturn strings.Join(*i, \",\")\n}\n\n// Set appends a value to `StringArrayFlags`\nfunc (i *StringArrayFlags) Set(value string) error {\n\t*i = append(*i, value)\n\treturn nil\n}\n"
  },
  {
    "path": "utilities/string_array_flag_test.go",
    "content": "package utilities_test\n\nimport (\n\t\"flag\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n)\n\nfunc TestStringArrayFlag(t *testing.T) {\n\ttests := []struct {\n\t\tname  string\n\t\tflags []string\n\t\twant  string\n\t}{\n\t\t{\n\t\t\tname:  \"No Value\",\n\t\t\tflags: []string{},\n\t\t\twant:  \"\",\n\t\t},\n\t\t{\n\t\t\tname:  \"Single Value\",\n\t\t\tflags: []string{\"--my_flag=1\"},\n\t\t\twant:  \"1\",\n\t\t},\n\t\t{\n\t\t\tname:  \"Repeated Value\",\n\t\t\tflags: []string{\"--my_flag=1\", \"--my_flag=2\"},\n\t\t\twant:  \"1,2\",\n\t\t},\n\t\t{\n\t\t\tname:  \"Repeated Same Value\",\n\t\t\tflags: []string{\"--my_flag=1\", \"--my_flag=1\"},\n\t\t\twant:  \"1,1\",\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tflagSet := flag.NewFlagSet(\"test\", flag.PanicOnError)\n\t\t\tresult := utilities.StringArrayFlag(flagSet, \"my_flag\", \"repeated flag\")\n\t\t\tif err := flagSet.Parse(tt.flags); err != nil {\n\t\t\t\tt.Errorf(\"flagSet.Parse() failed with %v\", err)\n\t\t\t}\n\t\t\tif !reflect.DeepEqual(result.String(), tt.want) {\n\t\t\t\tt.Errorf(\"StringArrayFlag() = %v, want %v\", result.String(), tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "utilities/trie.go",
    "content": "package utilities\n\nimport (\n\t\"sort\"\n)\n\n// DoubleArray is a Double Array implementation of trie on sequences of strings.\ntype DoubleArray struct {\n\t// Encoding keeps an encoding from string to int\n\tEncoding map[string]int\n\t// Base is the base array of Double Array\n\tBase []int\n\t// Check is the check array of Double Array\n\tCheck []int\n}\n\n// NewDoubleArray builds a DoubleArray from a set of sequences of strings.\nfunc NewDoubleArray(seqs [][]string) *DoubleArray {\n\tda := &DoubleArray{Encoding: make(map[string]int)}\n\tif len(seqs) == 0 {\n\t\treturn da\n\t}\n\n\tencoded := registerTokens(da, seqs)\n\tsort.Sort(byLex(encoded))\n\n\troot := node{row: -1, col: -1, left: 0, right: len(encoded)}\n\taddSeqs(da, encoded, 0, root)\n\n\tfor i := len(da.Base); i > 0; i-- {\n\t\tif da.Check[i-1] != 0 {\n\t\t\tda.Base = da.Base[:i]\n\t\t\tda.Check = da.Check[:i]\n\t\t\tbreak\n\t\t}\n\t}\n\treturn da\n}\n\nfunc registerTokens(da *DoubleArray, seqs [][]string) [][]int {\n\tvar result [][]int\n\tfor _, seq := range seqs {\n\t\tencoded := make([]int, 0, len(seq))\n\t\tfor _, token := range seq {\n\t\t\tif _, ok := da.Encoding[token]; !ok {\n\t\t\t\tda.Encoding[token] = len(da.Encoding)\n\t\t\t}\n\t\t\tencoded = append(encoded, da.Encoding[token])\n\t\t}\n\t\tresult = append(result, encoded)\n\t}\n\tfor i := range result {\n\t\tresult[i] = append(result[i], len(da.Encoding))\n\t}\n\treturn result\n}\n\ntype node struct {\n\trow, col    int\n\tleft, right int\n}\n\nfunc (n node) value(seqs [][]int) int {\n\treturn seqs[n.row][n.col]\n}\n\nfunc (n node) children(seqs [][]int) []*node {\n\tvar result []*node\n\tlastVal := int(-1)\n\tlast := new(node)\n\tfor i := n.left; i < n.right; i++ {\n\t\tif lastVal == seqs[i][n.col+1] {\n\t\t\tcontinue\n\t\t}\n\t\tlast.right = i\n\t\tlast = &node{\n\t\t\trow:  i,\n\t\t\tcol:  n.col + 1,\n\t\t\tleft: i,\n\t\t}\n\t\tresult = append(result, last)\n\t}\n\tlast.right = n.right\n\treturn result\n}\n\nfunc addSeqs(da *DoubleArray, seqs [][]int, pos int, n node) {\n\tensureSize(da, pos)\n\n\tchildren := n.children(seqs)\n\tvar i int\n\tfor i = 1; ; i++ {\n\t\tok := func() bool {\n\t\t\tfor _, child := range children {\n\t\t\t\tcode := child.value(seqs)\n\t\t\t\tj := i + code\n\t\t\t\tensureSize(da, j)\n\t\t\t\tif da.Check[j] != 0 {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t}()\n\t\tif ok {\n\t\t\tbreak\n\t\t}\n\t}\n\tda.Base[pos] = i\n\tfor _, child := range children {\n\t\tcode := child.value(seqs)\n\t\tj := i + code\n\t\tda.Check[j] = pos + 1\n\t}\n\tterminator := len(da.Encoding)\n\tfor _, child := range children {\n\t\tcode := child.value(seqs)\n\t\tif code == terminator {\n\t\t\tcontinue\n\t\t}\n\t\tj := i + code\n\t\taddSeqs(da, seqs, j, *child)\n\t}\n}\n\nfunc ensureSize(da *DoubleArray, i int) {\n\tfor i >= len(da.Base) {\n\t\tda.Base = append(da.Base, make([]int, len(da.Base)+1)...)\n\t\tda.Check = append(da.Check, make([]int, len(da.Check)+1)...)\n\t}\n}\n\ntype byLex [][]int\n\nfunc (l byLex) Len() int      { return len(l) }\nfunc (l byLex) Swap(i, j int) { l[i], l[j] = l[j], l[i] }\nfunc (l byLex) Less(i, j int) bool {\n\tsi := l[i]\n\tsj := l[j]\n\tvar k int\n\tfor k = 0; k < len(si) && k < len(sj); k++ {\n\t\tif si[k] < sj[k] {\n\t\t\treturn true\n\t\t}\n\t\tif si[k] > sj[k] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn k < len(sj)\n}\n\n// HasCommonPrefix determines if any sequence in the DoubleArray is a prefix of the given sequence.\nfunc (da *DoubleArray) HasCommonPrefix(seq []string) bool {\n\tif len(da.Base) == 0 {\n\t\treturn false\n\t}\n\n\tvar i int\n\tfor _, t := range seq {\n\t\tcode, ok := da.Encoding[t]\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tj := da.Base[i] + code\n\t\tif len(da.Check) <= j || da.Check[j] != i+1 {\n\t\t\tbreak\n\t\t}\n\t\ti = j\n\t}\n\tj := da.Base[i] + len(da.Encoding)\n\tif len(da.Check) <= j || da.Check[j] != i+1 {\n\t\treturn false\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "utilities/trie_test.go",
    "content": "package utilities_test\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/grpc-ecosystem/grpc-gateway/v2/utilities\"\n)\n\nfunc TestMaxCommonPrefix(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\tda     utilities.DoubleArray\n\t\ttokens []string\n\t\twant   bool\n\t}{\n\t\t{\n\t\t\tda:     utilities.DoubleArray{},\n\t\t\ttokens: nil,\n\t\t\twant:   false,\n\t\t},\n\t\t{\n\t\t\tda:     utilities.DoubleArray{},\n\t\t\ttokens: []string{\"foo\"},\n\t\t\twant:   false,\n\t\t},\n\t\t{\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 0},\n\t\t\t\tCheck: []int{0, 1, 2},\n\t\t\t},\n\t\t\ttokens: nil,\n\t\t\twant:   false,\n\t\t},\n\t\t{\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 0},\n\t\t\t\tCheck: []int{0, 1, 2},\n\t\t\t},\n\t\t\ttokens: []string{\"foo\"},\n\t\t\twant:   true,\n\t\t},\n\t\t{\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 0},\n\t\t\t\tCheck: []int{0, 1, 2},\n\t\t\t},\n\t\t\ttokens: []string{\"bar\"},\n\t\t\twant:   false,\n\t\t},\n\t\t{\n\t\t\t// foo|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 2, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 2, 3},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^foo$\n\t\t\t\t// 4: ^bar$\n\t\t\t},\n\t\t\ttokens: []string{\"foo\"},\n\t\t\twant:   true,\n\t\t},\n\t\t{\n\t\t\t// foo|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 2, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 2, 3},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^foo$\n\t\t\t\t// 4: ^bar$\n\t\t\t},\n\t\t\ttokens: []string{\"bar\"},\n\t\t\twant:   true,\n\t\t},\n\t\t{\n\t\t\t// foo|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 2, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 2, 3},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^foo$\n\t\t\t\t// 4: ^bar$\n\t\t\t},\n\t\t\ttokens: []string{\"something-else\"},\n\t\t\twant:   false,\n\t\t},\n\t\t{\n\t\t\t// foo|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 2, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 2, 3},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^foo$\n\t\t\t\t// 4: ^bar$\n\t\t\t},\n\t\t\ttokens: []string{\"foo\", \"bar\"},\n\t\t\twant:   true,\n\t\t},\n\t\t{\n\t\t\t// foo|foo\\.bar|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 3, 1, 0, 4, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 3, 2, 2, 5},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^bar$\n\t\t\t\t// 4: ^foo.bar\n\t\t\t\t// 5: ^foo$\n\t\t\t\t// 6: ^foo.bar$\n\t\t\t},\n\t\t\ttokens: []string{\"foo\"},\n\t\t\twant:   true,\n\t\t},\n\t\t{\n\t\t\t// foo|foo\\.bar|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 3, 1, 0, 4, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 3, 2, 2, 5},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^bar$\n\t\t\t\t// 4: ^foo.bar\n\t\t\t\t// 5: ^foo$\n\t\t\t\t// 6: ^foo.bar$\n\t\t\t},\n\t\t\ttokens: []string{\"foo\", \"bar\"},\n\t\t\twant:   true,\n\t\t},\n\t\t{\n\t\t\t// foo|foo\\.bar|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 3, 1, 0, 4, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 3, 2, 2, 5},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^bar$\n\t\t\t\t// 4: ^foo.bar\n\t\t\t\t// 5: ^foo$\n\t\t\t\t// 6: ^foo.bar$\n\t\t\t},\n\t\t\ttokens: []string{\"bar\"},\n\t\t\twant:   true,\n\t\t},\n\t\t{\n\t\t\t// foo|foo\\.bar|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 3, 1, 0, 4, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 3, 2, 2, 5},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^bar$\n\t\t\t\t// 4: ^foo.bar\n\t\t\t\t// 5: ^foo$\n\t\t\t\t// 6: ^foo.bar$\n\t\t\t},\n\t\t\ttokens: []string{\"something-else\"},\n\t\t\twant:   false,\n\t\t},\n\t\t{\n\t\t\t// foo|foo\\.bar|bar\n\t\t\tda: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 3, 1, 0, 4, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 3, 2, 2, 5},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^bar$\n\t\t\t\t// 4: ^foo.bar\n\t\t\t\t// 5: ^foo$\n\t\t\t\t// 6: ^foo.bar$\n\t\t\t},\n\t\t\ttokens: []string{\"foo\", \"bar\", \"baz\"},\n\t\t\twant:   true,\n\t\t},\n\t} {\n\t\tgot := spec.da.HasCommonPrefix(spec.tokens)\n\t\tif got != spec.want {\n\t\t\tt.Errorf(\"%#v.HasCommonPrefix(%v) = %v; want %v\", spec.da, spec.tokens, got, spec.want)\n\t\t}\n\t}\n}\n\nfunc TestAdd(t *testing.T) {\n\tfor _, spec := range []struct {\n\t\ttokens [][]string\n\t\twant   utilities.DoubleArray\n\t}{\n\t\t{\n\t\t\twant: utilities.DoubleArray{\n\t\t\t\tEncoding: make(map[string]int),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: [][]string{{\"foo\"}},\n\t\t\twant: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\"foo\": 0},\n\t\t\t\tBase:     []int{1, 1, 0},\n\t\t\t\tCheck:    []int{0, 1, 2},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^foo$\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: [][]string{{\"foo\"}, {\"bar\"}},\n\t\t\twant: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 2, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 1, 2, 3},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^bar\n\t\t\t\t// 3: ^foo$\n\t\t\t\t// 4: ^bar$\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: [][]string{{\"foo\", \"bar\"}, {\"foo\", \"baz\"}},\n\t\t\twant: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t\t\"baz\": 2,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 1, 2, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 2, 2, 3, 4},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^foo.bar\n\t\t\t\t// 3: ^foo.baz\n\t\t\t\t// 4: ^foo.bar$\n\t\t\t\t// 5: ^foo.baz$\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: [][]string{{\"foo\", \"bar\"}, {\"foo\", \"baz\"}, {\"qux\"}},\n\t\t\twant: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t\t\"baz\": 2,\n\t\t\t\t\t\"qux\": 3,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 1, 2, 3, 0, 0, 0},\n\t\t\t\tCheck: []int{0, 1, 2, 2, 1, 3, 4, 5},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^foo.bar\n\t\t\t\t// 3: ^foo.baz\n\t\t\t\t// 4: ^qux\n\t\t\t\t// 5: ^foo.bar$\n\t\t\t\t// 6: ^foo.baz$\n\t\t\t\t// 7: ^qux$\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttokens: [][]string{\n\t\t\t\t{\"foo\", \"bar\"},\n\t\t\t\t{\"foo\", \"baz\", \"bar\"},\n\t\t\t\t{\"qux\", \"foo\"},\n\t\t\t},\n\t\t\twant: utilities.DoubleArray{\n\t\t\t\tEncoding: map[string]int{\n\t\t\t\t\t\"foo\": 0,\n\t\t\t\t\t\"bar\": 1,\n\t\t\t\t\t\"baz\": 2,\n\t\t\t\t\t\"qux\": 3,\n\t\t\t\t},\n\t\t\t\tBase:  []int{1, 1, 1, 5, 8, 0, 3, 0, 5, 0},\n\t\t\t\tCheck: []int{0, 1, 2, 2, 1, 3, 4, 7, 5, 9},\n\t\t\t\t// 0: ^\n\t\t\t\t// 1: ^foo\n\t\t\t\t// 2: ^foo.bar\n\t\t\t\t// 3: ^foo.baz\n\t\t\t\t// 4: ^qux\n\t\t\t\t// 5: ^foo.bar$\n\t\t\t\t// 6: ^foo.baz.bar\n\t\t\t\t// 7: ^foo.baz.bar$\n\t\t\t\t// 8: ^qux.foo\n\t\t\t\t// 9: ^qux.foo$\n\t\t\t},\n\t\t},\n\t} {\n\t\tda := utilities.NewDoubleArray(spec.tokens)\n\t\tif got, want := da.Encoding, spec.want.Encoding; !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"da.Encoding = %v; want %v; tokens = %#v\", got, want, spec.tokens)\n\t\t}\n\t\tif got, want := da.Base, spec.want.Base; !compareArray(got, want) {\n\t\t\tt.Errorf(\"da.Base = %v; want %v; tokens = %#v\", got, want, spec.tokens)\n\t\t}\n\t\tif got, want := da.Check, spec.want.Check; !compareArray(got, want) {\n\t\t\tt.Errorf(\"da.Check = %v; want %v; tokens = %#v\", got, want, spec.tokens)\n\t\t}\n\t}\n}\n\nfunc compareArray(got, want []int) bool {\n\tvar i int\n\tfor i = 0; i < len(got) && i < len(want); i++ {\n\t\tif got[i] != want[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\tif i < len(want) {\n\t\treturn false\n\t}\n\tfor ; i < len(got); i++ {\n\t\tif got[i] != 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  }
]